GNU/Linux >> Belajar Linux >  >> Ubuntu

Pengguna Virtual Dan Domain Dengan Postfix, Courier Dan MySQL (Ubuntu 6.10 Edgy Eft)

Tutorial ini adalah Hak Cipta (c) 2007 oleh Falko Timme. Ini berasal dari tutorial dari Christoph Haas yang dapat Anda temukan di http://workaround.org. Anda bebas menggunakan tutorial ini di bawah lisensi Creative Commons 2.5 atau versi yang lebih baru.

Dokumen ini menjelaskan cara menginstal server email berbasis Postfix yang berbasis pada pengguna dan domain virtual, yaitu pengguna dan domain yang ada di database MySQL. Saya juga akan mendemonstrasikan instalasi dan konfigurasi Courier (Courier-POP3, Courier-IMAP), sehingga Courier dapat mengautentikasi terhadap database MySQL yang sama yang digunakan Postfix.

Server Postfix yang dihasilkan mampu SMTP-AUTH dan TLS dan kuota (kuota tidak ada di dalam Postfix secara default, saya akan menunjukkan cara menambal Postfix Anda dengan tepat). Kata sandi disimpan dalam terenkripsi formulir di database (sebagian besar dokumen yang saya temukan berurusan dengan kata sandi teks biasa yang merupakan risiko keamanan). Selain itu, tutorial ini mencakup pemasangan Amavisd , Pembunuh Spam dan ClamAV sehingga email akan dipindai dari spam dan virus.

Keuntungan dari pengaturan "virtual" seperti itu (pengguna dan domain virtual dalam database MySQL) adalah kinerjanya jauh lebih baik daripada pengaturan yang didasarkan pada pengguna sistem "nyata". Dengan penyiapan virtual ini, server email Anda dapat menangani ribuan domain dan pengguna. Selain itu, lebih mudah untuk diadministrasikan karena Anda hanya perlu berurusan dengan database MySQL ketika Anda menambahkan pengguna/domain baru atau mengedit yang sudah ada. Tidak ada lagi perintah postmap untuk membuat file db, tidak ada lagi reload Postfix, dll. Untuk administrasi database MySQL Anda dapat menggunakan alat berbasis web seperti phpMyAdmin yang juga akan diinstal di howto ini. Keuntungan ketiga adalah pengguna memiliki alamat email sebagai nama pengguna (bukan nama pengguna + alamat email) yang lebih mudah dipahami dan diingat.

Howto ini dimaksudkan sebagai panduan praktis; itu tidak mencakup latar belakang teoretis. Mereka diperlakukan di banyak dokumen lain di web.

Dokumen ini datang tanpa jaminan apapun! Saya ingin mengatakan bahwa ini bukan satu-satunya cara untuk mengatur sistem seperti itu. Ada banyak cara untuk mencapai tujuan ini tetapi ini adalah cara yang saya ambil. Saya tidak memberikan jaminan apa pun bahwa ini akan berhasil untuk Anda!

1 Catatan Awal

Tutorial ini didasarkan pada Ubuntu 6.10 (Edgy Eft), jadi Anda harus menyiapkan instalasi dasar Ubuntu sebelum melanjutkan dengan tutorial ini. Sistem harus memiliki alamat IP statis. Saya menggunakan 192.168.0.100 sebagai alamat IP saya dalam tutorial ini dan server1.example.com sebagai nama host.

Saya lebih suka melakukan semua langkah di sini sebagai pengguna root. Jadi, jika Anda belum membuat login root, Anda harus melakukannya sekarang:

sudo passwd root 

Setelah itu, login sebagai root:

su 

Jika Anda ingin bekerja sebagai pengguna biasa alih-alih root, ingatlah untuk meletakkan sudo di depan semua perintah yang ditampilkan dalam tutorial ini. Jadi ketika saya menjalankan

apt-get update 

Anda harus menjalankan

sudo apt-get update 

sebagai gantinya, dll.

2 Instal Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Sebelum menginstal paket-paket ini, kita perlu memodifikasi /etc/apt/sources.list dan mengaktifkan repositori universe, jadi pastikan Anda mengaktifkan baris berikut:

vi /etc/apt/sources.list
[...]

deb http://de.archive.ubuntu.com/ubuntu/ edgy universe

deb-src http://de.archive.ubuntu.com/ubuntu/ edgy universe

[...]

Kemudian jalankan

apt-get update

untuk memperbarui database paket Anda.

Untuk menginstal Postfix, Courier, Saslauthd, MySQL, dan phpMyAdmin, kita cukup menjalankan

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql 

Anda akan ditanya beberapa pertanyaan:

Buat direktori untuk administrasi berbasis web ? <-- Tidak
Jenis konfigurasi umum? <-- Situs Internet
Nama email? <-- server1.example.com
Diperlukan sertifikat SSL <-- Oke

3 Terapkan Patch Kuota Ke Postfix

Kita harus mendapatkan sumber Postfix, menambalnya dengan tambalan kuota, membangun paket .deb Postfix baru dan menginstal paket .deb tersebut:

apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch libdb4.3-dev libmysqlclient15-dev

cd /usr/src
apt-get source postfix

(Pastikan Anda menggunakan versi Postfix yang benar pada perintah berikut. Saya telah menginstal Postfix 2.3.3. Anda dapat mengetahui versi Postfix Anda dengan menjalankan

 postconf -d | grep mail_version 

)

wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.3.3-vda.patch.gz
gunzip postfix-2.3.3-vda.patch.gz
cd postfix-2.3.3
patch -p1 <../postfix-2.3.3-vda.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.3.3 -1_i386.deb
dpkg -i postfix-mysql_2.3.3-1_i386.deb

4 Membuat Database MySQL Untuk Postfix/Courier

Secara default, MySQL diinstal tanpa kata sandi root, yang segera kami ubah (ganti kata sandi rootsql Anda dengan kata sandi yang ingin Anda gunakan):

mysqladmin -u root password yourrootsqlpassword

Sekarang kita membuat database bernama mail:

mysqladmin -u root -p create mail

Selanjutnya, kita pergi ke shell MySQL:

mysql -u root -p

Di shell MySQL, kami membuat pengguna mail_admin dengan passwort mail_admin_password (ganti dengan kata sandi Anda sendiri) yang memiliki hak istimewa SELECT,INSERT,UPDATE,DELETE pada database email. Pengguna ini akan digunakan oleh Postfix dan Courier untuk terhubung ke database email:

GRANT SELECT, INSERT, UPDATE, DELETE PADA email.* UNTUK 'mail_admin'@'localhost' DIIDENTIFIKASI DENGAN 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* UNTUK 'mail_admin'@'localhost. domain lokal' DIIDENTIFIKASI DENGAN 'mail_admin_password';
HAK ISTIMEWA FLUSH;

Masih di shell MySQL, kami membuat tabel yang dibutuhkan Postfix dan Courier:

USE mail;

CREATE TABLE domain (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
kuota INT(10) DEFAULT '10485760',
PRIMARY KEY (email )
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE =MyISAM;

quit;

Seperti yang mungkin Anda perhatikan, dengan berhenti; perintah kami telah meninggalkan shell MySQL dan kembali ke shell Linux.

domain tabel akan menyimpan setiap domain virtual tempat Postfix harus menerima email (mis. example.com ).

domain
contoh.com

penerusan tabel adalah untuk aliasing satu alamat email ke yang lain, mis. teruskan email untuk [email protected] ke .

sumber tujuan
[dilindungi email] [dilindungi email]

pengguna tabel menyimpan semua pengguna virtual (yaitu alamat email, karena alamat email dan nama pengguna sama) dan kata sandi (dalam terenkripsi form!) dan nilai kuota untuk setiap kotak surat (dalam contoh ini nilai defaultnya adalah 10485760 byte yang berarti 10MB).

email sandi kuota
[dilindungi email] No9.E4skNvGa. ("rahasia" dalam bentuk terenkripsi) 10485760

transportasi tabel adalah opsional, ini untuk pengguna tingkat lanjut. Ini memungkinkan untuk meneruskan email untuk pengguna tunggal, seluruh domain atau semua email ke server lain. Misalnya,

domain transportasi
contoh.com smtp:[1.2.3.4]

akan meneruskan semua email untuk example.com melalui protokol smtp ke server dengan alamat IP 1.2.3.4 (tanda kurung siku [] berarti "jangan mencari data MX DNS" (yang masuk akal untuk alamat IP...). Jika Anda menggunakan nama domain yang sepenuhnya memenuhi syarat (FQDN), Anda tidak akan menggunakan tanda kurung siku.).

BTW, (Saya berasumsi bahwa alamat IP dari sistem server email Anda adalah 192.168.0.100) Anda dapat mengakses phpMyAdmin melalui http://192.168.0.100/phpmyadmin/ di browser dan masuk sebagai mail_admin. Kemudian Anda dapat melihat database. Nanti Anda dapat menggunakan phpMyAdmin untuk mengatur server email Anda.

5 Konfigurasi Postfix

Sekarang kita harus memberitahu Postfix di mana ia dapat menemukan semua informasi dalam database. Oleh karena itu kita harus membuat enam file teks. Anda akan melihat bahwa saya memberi tahu Postfix untuk terhubung ke MySQL pada alamat IP 127.0.0.1 alih-alih localhost. Ini karena Postfix berjalan di chroot jail dan tidak memiliki akses ke soket MySQL yang akan coba disambungkan jika saya memberi tahu Postfix untuk menggunakan localhost. Jika saya menggunakan 127.0.0.1 Postfix menggunakan jaringan TCP untuk terhubung ke MySQL yang tidak ada masalah bahkan di chroot jail (alternatifnya adalah memindahkan soket MySQL ke chroot jail yang menyebabkan beberapa masalah lain).

Harap pastikan bahwa /etc/mysql/my.cnf berisi baris berikut:

vi /etc/mysql/my.cnf
[...]

bind-address            = 127.0.0.1

[...]

Jika Anda harus mengubah /etc/mysql/my.cnf, silakan restart MySQL sekarang:

/etc/init.d/mysql restart

Jalankan

netstat -tap 

untuk memastikan bahwa MySQL mendengarkan pada 127.0.0.1 (localhost.localdomain):

[email protected]:/usr/src# netstat -tap
Koneksi Internet aktif (server dan terbentuk)
Proto Recv-Q Send-Q Local Address         Foreign Address      /  State P 0 0 localhost.localdo:mysql*:*dengarkan 4556/mysqld
tcp 0 0*:smtp*:*dengarkan 12994/master
tcp6 0 0*:imaps*:*dengarkan 4816/curiertcpd
tcp6 0 0*:POP3S*:*Dengarkan 4263/curiertcpd
tcp6 0 0*:Pop3*:*Dengarkan 4198/curiertcpd
tcp6 0 0*:imap2*:Dengarkan 4761/curiertcpd
tcp6 0 0*:www*:*Dengarkan 13283/apache2
tcp6 0 0*:ssh*:*Dengarkan 3192/sshd

Sekarang mari kita buat enam file teks kita.

vi /etc/postfix/mysql-virtual_domains.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT domain AS virtual FROM domains WHERE domain='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_forwardings.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT destination FROM forwardings WHERE source='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailboxes.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_email2email.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT email FROM users WHERE email='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_transports.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT transport FROM transport WHERE domain='%s'

hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT quota FROM users WHERE email='%s'

hosts = 127.0.0.1

Kemudian ubah izin dan grup file-file ini:

chmod o=/etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

Sekarang kita membuat pengguna dan grup bernama vmail dengan direktori home /home/vmail. Di sinilah semua kotak surat akan disimpan.

groupadd -g 5000 vmail
penggunaadd -g vmail -u 5000 vmail -d /home/vmail -m

Selanjutnya kita melakukan beberapa konfigurasi Postfix. Pastikan Anda mengganti server1.example.com dengan FQDN yang valid, jika tidak, Postfix Anda mungkin tidak berfungsi dengan baik!

postconf -e 'myhostname =server1.example.com'
postconf -e 'mydestination =server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks =127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e ' virtual_alias_maps =proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains =proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps =proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base =/home/vmail'
postconf -e 'virtual_uid_maps =static:5000'
postconf -e 'virtual_gid_maps =static:5000'
postconf -e ' smtpd_sasl_auth_enable =yes'
postconf -e 'broken_sasl_auth_clients =yes'
postconf -e 'smtpd_recipient_restrictions =permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination' =dan 'smtpd_tls_cer t_file =/etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file =/etc/postfix/smtpd.key'
postconf -e 'transport_maps =proxy:mysql:/etc/postfix/mysql -virtual_transports.cf'
postconf -e 'virtual_create_maildirsize =yes'
postconf -e 'virtual_maildir_extended =yes'
postconf -e 'virtual_mailbox_limit_maps =proxy:mysql:/etc/postfix/mysql- virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override =yes'
postconf -e 'virtual_maildir_limit_message ="Pengguna yang Anda coba jangkau melebihi kuota."'
postconf -e 'virtual_overquota_bounce =$s'
postconf -e 'proxy_read_maps =$local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps_maps_maps_limited $relay_recipient_maps_domains $canonical_maps_maps_maps

Setelah itu kita buat sertifikat SSL yang dibutuhkan untuk TLS:

cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

<-- Masukkan Nama Negara Anda (mis., "DE").
<-- Masukkan Nama Negara Bagian atau Provinsi Anda.
<-- Masukkan Kota Anda.
<-- Masukkan Organisasi Anda Nama (mis., nama perusahaan Anda).
<-- Masukkan Nama Unit Organisasi Anda (mis., "Departemen TI").
<-- Masukkan Nama Domain yang Memenuhi Syarat dari sistem (mis. " server1.example.com").
<-- Masukkan Alamat Email Anda.

Kemudian ubah izin smtpd.key:

chmod o= /etc/postfix/smtpd.key

6 Konfigurasi Saslauthd

Jalankan pertama

mkdir -p /var/spool/postfix/var/run/saslauthd

Kemudian edit /etc/default/saslauthd.conf Hapus # di depan START=yes dan tambahkan baris PARAMS="-m /var/spool/postfix/var/run/saslauthd -r" dan PIDFILE="/var/spool/postfix/var/run/${ NAMA}/saslauthd.pid". File kemudian akan terlihat seperti ini:

vi /etc/default/saslauthd
# This needs to be uncommented before saslauthd will be run automatically

START=yes



PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"

PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"



# You must specify the authentication mechanisms you wish to use.

# This defaults to "pam" for PAM support, but may also include

# "shadow" or "sasldb", like this:

# MECHANISMS="pam shadow"



MECHANISMS="pam"

Kemudian buat file /etc/pam.d/smtp. Seharusnya hanya berisi dua baris berikut (pastikan untuk mengisi detail database Anda yang benar):

vi /etc/pam.d/smtp
auth    required   pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

Selanjutnya buat file /etc/postfix/sasl/smtpd.conf. Seharusnya terlihat seperti ini:

vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd

mech_list: plain login

allow_plaintext: true

auxprop_plugin: mysql

sql_hostnames: 127.0.0.1

sql_user: mail_admin

sql_passwd: mail_admin_password

sql_database: mail

sql_select: select password from users where email = '%u'

Kemudian restart Postfix dan Saslauthd:

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

7 Konfigurasikan Kurir

Sekarang kita harus memberi tahu Courier bahwa itu harus mengautentikasi terhadap database MySQL kita. Pertama, edit /etc/courier/authdaemonrc dan ubah nilai authmodulelist sehingga berbunyi:

vi /etc/courier/authdaemonrc
[...]

authmodulelist="authmysql"

[...]

Kemudian buat cadangan /etc/courier/authmysqlrc dan kosongkan file lama:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null> /etc/courier/authmysqlrc

Kemudian buka /etc/courier/authmysqlrc dan masukkan baris berikut ke dalamnya:

vi /etc/courier/authmysqlrc
MYSQL_SERVER localhost

MYSQL_USERNAME mail_admin

MYSQL_PASSWORD mail_admin_password

MYSQL_PORT 0

MYSQL_DATABASE mail

MYSQL_USER_TABLE users

MYSQL_CRYPT_PWFIELD password

#MYSQL_CLEAR_PWFIELD password

MYSQL_UID_FIELD 5000

MYSQL_GID_FIELD 5000

MYSQL_LOGIN_FIELD email

MYSQL_HOME_FIELD "/home/vmail"

MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')

#MYSQL_NAME_FIELD

MYSQL_QUOTA_FIELD quota

Kemudian restart Kurir:

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/ init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

Dengan menjalankan

telnet localhost pop3

Anda dapat melihat apakah server POP3 Anda berfungsi dengan benar. Seharusnya mengembalikan +OK Halo. (Ketik quit untuk kembali ke shell Linux.)

[email protected]:/etc/postfix# telnet localhost pop3
Mencoba 127.0.0.1...
Terhubung ke localhost.localdomain.
Karakter escape adalah '^]'.
+OK Halo.
berhenti
+OK Semoga lain kali lebih beruntung.
Koneksi ditutup oleh host asing.

8 Ubah /etc/aliases

Sekarang kita harus memodifikasi /etc/aliases dan menentukan alias untuk postmaster di dalamnya. Anda dapat menentukan salah satu alamat email yang ada sehingga Anda dapat menerima pemberitahuan ke postmaster. Juga, ubah baris root sehingga email untuk root juga akan diteruskan ke postmaster:

vi /etc/aliases
# Added by installer for initial user

root:   postmaster

postmaster: [email protected]

Setiap kali Anda memodifikasi /etc/aliases, Anda harus menjalankan

newaliases

setelah itu dan mulai ulang Postfix:

/etc/init.d/postfix restart  

9 Instal amavisd-new, SpamAssassin, Dan ClamAV

Untuk menginstal amavisd-new, spamassassin dan clamav, jalankan perintah berikut:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

Setelah itu kita harus mengkonfigurasi amavisd-new. Konfigurasi dibagi dalam berbagai file yang berada di direktori /etc/amavis/conf.d. Lihatlah masing-masing untuk menjadi akrab dengan konfigurasi. Sebagian besar pengaturan baik-baik saja, namun kita harus memodifikasi tiga file:

Pertama kita harus mengaktifkan ClamAV dan SpamAssassin di /etc/amavis/conf.d/15-content_filter_mode dengan menghapus komentar pada baris @bypass_virus_checks_maps dan @bypass_spam_checks_maps:

vi /etc/amavis/conf.d/15-content_filter_mode

Filenya akan terlihat seperti ini:

use strict;



# You can modify this file to re-enable SPAM checking through spamassassin

# and to re-enable antivirus checking.



#

# Default antivirus checking mode

# Uncomment the two lines below to enable it back

#



@bypass_virus_checks_maps = (

   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);





#

# Default SPAM checking mode

# Uncomment the two lines below to enable it back

#



@bypass_spam_checks_maps = (

   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);



1;  # insure a defined return

Dan kemudian Anda harus melihat pengaturan spam dan tindakan untuk spam-/virus-mails di /etc/amavis/conf.d/20-debian_defaults. Tidak perlu mengubah apa pun jika pengaturan default sudah sesuai untuk Anda. File berisi banyak penjelasan sehingga tidak perlu menjelaskan pengaturan di sini:

vi /etc/amavis/conf.d/20-debian_defaults
$QUARANTINEDIR = "$MYHOME/virusmails";



$log_recip_templ = undef;    # disable by-recipient level-0 log entries

$DO_SYSLOG = 1;              # log via syslogd (preferred)

$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages

$syslog_facility = 'mail';

$syslog_priority = 'debug';  # switch to info to drop debug output, etc



$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)

$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1



$inet_socket_port = 10024;   # default listenting socket



$sa_spam_subject_tag = '***SPAM*** ';

$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level

$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level

$sa_kill_level_deflt = 6.31; # triggers spam evasive actions

$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent



$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger

$sa_local_tests_only = 0;    # only tests which do not require internet access?



[...]

$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)

$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA

$final_spam_destiny       = D_BOUNCE;

$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)

[...]

Terakhir, edit /etc/amavis/conf.d/50-user dan tambahkan baris $pax='pax'; di tengah:

vi /etc/amavis/conf.d/50-user
[...]

$pax='pax';

[...]

Setelah itu, jalankan perintah ini untuk menambahkan pengguna clamav ke grup amavis dan untuk memulai ulang amavisd-new dan ClamAV:

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart

Selanjutnya kita harus mengedit file konfigurasi daemon Freshclam (yaitu daemon yang secara teratur dan otomatis mengambil signature virus terbaru dari mirror ClamAV) karena mengandung bug kecil. Buka /etc/clamav/freshclam.conf dan ubah baris NotifyClamd seperti gambar di bawah ini:

vi /etc/clamav/freshclam.conf
[...]

NotifyClamd /etc/clamav/clamd.conf

[...]

Kemudian restart Freshclam (pastikan tidak ada proses Freshclam lain (mungkin dari instalasi ClamAV lain) yang berjalan karena Freshclam kita akan gagal untuk memulai):

/etc/init.d/clamav-freshclam restart

Sekarang kita harus mengkonfigurasi Postfix untuk menyalurkan email masuk melalui amavisd-new:

postconf -e 'content_filter =amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options =no_address_mappings'

Setelah itu tambahkan baris berikut ke /etc/postfix/master.cf:

vi /etc/postfix/master.cf
[...]

amavis unix - - - - 2 smtp

        -o smtp_data_done_timeout=1200

        -o smtp_send_xforward_command=yes



127.0.0.1:10025 inet n - - - - smtpd

        -o content_filter=

        -o local_recipient_maps=

        -o relay_recipient_maps=

        -o smtpd_restriction_classes=

        -o smtpd_client_restrictions=

        -o smtpd_helo_restrictions=

        -o smtpd_sender_restrictions=

        -o smtpd_recipient_restrictions=permit_mynetworks,reject

        -o mynetworks=127.0.0.0/8

        -o strict_rfc821_envelopes=yes

        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

        -o smtpd_bind_address=127.0.0.1

Kemudian restart Postfix:

/etc/init.d/postfix restart

Sekarang jalankan

netstat -tap

dan Anda akan melihat Postfix (master) mendengarkan pada port 25 (smtp) dan 10025, dan amavisd-new pada port 10024:

[email protected]:/usr/local/sbin# netstat -tap
Koneksi Internet aktif (server dan terbentuk)
Proto Recv-Q Send-Q Local Address         Foreign Address   nama      State> tcp 0 0 localhost.localdo:10024*:*Dengarkan 16043 /amavisd (mast
tcp 0 0 localhost.localdo:10025*:*Dengarkan 15794 /master
tcp 0 0 localhost.localdo:mysql* :*Dengarkan 4783 /mysqld
tcp 0 0*:smtp*:*dengarkan 15794 /master
tcp6 0 0*:imaps*:*dengarkan 13452 /couriertcpd
tcp6 0 0*:POP3S *:*Dengarkan 13517/curiertcpd
tcp6 0 0*:pop3*:*Dengarkan 13480/curiertcpd
tcp6 0 0*:imap2*:*dengarkan 13412/c uriierTcpd
tcp6 0 0*:www*:*dengarkan 4489/apache2
tcp6 0 0*:ssh*:*dengarkan 3193/sshd

 

10 Instal Razor, Pyzor Dan DCC Dan Konfigurasi SpamAssassin

Razor, Pyzor, dan DCC adalah filter spam yang menggunakan jaringan penyaringan kolaboratif. Untuk menginstalnya, jalankan

apt-get install razor pyzor dcc-client

Sekarang kita harus memberitahu SpamAssassin untuk menggunakan ketiga program tersebut. Edit /etc/spamassassin/local.cf dan tambahkan baris berikut ke dalamnya:

vi /etc/spamassassin/local.cf
[...]



# dcc

use_dcc 1

dcc_path /usr/bin/dccproc

dcc_add_header 1

dcc_dccifd_path /usr/sbin/dccifd



#pyzor

use_pyzor 1

pyzor_path /usr/bin/pyzor

pyzor_add_header 1



#razor

use_razor2 1

razor_config /etc/razor/razor-agent.conf



#bayes

use_bayes 1

use_bayes_rules 1

bayes_auto_learn 1

Mulai ulang amavisd-new setelahnya:

/etc/init.d/amavis restart

11 Pemberitahuan Melebihi Kuota

Jika Anda ingin mendapatkan pemberitahuan tentang semua akun email yang melebihi kuota, lakukan ini:

cd /usr/local/sbin/
wget http://puuhis.net/vhcs/quota.txt
mv quota.txt quota_notify
chmod 755 quota_notify

Buka /usr/local/sbin/quota_notify dan edit variabel di atas. Lebih jauh ke bawah dalam file (menjelang akhir) ada dua baris di mana Anda harus menambahkan tanda %:

vi /usr/local/sbin/quota_notify
[...]

my $POSTFIX_CF = "/etc/postfix/main.cf";

my $MAILPROG = "/usr/sbin/sendmail -t";

my $WARNPERCENT = 80;

my @POSTMASTERS = ('[email protected]');

my $CONAME = 'My Company';

my $COADDR = '[email protected]';

my $SUADDR = '[email protected]';

my $MAIL_REPORT = 1;

my $MAIL_WARNING = 1;

[...]

           print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.\n";

[...]

           print "Your mailbox: $luser is $lusers{$luser}% full.\n\n";

[...]

Jalankan

crontab -e

untuk membuat tugas cron untuk skrip itu:

0 0 * * * /usr/local/sbin/quota_notify &> /dev/null

(Catatan (sedikit di luar topik):di Ubuntu crontab -e akan otomatis membuka editor nano. Jika Anda terbiasa bekerja dengan editor vi (seperti saya), jalankan perintah berikut:

rm -f /etc/alternatives/editor
ln -s /usr/bin/vi /etc/alternatives/editor

Setelah itu, jalankan crontab -e, dan vi akan muncul.)

12 Uji Postfix

Untuk melihat apakah Postfix siap untuk SMTP-AUTH dan TLS, jalankan

telnet localhost 25

Setelah Anda membuat koneksi ke server email Postfix, ketik

ehlo localhost

Jika Anda melihat garis

250-STARTTLS

dan

250-AUTH

semuanya baik-baik saja:

[email protected]:/usr/local/sbin# telnet localhost 25
Mencoba 127.0.0.1...
Terhubung ke localhost.localdomain.
Karakter escape adalah '^]'.
220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250 -VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
keluar
221 2.0.0 Sampai jumpa
Koneksi ditutup oleh host asing.
[email protected]:/usr/local/sbin#

Ketik

quit

untuk kembali ke shell sistem.

13 Mengisi Database Dan Menguji

Untuk mengisi database Anda dapat menggunakan shell MySQL:

mysql -u root -p
GUNAKAN email;

Setidaknya Anda harus membuat entri di tabel domain dan pengguna :

INSERT INTO `domains` (`domain`) VALUES ('example.com');
INSERT INTO `users` (`email`, `password`, `quota`) NILAI ('[email protected]', ENCRYPT('rahasia'), 10485760);

(Harap berhati-hati Anda menggunakan sintaks ENCRYPT dalam pernyataan INSERT kedua untuk mengenkripsi kata sandi!)

Jika Anda ingin membuat entri di dua tabel lainnya, tampilannya akan seperti ini:

INSERT INTO `forwardings` (`source`, `destination`) NILAI ('[email protected]', '[email protected]');
INSERT INTO `transport` (`domain`, `transport`) NILAI ('contoh.com', 'smtp:mail.contoh.com');

Untuk keluar dari shell MySQL, ketik

quit;

Bagi kebanyakan orang akan lebih mudah jika mereka memiliki front-end grafis ke MySQL; oleh karena itu Anda juga dapat menggunakan phpMyAdmin (dalam contoh ini di bawah http://192.168.0.100/phpmyadmin/ atau http://server1.example.com/phpmyadmin/) untuk mengelola mail basis data. Sekali lagi, saat Anda membuat pengguna, pastikan Anda menggunakan fungsi ENCRYPT untuk mengenkripsi kata sandi:

Saya tidak berpikir saya harus menjelaskan domain dan tabel pengguna lebih lanjut.

Tabel penerusan dapat memiliki entri seperti berikut:

sumber tujuan  
[dilindungi email] [dilindungi email] Mengalihkan email untuk [email protected] ke [email protected]
@example.com [dilindungi email] Membuat akun Catch-All untuk [email protected] Semua email ke example.com akan tiba di [email protected], kecuali yang ada di tabel users (yaitu, jika [email protected] ada di tabel pengguna, email ke [email protected] akan tetap sampai di [email protected]).
@example.com @anotherdomain.tld Ini mengalihkan semua email ke example.com ke pengguna yang sama di domain lain.tld. Misalnya, email ke [email protected] akan diteruskan ke [email protected]
[dilindungi email] [dilindungi email], [dilindungi email] Teruskan email untuk [email protected] ke dua atau lebih alamat email. Semua alamat email yang terdaftar di bawah tujuan menerima salinan email.

Tabel transport dapat memiliki entri seperti ini:

domain transportasi  
contoh.com : Mengirimkan email untuk example.com secara lokal. Ini seolah-olah catatan ini tidak akan ada di tabel ini sama sekali.
contoh.com smtp:mail.anotherdomain.tld Mengirim semua email untuk example.com melalui smtp ke server mail.anotherdomain.com.
contoh.com smtp:mail.anotherdomain.tld:2025 Mengirimkan semua email untuk example.com melalui smtp ke server mail.anotherdomain.com, tetapi pada port 2025, bukan 25 yang merupakan port default untuk smtp.
contoh.com

smtp:[1.2.3.4]
smtp:[1.2.3.4]:2025
smtp:[mail.anotherdomain.tld]

Kurung kotak mencegah Postfix melakukan pencarian data DNS MX untuk alamat dalam kurung siku. Masuk akal untuk alamat IP.
.example.com smtp:mail.anotherdomain.tld Mail for any subdomain of example.com is delivered to mail.anotherdomain.tld.
* smtp:mail.anotherdomain.tld All emails are delivered to mail.anotherdomain.tld.
[email protected] smtp:mail.anotherdomain.tld Emails for [email protected] are delivered to mail.anotherdomain.tld.

See

man transport 

untuk lebih jelasnya.

Please keep in mind that the order of entries in the transport table is important! The entries will be followed from the top to the bottom.

Important: Postfix uses a caching mechanism for the transports, therefore it might take a while until you changes in the transport table take effect. If you want them to take effect immediately, run

postfix reload 

after you have made your changes in the transport table.

14 References

  • Tutorial:ISP-style Email Service with Debian-Sarge and Postfix 2.1:http://workaround.org/articles/ispmail-sarge/
  • Postfix + Quota:http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
  • Mail Passwords Encrypted using saslauthd:http://www.syscp.de/docs/public/contrib/cryptedmailpws

  • Postfix MTA:http://www.postfix.org/
  • Postfix Quota Patch:http://web.onda.com.br/nadal/
  • phpMyAdmin:http://www.phpmyadmin.net/
  • Ubuntu:http://www.ubuntu.com/

Ubuntu
  1. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 14.04LTS)

  2. Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 14.04LTS

  3. Pengguna dan Domain Virtual Dengan Sendmail

  1. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 13.10)

  2. Tutorial server LAMP Ubuntu 16.04 (LTS) dengan Apache, PHP 7, dan MySQL

  3. Server surat dengan pengguna dan domain virtual menggunakan Postfix dan Dovecot pada CentOS 6 VPS

  1. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 8.04 LTS)

  2. Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 8.04 LTS

  3. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 8.10)