Tidak ada copyright apapun dalam dukumen ini, anda bebas menyalin, mencetak, maupun memodifikasi. Saran, koreksi, kritik, kesalahan ketik, maupun ucapan lain-lain silakan dikirimkan ke email penulis: kamas {at} its {dot} ac {dot} id. Terima Kasih.
Manual ini berisi tentang panduan untuk membuat distributed mail server dengan menggunakan postfix sebagai MTAnya. Sistem operasi yang digunakan adalah Debian GNU/Linux etch/testing. Penyimpanan data email dilakukan pada sebuah file server melalui protokol NFS (Network File System).
Domain yang ditangani oleh sistem ini bersifat virtual, di mana data domain, alias(forwarding), dan data user disimpan pada database MySQL. Cara ini merupakan cara yang efektif pada mailserver yang menangani data user dalam jumlah besar karena tidak ada akses file teks langsung seperti yang terjadi pada penyimpanan user dengan metode passwd.
Paket-paket program yang digunakan dalam sistem ini merupakan paket debian itu sendiri, namun ada beberapa komponen yang harus ditambahkan secara manual pada postfix dan librari authentikasinya.
Program yang harus diinstall adalah:
postfix
postfix-mysql
mysql-client
mysql-server
sasl2-bin
libsasl2-modules
libsasl2-modules-sql
courier-authdaemon
courier-authlib-mysql
courier-imap
courier-pop
nfs-kernel-server
portmap
clamav-daemon
clamav-freshclam
amavisd-new
spamassassin
zoo
unzip
unrar
unarj
Patch yang harus didownload adalah Postfix-VDA patch untuk mengaktifkan fasilitas quota virtual mailbox user.
Pemilihan MySQL sebagai backend database didasarkan pada beberapa alasan berikut ini:
Akses cepat.
Sederhana.
Administrasinya mudah.
Instalasi pada debian dilakukan dengan menggunakan apt-get.
root# apt-get install mysql-server-4.1 mysql-client-4.1 libmysqlclient10 Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libdbd-mysql-perl libmysqlclient14 Suggested packages: mysql-doc-4.1 Recommended packages: libmysqlclient14-dev The following NEW packages will be installed: libdbd-mysql-perl libmysqlclient14 mysql-client-4.1 mysql-server-4.1 libmysqlclient10 0 upgraded, 4 newly installed, 0 to remove and 6 not upgraded. Need to get 16.9MB of archives. After unpacking 36.3MB of additional disk space will be used. Do you want to continue? [Y/n]
Ketik "Y" dan tunggu hingga instalasi selesai. Setelah itu segeralah set password root untuk mysql karena awalnya account root tidak berpassword.
root:~# mysqladmin -u root password 'passwordRoot'
Pada tahap ini kita membuat database untuk menyimpan data-data yang dibutuhkan oleh postfix. Selain database, kita juga akan membuat user untuk mengakses database ini.
root# mysql -u root -p Enter password: ************ Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 to server version: 4.1.11-Debian_4-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database postfix; Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on postfix.* to postfix@'%' identified by 'postfix'; Query OK, 0 rows affected (0.02 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye
Perintah pertama adalah perintah yang digunakan untuk membuat database 'postfix'. Kemudian kita memberikan semua hak pengaturan database ini pada user 'postfix' dengan password 'postfix'. Perintah yang terakhir adalah mereload tabel privileges agar user postfix dapat menggunakan database yang baru dibuat.
Tabel ini menyimpan data email alias atau forwarding.
USE postfix; CREATE TABLE `alias` ( `address` varchar(255) NOT NULL default '', `goto` text NOT NULL, `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (address) ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';
FIeld penting yang ada pada tabel ini adalah address dan goto.
address: merupakan alamat email yang dipasang sebagai email virtual.
goto: merupakan alamat asli yang digunakan untuk menerima email yang ditujukan pada alamat yang tertera pada field address.
Tabel ini memuat data virtual domain yang ditangani oleh postfix.
USE postfix; CREATE TABLE `domain` ( `domain` varchar(255) NOT NULL default '', `description` varchar(255) NOT NULL default '', `aliases` int(10) NOT NULL default '0', `mailboxes` int(10) NOT NULL default '0', `maxquota` int(10) NOT NULL default '0', `transport` varchar(255) default NULL, `backupmx` tinyint(1) NOT NULL default '0', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (domain) ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';
Tabel mailbox merupakan tabel yang memuat data user masing-masing domain. Field username berisi nama login yang digunakan oleh user + domain emailnya. Contoh: "kamas@sokam.or.id". Field maildir merupakan direktori tempat penyimpanan email user yang bersangkutan. Contoh: "sokam.or.id/k/kamas/". Field quota merupakan batasan besar total space yang digunakan untuk penyimpanan email user yang bersangkutan. Satuan yang digunakan dalam menyebutkan quota adalah bytes.
USE postfix; CREATE TABLE `mailbox` ( `username` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `name` varchar(255) NOT NULL default '', `maildir` varchar(255) NOT NULL default '', `quota` int(10) NOT NULL default '0', `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`) ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';
Sekarang kita akan mengisikan beberapa record sebagai username percobaan.
INSERT INTO domain( domain, description) VALUES ( "sokam.or.id", "Domain pertama" ); INSERT INTO alias( address, goto ) VALUES ( "postmaster@sokam.or.id", "kamas@sokam.or.id" ); INSERT INTO mailbox( username, password, name, maildir ) VALUES( "kamas@sokam.or.id", "$1$RRsQjzUX$q3Kw.ZwBF9wuxKItj0AdG0", "Kamas Muhammad", "sokam.or.id/k/kamas/" );
Query pertama adalah memasukkan domain sokam.or.id sebagai salah satu domain yang ditangani oleh postfix.
Pada query kedua kita membuat alamat alias 'postmaster@sokam.or.id' yang mana semua email yang dikirim ke alamat ini akan diforward ke alamat 'kamas@sokam.or.id'.
Query terakhir adalah membuat mailbox asli. Dapat dilihat bahwa password yang digunakan adalah jenis MD5-Crypt()
. String tersebut adalah hasil enkripsi "sokam". Jangan lupa pula untuk mengakhiri isi field maildir dengan "/".
Anda dapat menggunakan script perl kecil di bawah ini untuk mengkonversi plain text menjadi MD5-Crypt encrypted text.
#!/usr/bin/perl use Crypt::PasswdMD5; $password = shift; print $password . ": " . unix_md5_crypt( $password ); print "\n";
Script di atas dapat dijalankan melalui command line. Password yang akan diencrypt adalah parameter pertama yang digunakan saat mengeksekusi script ini. Contoh eksekusi:
root# ./buatpass.pl rahasia rahasia: $1$Gb3lfDgO$jUAADugJmrAUrFom9PUXG/
Di sini, kita menggunakan source code postfix yang telah dipatch oleh debian sehingga memudahkan kita untuk membangun paket .deb dan kemudian mendistribusikan hasil pembuatan paket ini ke server lain dalam sistem terdistribusi ini.
Selain mendownload source code postfix, kita juga perlu mendownload patch VDA untuk postfix.
root# wget http://ftp.debian.org/debian/pool/main/p/postfix/postfix_2.2.4.orig.tar.gz --15:50:29-- http://ftp.debian.org/debian/pool/main/p/postfix/postfix_2.2.4.orig.tar.gz => `postfix_2.2.4.orig.tar.gz' Resolving ftp.debian.org... 128.101.80.133 Connecting to ftp.debian.org|128.101.80.133|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2,427,281 (2.3M) [application/x-tar] 100%[=======================================================>] 2,427,281 26.72K/s ETA 00:00 15:51:49 (31.06 KB/s) - `postfix_2.2.4.orig.tar.gz' saved [2427281/2427281] root# wget http://ftp.debian.org/debian/pool/main/p/postfix/postfix_2.2.4-1.diff.gz --15:55:36-- http://ftp.debian.org/debian/pool/main/p/postfix/postfix_2.2.4-1.diff.gz => `postfix_2.2.4-1.diff.gz' Resolving ftp.debian.org... 128.101.80.133 Connecting to ftp.debian.org|128.101.80.133|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 127,128 (124K) [text/plain] 100%[=======================================================>] 127,128 22.19K/s ETA 00:00 15:55:43 (22.16 KB/s) - `postfix_2.2.4-1.diff.gz' saved [127128/127128] root# wget http://ftp.debian.org/debian/pool/main/p/postfix/postfix_2.2.4-1.dsc --15:55:52-- http://ftp.debian.org/debian/pool/main/p/postfix/postfix_2.2.4-1.dsc => `postfix_2.2.4-1.dsc' Resolving ftp.debian.org... 128.101.80.133 Connecting to ftp.debian.org|128.101.80.133|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 834 [text/plain] 100%[=======================================================>] 834 --.--K/s 15:55:53 (23.39 MB/s) - `postfix_2.2.4-1.dsc' saved [834/834] root# wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.2.4-vda.patch.gz --16:14:01-- http://web.onda.com.br/nadal/postfix/VDA/postfix-2.2.4-vda.patch.gz => `postfix-2.2.4-vda.patch.gz' Resolving web.onda.com.br... 200.195.192.31 Connecting to web.onda.com.br|200.195.192.31|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 7,712 (7.5K) [text/plain] 100%[=======================================================>] 7,712 4.70K/s 16:14:05 (4.70 KB/s) - `postfix-2.2.4-vda.patch.gz' saved [7712/7712]
Setelah proses download selesai, kini yang harus kita lakukan adalah mengextract nya.
root# dpkg-source -x postfix_2.2.4-1.dsc dpkg-source: extracting postfix in postfix-2.2.4 dpkg-source: unpacking postfix_2.2.4.orig.tar.gz dpkg-source: applying ./postfix_2.2.4-1.diff.gz
Kemudian kita masukkan patch VDA ke source code postfix, dan membuat paket .deb
nya
root# cd postfix-2.2.4/ root# zcat ../postfix-2.2.4-vda.patch.gz | patch -p1 patching file README_FILES/VDA_README patching file src/global/mail_params.h patching file src/util/file_limit.c patching file src/virtual/mailbox.c patching file src/virtual/maildir.c patching file src/virtual/virtual.c patching file src/virtual/virtual.h root# dpkg-buildpackage dpkg-buildpackage: source package is postfix dpkg-buildpackage: source version is 2.2.4-1 dpkg-buildpackage: source changed by LaMont Jones <lamont@debian.org> dpkg-buildpackage: host architecture i386 . . .
Bila pada tahap ini terdapat pesan error "dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting." maka anda harus terlebih dahulu menginstall paket-paket dev yang disebutkan. Misal:
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 4.1.16) libdb4.2-dev libgdbm-dev libldap2-dev (>= 2.1) libpcre3-dev libmysqlclient10-dev libssl-dev (>= 0.9.7-1) libsasl2-dev libpq-dev po-debconf (>= 0.5.0) dpatch dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
Maka installah paket-paket yang disebutkan dalam baris "Unmet build dependencies", dan jalankan dpkg-buildpackage
sekali lagi.
Setelah proses kompilasi dan pembuatan paket berhasil, maka anda akan mendapatkan beberapa file .deb
di atas direktori anda saat ini.
root# cd .. root# ls -1 postfix-2.2.4/ postfix_2.2.4-1.diff.gz postfix_2.2.4-1.dsc postfix_2.2.4-1_i386.changes postfix_2.2.4-1_i386.deb postfix_2.2.4.orig.tar.gz postfix-2.2.4-vda.patch.gz postfix-dev_2.2.4-1_all.deb postfix-doc_2.2.4-1_all.deb postfix-ldap_2.2.4-1_i386.deb postfix-mysql_2.2.4-1_i386.deb postfix-pcre_2.2.4-1_i386.deb postfix-pgsql_2.2.4-1_i386.deb
Pada awal instalasi, debian menyertakan exim sebagai MTA yang digunakan. Anda harus menghapus paket-paket exim ini terlebih dahulu sebelum menginstall postfix.
root# dpkg -P --force-all exim4 exim4-base exim4-config exim4-daemon-light
Dari beberapa paket yang ada, kita hanya membutuhkan dua buah yaitu postfix dan postfix-mysql. Installah kedua paket itu dengan menggunakan
.dpkg
root # dpkg -i postfix_2.2.4-1_i386.deb postfix-mysql_2.2.4-1_i386.debSelecting previously deselected package postfix. (Reading database ... 54917 files and directories currently installed.) Unpacking postfix (from postfix_2.2.4-1_i386.deb) ... Selecting previously deselected package postfix-mysql. Unpacking postfix-mysql (from postfix-mysql_2.2.4-1_i386.deb) ... Setting up postfix (2.2.4-1) ... Adding group `postfix' (104)... Done. Adding system user `postfix'... Adding new user `postfix' (103) with group `postfix'. Not creating home directory. setting synchronous mail queue updates: false Creating /etc/postfix/dynamicmaps.cf Adding tcp map entry to /etc/postfix/dynamicmaps.cf Adding group `postdrop' (105)... Done. setting myhostname: mailku.sokam.or.id setting alias maps setting alias database setting myorigin setting destinations: mailku.sokam.or.id, mailku, localhost setting relayhost: setting mynetworks: 127.0.0.0/8 setting mailbox_command setting mailbox_size_limit: 0 setting recipient_delimiter: + setting inet_interfaces: all Postfix is now set up with a default configuration. If you need to make changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration values, see postconf(1). After modifying main.cf, be sure to run '/etc/init.d/postfix reload'. Running newaliases Starting mail transport agent: Postfix. Setting up postfix-mysql (2.2.4-1) ... Adding mysql map entry to /etc/postfix/dynamicmaps.cf
Pada proses instalasi anda akan diberi beberapa pertanyaan yang berkenaan dengan konfigurasi postfix. Untuk saat ini jawab defaultnya saja, karena nanti akan kita ubah secara manual.
File konfigurasi postfix dibagi menjadi beberapa file. Dua file utama adalah master.cf dan main.cf.
master.cf merupakan file konfigurasi yang mengatur komponen apa sajakah yang dijalankan oleh daemon postfix. Komponen ini dapat berupa mekanisme pengiriman seperti maildrop
dan lmtp
, atau mungkin layanan content-filtering seperti amavis
.
main.cf merupakan file konfigurasi yang mengatur jalannya komponen-komponen daemon postfix. File ini merupakan konfigurasi utama yang mengatur seluruh aktifitas postfix. Parameter konfigurasi lengkap dapat dilihat melaui postconf(5).
Sebelum mengatur isi file main.cf, kita harus membuat sebuah user dan group terlebih dahulu sebagai pemilik mailbox user-user virtual. User ini nantinya harus ada di semua node dalam sistem ini dengan UID dan GID yang SAMA PERSIS.
root# addgroup --gid 666 vmailbox Adding group `vmailbox' (666)... Done. root# adduser --system --home /var/mailbox --shell /bin/false --uid 666 --gid 666 vmailbox Adding system user `vmailbox'... Adding new user `vmailbox' (666) with group `vmailbox'. Creating home directory `/var/mailbox'. root# id vmailbox uid=666(vmailbox) gid=666(vmailbox) groups=666(vmailbox)
Pada contoh pembuatan user dan group di atas, UID dan GID yang digunakan adalah 666.
Bagian di bawah ini merupakan isi beberapa file konfigurasi yang digunakan oleh postfix.
Ubahlah file /etc/postfix/main.cf
seperti listing di bawah ini. Ingatlah bahwa segala macam domain yang kita tangani bersifat virtual, sehingga tidak boleh dimasukkan dalam daftar $mydestination. Domain yang diisikan pada variabel ini adalah domain yang bersifat lokal, yang emailnya dikirimkan pada user lokal (terdapat pada /etc/passwd
).
smtpd_banner = $myhostname ESMTP $mail_name biff = no append_dot_mydomain = no myhostname = mailku.sokam.or.id alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # daftar domain lokal mydestination = mailku, mailku.sokam.or.id, localhost # daftar jaringan yang direlay mynetworks = 127.0.0.0/8 recipient_delimiter = + # setting virtual domain yang disimpan dalam database MySQL virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_gid_maps = static:666 # direktori awal mailbox user, sesuai dengan home direktori # user vmailbox. Maildir tiap user akan terletak dalam direktori # /var/mailbox/[info direktori maildir user dari database] virtual_mailbox_base = /var/mailbox virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_limit = 51200000 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 666 virtual_transport = virtual virtual_uid_maps = static:666 # Tambahan untuk quota virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, this user has reach mailbox quota limit. virtual_overquota_bounce = yes
File ini digunakan untuk mengambil data email alias/forwarding.
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1
File ini digunakan untuk mengambil data domain yang ditangani oleh postfix.
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' #optional query to use when relaying for backup MX #query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1'
File ini digunakan oleh postfix untuk menentukan direktori tempat penyimpanan email tiap user. Saat postfix menerima email untuk user, maka postfix akan melakukan query ke database dan mengambil informasi lokasi maildir user yang bersangkutan.
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
File ini digunakan untuk mengambil informasi mengenai quota mailbox tiap user.
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s'
Semua file di atas disimpan dalam direktori /etc/postfix
. File-file dengan nama mysql_*
merupakan file konfigurasi postfix yang menyebutkan username, host, dan password untuk koneksi ke database, serta query yang dijalankan untuk mengambil informasinya. Oleh karena itu jangan lupa untuk menset agar file-file tersebut hanya dapat dibaca oleh postfix dan root.
root# chmod 640 mysql* root# chgrp postfix mysql_*
Postfix di Debian dijalankan dalam chroot, sehingga akan jauh lebih mudah bila kita mengisikan alamat IP pada parameter hosts
daripada mengisikan hostname. Bila menggunakan hostname, maka pastikan bahwa ada resolver dalam chroot postfix agar dapat meresolv alamat IP via
.gethostbyname()
Setelah semua file konfigurasi selesai dibuat jalankan postfix dan kemudian cobalah untuk membuat sebuah koneksi ke postfix dengan menggunakan telnet
.
root# /etc/init.d/postfix restart Stopping mail transport agent: Postfix. Starting mail transport agent: Postfix. root# telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. 220 mailku.sokam.or.id ESMTP Postfix EHLO mail.com 250-mailku.sokam.or.id 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250 8BITMIME QUIT 221 Bye Connection closed by foreign host.
Baris yang dicetak tebal adalah inputan user.
Bila tampilan yang anda dapatkan mirip dengan tampilan di atas, berarti postfix anda sudah bekerja. Kemudian cobalah mengirimkan email ke user yang telah kita buat.
root# echo "coba email" | mail -s cobaKirim kamas@sokam.or.id
root# tail /var/log/mail.log
Oct 16 07:05:29 kunti postfix/qmgr[17363]: CAEFA1060A: from=<root@mailku.sokam.or.id>, size=308,nrcpt=1
(queue active)
Oct 16 07:05:29 kunti postfix/virtual[17367]: CAEFA1060A: to=<kamas@sokam.or.id>, relay=virtual,delay=52,
status=sent (delivered to maildir)
Oct 16 07:05:29 kunti postfix/qmgr[17363]: CAEFA1060A: removed
Bila anda mendapatkan tampilan yang kira-kira mirip dengan yang di atas, berarti postfix anda telah berjalan dengan lancar. (Perhatikan tulisan yang dicetak tebal).
Courier merupakan suatu software set mail server lengkap mulai MTA sampai client interfacenya. Di sini kita hanya menggunakan beberapa komponen yaitu:
courier-authdaemon: Daemon authentikasi utama.
courier-authlib-mysql: Interface authentikasi courier untuk melakukan authentikasi ke mysql.
courier-imap: Layanan IMAP untuk akses mailbox user
courier-pop: Layanan POP3 untuk akses mailbox user
Instalasi paket-paket courier cukup mudah, hanya dengan menggunakan apt-get
.
root# apt-get install courier-authdaemon courier-authlib-mysql courier-imap courier-pop Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: courier-base libmysqlclient12 Suggested packages: courier-doc imap-client courier-imap-ssl courier-pop-ssl The following NEW packages will be installed: courier-authdaemon courier-authmysql courier-base courier-imap courier-pop libmysqlclient12 0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded. Need to get 1993kB of archives. After unpacking 5452kB of additional disk space will be used. Do you want to continue? [Y/n]
Ketik "Y" dan tunggu hingga instalasi selesai.
File konfigurasi courier terkumpul dalam direktori /etc/courier
. File konfigurasi yang kita ubah hanya dua file, yaitu authmysqlrc
dan authdaemonrc
.
MYSQL_CRYPT_PWFIELD password MYSQL_DATABASE postfix MYSQL_GID_FIELD '666' MYSQL_HOME_FIELD '/var/mailbox' MYSQL_LOGIN_FIELD username MYSQL_MAILDIR_FIELD maildir MYSQL_NAME_FIELD name MYSQL_OPT 0 MYSQL_PASSWORD postfix MYSQL_QUOTA_FIELD quota MYSQL_SERVER 127.0.0.1 MYSQL_SOCKET /var/run/mysqld/mysqld.sock MYSQL_UID_FIELD '666' MYSQL_USERNAME postfix MYSQL_USER_TABLE mailbox
Berhati-hatilah dalam mengubah file ini, karena di belakang nilai suatu variabel tidak boleh ada spasi/tab, dan segala macam whitespace.
Ada beberapa modul authentikasi yang dapat dijalankan oleh courier-authdaemon. Anda hanya perlu mengubah sebuah parameter yaitu:
authmodulelist="authpam"
menjadi:
authmodulelist="authmysql"
Setelah anda mengubah kedua file di atas, restartlah courier-authdaemon.
root# /etc/init.d/courier-authdaemon restart Stopping Courier authdaemon: done. Starting Courier authdaemon: done.
Pada saat pengisian database di atas kita telah mengisikan user "kamas@sokam.or.id" dengan password "sokam". Username dan password inilah yang akan kita gunakan untuk mencoba instalasi courier.
# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES
SORT QUOTA IDLE ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2004 Double Precision,
Inc. SeeCOPYING for distribution information.
a login kamas@sokam.or.id sokam
a OK LOGIN Ok.
a logout
* BYE Courier-IMAP server shutting down
a OK LOGOUT completed
Connection closed by foreign host.
Baris yang dicetak tebal adalah inputan user.
Bila anda mendapatkan hasil seperti di atas berarti instalasi layanan IMAP sudah dapat digunakan.
# telnet localhost 110 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. +OK Hello there. user kamas@sokam.or.id +OK Password required. pass sokam +OK logged in. quit +OK Bye-bye. Connection closed by foreign host.
Baris yang dicetak tebal adalah inputan user.
Bila anda mendapatkan hasil seperti di atas berarti instalasi layanan POP3 sudah dapat digunakan.
Cyrus SASL (Simple Authentication and Security Layer) adalah suatu librari yang memungkinkan program lain melakukan authentikasi melalui librari ini ke berbagai mekanisme. Metode yang sering digunakan adalah authentikasi menggunakan sasldb
, mysql
, atau PAM
.
Pada sistem ini libsasl digunakan oleh postfix untuk mengaktifkan fasilitas SMTP-AUTH sehingga pengiriman ke domain selain yang ditangani oleh postfix tidak dapat dilakukan kecuali setelah user melakukan authentikasi terlebih dahulu.
Sayangnya, libsasl di debian tidak mendukung komunikasi langsung dengan socket courier-authdaemon yang juga kita gunakan. Oleh karena itu (seperti pada bagian postfix) kita harus melakukan kompilasi ulang dan membuat sendiri paket .deb
nya.
root# wget http://ftp.debian.org/debian/pool/main/c/cyrus-sasl2/cyrus-sasl2_2.1.19.orig.tar.gz --05:30:27-- http://ftp.debian.org/debian/pool/main/c/cyrus-sasl2/cyrus-sasl2_2.1.19.orig.tar.gz => `cyrus-sasl2_2.1.19.orig.tar.gz' Connecting to 202.154.63.47:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 1,531,667 (1.5M) [application/x-tar] 100%[=====================================================>] 1,531,667 37.07K/s ETA 00:00 05:31:05 (42.13 KB/s) - `cyrus-sasl2_2.1.19.orig.tar.gz' saved [1531667/1531667] root# wget http://ftp.debian.org/debian/pool/main/c/cyrus-sasl2/cyrus-sasl2_2.1.19-1.6.diff.gz --05:31:09-- http://ftp.debian.org/debian/pool/main/c/cyrus-sasl2/cyrus-sasl2_2.1.19-1.6.diff.gz => `cyrus-sasl2_2.1.19-1.6.diff.gz' Connecting to 202.154.63.47:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 31,281 (31K) [text/plain] 100%[=====================================================>] 31,281 11.49K/s 05:31:12 (11.48 KB/s) - `cyrus-sasl2_2.1.19-1.6.diff.gz' saved [31281/31281] root# wget http://ftp.debian.org/debian/pool/main/c/cyrus-sasl2/cyrus-sasl2_2.1.19-1.6.dsc --05:31:20-- http://ftp.debian.org/debian/pool/main/c/cyrus-sasl2/cyrus-sasl2_2.1.19-1.6.dsc => `cyrus-sasl2_2.1.19-1.6.dsc' Connecting to 202.154.63.47:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 1,100 (1.1K) [text/plain] 100%[=====================================================>] 1,100 --.--K/s 05:31:22 (58.28 MB/s) - `cyrus-sasl2_2.1.19-1.6.dsc' saved [1100/1100]
Setelah proses download selesai extract tarballnya dengan menggunakan dpkg-source
.
root# dpkg-source -x cyrus-sasl2_2.1.19-1.6.dsc dpkg-source: extracting cyrus-sasl2 in cyrus-sasl2-2.1.19 dpkg-source: unpacking cyrus-sasl2_2.1.19.orig.tar.gz dpkg-source: applying ./cyrus-sasl2_2.1.19-1.6.diff.gz
Masuklah ke direktori cyrus-sasl2-2.1.19 dan jalankan perintah sed di bawah ini untuk mengaktifkan fasilitas komunikasi dengan socket courier-authdaemon.
root# cd cyrus-sasl2-2.1.19 root# sed -i 's@--enable-login@--enable-login --with-authdaemond=/var/run/courier/authdaemon/socket@' \ debian/rules
Buat paket .deb
dengan menggunakan dpkg-buildpackage
seperti pada bagian sebelumnya (postfix). Bila ada error tentang build-dependencies, installah paket-paket yang diminta, kemudian ulangi proses dpkg-buildpackage.
root# dpkg-buildpackage dpkg-buildpackage: source package is cyrus-sasl2 dpkg-buildpackage: source version is 2.1.19-1.6 dpkg-buildpackage: source changed by Steve Langasek <vorlon@debian.org> dpkg-buildpackage: host architecture i386 ... ...
Setelah pembuatan paket selesai, anda akan mempunyai beberapa file .deb
di atas direktori tempat anda berada saat ini.
root# cd .. && ls -1 cyrus-sasl2-2.1.19/ cyrus-sasl2_2.1.19-1.6.diff.gz cyrus-sasl2_2.1.19-1.6.dsc cyrus-sasl2_2.1.19-1.6_i386.changes cyrus-sasl2_2.1.19.orig.tar.gz libsasl2_2.1.19-1.6_i386.deb libsasl2-dev_2.1.19-1.6_i386.deb libsasl2-modules_2.1.19-1.6_i386.deb libsasl2-modules-gssapi-heimdal_2.1.19-1.6_i386.deb libsasl2-modules-kerberos-heimdal_2.1.19-1.6_i386.deb libsasl2-modules-sql_2.1.19-1.6_i386.deb sasl2-bin_2.1.19-1.6_i386.deb
Dari beberapa file yang terdapat pada direktori ini, kita hanya memerlukan beberapa file yaitu:
sasl2-bin_2.1.19-1.6_i386.deb
libsasl2_2.1.19-1.6_i386.deb
libsasl2-modules_2.1.19-1.6_i386.deb
libsasl2-modules-sql_2.1.19-1.6_i386.deb
Install keempat modul di atas dengan menggunakan dpkg
.
root# dpkg -i sasl2-bin_2.1.19-1.6_i386.deb \ libsasl2-modules-sql_2.1.19-1.6_i386.deb \ libsasl2-modules_2.1.19-1.6_i386.deb \ libsasl2_2.1.19-1.6_i386.deb Selecting previously deselected package sasl2-bin. (Reading database ... 56436 files and directories currently installed.) Unpacking sasl2-bin (from sasl2-bin_2.1.19-1.6_i386.deb) ... Selecting previously deselected package libsasl2-modules-sql. Unpacking libsasl2-modules-sql (from libsasl2-modules-sql_2.1.19-1.6_i386.deb) ... Selecting previously deselected package libsasl2-modules. Unpacking libsasl2-modules (from libsasl2-modules_2.1.19-1.6_i386.deb) ... Preparing to replace libsasl2 2.1.19-1.5 (using libsasl2_2.1.19-1.6_i386.deb) ... Unpacking replacement libsasl2 ... Setting up libsasl2 (2.1.19-1.6) ... Setting up sasl2-bin (2.1.19-1.6) ... Setting up libsasl2-modules-sql (2.1.19-1.6) ... Setting up libsasl2-modules (2.1.19-1.6) ...
Beberapa file yang harus dikonfigurasi ada di bawah ini. Inti tahap ini adalah mengaktifkan fasilitas SMTP-AUTH postfix sehingga menghindarkan postfix untuk berjalan secara open-relay namun tetap dapat digunakan dengan nyaman oleh para pengguna email.
Tambahkan beberapa baris di bawah ini untuk mengaktifkan SMTP-AUTH.
broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous
Seperti telah disinggung sebelumnya, postfix berjalan dalam lingkungan chroot sehingga tidak akan dapat mengakses file atau socket atau apa pun di luar direktori chroot tersebut. Direktori chroot postfix adalah pada /var/spool/postfix
. Agar dapat menjalankan authentikasi, maka socket courier-authdaemon harus berada dalam chroot postfix.
Untuk itu kita hentikan dulu courier-authdaemon, kemudian membuat direktori tempat socket courier-authdaemon yang berada dalam direktori chroot postfix, dan membuat symbolic link yang menghubungkan direktori socket courier-authdaemon yang berada di luar direktori chroot postfix.
root# /etc/init.d/courier-authdaemon stop Stopping Courier authdaemon: done. root# rm /var/run/courier/authdaemon -rf root# mkdir -p /var/spool/postfix/var/run/courier/authdaemon root# chmod 777 /var/spool/postfix/var/run/courier/authdaemon root# ln -s /var/spool/postfix/var/run/courier/authdaemon /var/run/courier/authdaemon root# /etc/init.d/courier-authdaemon start Starting Courier authdaemon: done.
Proses pembuatan symlink di atas harus diulangi setiap courier-authdaemon distart, karena pada saat courier-authdaemon mati socket authentikasi yang digunakan langsung dihapus, dan akan dibuat lagi saat courier-authdaemon start. Untuk itu tambahkan beberapa baris kode di bawah ini pada script /etc/init.d/courier-authdaemon
.
if [ ! -h /var/run/courier/authdaemon ] then /bin/ln -s /var/spool/postfix/var/run/courier/authdaemon /var/run/courier/authdaemon fi
Tambahkan kode di atas pada sekitar baris ke-8 atau 9, setelah deklarasi variabel $libexecdir
.
Sebelum mencoba authentikasi SMTP postfix harus direstart terlebih dahulu untuk mengaktifkan konfigurasi yang baru.
root# /etc/init.d/postfix restart Stopping mail transport agent: Postfix. Starting mail transport agent: Postfix.
Username dan password yang digunakan untuk login smtp dienkripsi menggunakan metode base64. Anda dapat menggunakan script perl di bawah ini untuk mengubah plain text menjadi format enkripsi base64.
#!/usr/bin/perl use MIME::Base64; $username = shift; $password = shift; print ('Username : '); print encode_base64( $username ); print ('Password : '); print encode_base64( $password );
Anggap saja file ini disimpan dengan nama convert.pl. Sekarang kita mencoba untuk mengkonversi username dan password kita dari plain text menjadi format base64.
root# ./convert.pl kama@sokam.or.id sokam Username : a2FtYXNAc29rYW0ub3IuaWQ= Password : c29rYW0=
Cobalah untuk melakukan authentikasi SMTP menggunakan telnet dengan menggunakan username dan password terenkripsi seperti pada hasil eksekusi script di atas.
root# telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. 220 mailku.sokam.or.id ESMTP Postfix EHLO mail.com 250-mailku.sokam.or.id 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME AUTH LOGIN 334 VXNlcm5hbWU6 a2FtYXNAc29rYW0ub3IuaWQ= 334 UGFzc3dvcmQ6 c29rYW0= 235 Authentication successful QUIT 221 Bye Connection closed by foreign host.
Baris yang dicetak tebal adalah inputan user.
Bila anda mendapatkan tampilan seperti di atas, berarti authentikasi SMTP via SASL sudah berjalan dengan baik.
Pada bagian ini selain membahas antivirus kita juga akan menginstall spamassassin, yaitu sebuah program anti spam.
ClamAV adalah virus scanner opensource yang database virusnya secara rutin dikembangkan oleh komunitasnya di seluruh dunia. ClamAV lebih ditujukan untuk digunakan sebagai antivirus mailserver meski tidak menutup kemungkinan untuk digunakan di luar mailserver.
ClamAV mempunyai dua macam interface yaitu command line, dan daemon. Di sini kita akan menggunakan versi daemon sebagai antivirus utama dan versi command line sebagai backup. Versi Daemon dipilih karena dapat bekomunikasi dengan amavis melalui socket sehingga mempertinggi efisiensi sistem. Bila ada gangguan pada jalannya daemon tersebut, maka clamscanlah yang akan menggantikan posisinya sampai daemon clamav dapat berjalan kembali.
ClamAV juga mempunyai daemon lain yang disebut clamav-freshclam. Daemon ini bertugas untuk memperbarui database virus. Daemon ini akan memeriksa dbserver setiap 6 jam sekali, dan bila ada data baru maka data itu akan didownload.
Paket program yang dibutuhkan untuk instalasi clamav ada tiga yaitu clamav, clamav-daemon, dan clamav-freshclam.
Sebelum menginstall dengan menggunakan apt-get, hapus dulu paket libsasl2-dev. Paket ini tadinya kita gunakan dalam membuat paket postfix.
root# apt-get --purge remove libsasl2-dev Reading Package Lists... Done Building Dependency Tree... Done Correcting dependencies... Done The following packages will be REMOVED: libsasl2-dev 0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded. Need to get 0B of archives. After unpacking 606kB disk space will be freed. Do you want to continue? [Y/n] (Reading database ... 56503 files and directories currently installed.) Removing libsasl2-dev ...
Setelah itu barulah kita dapat menginstall paket-paket clamav.
root# apt-get install clamav clamav-daemon clamav-freshclam Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: clamav-base libclamav1 libgmp3c2 Suggested packages: unrar lha clamav-docs daemon Recommended packages: arj unzoo The following NEW packages will be installed: clamav clamav-base clamav-daemon clamav-freshclam libclamav1 libgmp3c2 0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded. Need to get 3524kB of archives. After unpacking 4743kB of additional disk space will be used. Do you want to continue? [Y/n]
Saat ada pertanyaan tentang metode update database virus pilihlah daemon. Kemudian pilih db.id.clamav.net sebagai mirror virus databasenya.
Setelah itu ada pertanyaan "apakah clamav-daemon harus direload setelah update?". Pilihlah "Yes" sehingga setelah update database virus selesai clamav-daemon dapat segera menggunakan datafile itu untuk scanning virus.
Sebenarnya kita tidak perlu mengkonfigurasi apa pun di sini. Kita hanya perlu mengubah user apa yang menjalankan clamav-daemon, karena nantinya kita akan mengintegrasikan clamav-daemon dengan Amavisd-new. File konfigurasi yang kita ubah adalah /etc/clamav/clamd.conf
.
Ubahlah:
User clamav
Menjadi:
User amavis
File konfigurasi lengkapnya adalah sebagai berikut:
LocalSocket /var/run/clamav/clamd FixStaleSocket User clamav ScanMail ScanArchive ArchiveMaxRecursion 5 ArchiveMaxFiles 1000 ArchiveMaxFileSize 10M ArchiveMaxCompressionRatio 250 ReadTimeout 180 MaxThreads 12 MaxConnectionQueueLength 15 LogFile /var/log/clamav/clamav.log LogTime LogFileMaxSize 0 PidFile /var/run/clamav/clamd.pid DatabaseDirectory /var/lib/clamav SelfCheck 3600
Langkah terakhir adalah mengubah kepemilikan direktori /var/run/clamav agar dimiliki oleh user amavis. Langkah ini akan kita lakukan setelah selesai mengkonfigurasi amavisd-new.
Spamassassin adalah sebuah daemon yang memeriksa isi tiap email yang masuk. Spamassassin mempunyai database sendiri mengenai pola-pola spam yang digunakan untuk memeriksa isi email. Tiap ada pola yang cocok dengan pola spam umum, maka skor untuk email yang diperiksa akan bertambah sesuai dengan bobot pola yang ditemukan. Bila hasil skor akhirnya melebihi batas yang kita kehendaki, maka email yang diperiksa akan dikarantina.
Selain database itu, spamassassin juga dapat melakukan spam-learning menggunakan algoritma bayesian statistic. Seperti bisa dibaca pada judul fasilitasnya, spamassassin dapat mempelajari pola-pola baru melalui email yang kita kirimkan. Perlu diingat bahwa untuk dapat bekerja dengan baik kita perlu memberikan email spam dan ham (non-spam) untuk dipelajari. Kita tidak bisa mengharapkan pembelajaran yang baik bila kita hanya memberikan email spam saja.
Instalasi spamassassin cukup mudah, hanya dengan menggunakan apt-get
.
root# apt-get install spamassassin Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libdigest-sha1-perl libhtml-parser-perl libhtml-tagset-perl spamc Suggested packages: libnet-smtp-perl libmail-spf-query-perl razor libnet-ident-perl libio-socket-ssl-perl dcc-client pyzor Recommended packages: libnet-dns-perl The following NEW packages will be installed: libdigest-sha1-perl libhtml-parser-perl libhtml-tagset-perl spamassassin spamc 0 upgraded, 5 newly installed, 0 to remove and 2 not upgraded. Need to get 971kB of archives. After unpacking 3043kB of additional disk space will be used. Do you want to continue? [Y/n]
Pilih "Y" dan tunggu hingga instalasi selesai.
Daemon spamassassin tidak dapat langsung berjalan. Kita harus mengubah file /etc/default/spamassassin
agar daemon ini dapat digunakan.
Ubahlah:
ENABLED=0
Menjadi:
ENABLED=1
Setelah itu cobalah menjalankan daemon spamassassin.
root# /etc/init.d/spamassassin start Starting SpamAssassin Mail Filter Daemon: spamd.
Kita semua pasti mengetahui bahwa bila ada email yang masuk ke kita, maka pasti email itu dikirimkan melalui salah satu server SMTP di muka bumi ini. Yang kemudian menjadi permasalahan adalah: "Apakah server yang mengirimkan email itu memang berhak mengirimkan email atas nama domain yang dipakai?".
Contoh kasus: Saya menggunakan domain sokam.or.id, dan alamat server SMTP saya katakanlah 10.11.12.13. Seharusnya, yang mengirimkan email dengan menggunakan dokam sokam.or.id hanyalah alamat IP tersebut. Kemudian bagaimana kalau ada yang mengirim menggunakan domain sokam.or.id namun berasal dari IP 192.168.5.3? Apakah IP itu juga berhak?
Di sinilah peran SPF hadir untuk membantu kita menentukannya.
Informasi SPF disimpan dalam DNS dengan menggunakan record TXT untuk domain yang bersangkutan. Contoh kasus: Saya ingin menambahkan record SPF untuk domain sokam.or.id. SMTP server yang berhak mengirim email dengan alamat sokam.or.id adalah server MX itu sendiri (10.11.12.13), serta sebuah server lagi dengan alamat IP 5.6.7.8. Bentuk record DNS ini kira-kira seperti ini:
sokam.or.id. IN TXT "v=spf1 mx ip4:5.6.7.8 -all"
Dengan setup seperti di atas, bila server SMTP yang beralamat 2.3.4.5 mengirimkan email dengan domain sokam.or.id, maka email tersebut dianggap sebagai SPAM. Bagaimana dengan domain yang tidak mempublish record SPF? segala SMTP server yang mengirim email menggunakan domain tersebut dianggap valid.
Silakan membaca selengkapnya mengenai SPF ini di http://spf.pobox.com.
Librari yang digunakan untuk query SPF record ini adalah librari perl yang juga sudah disediakan oleh debian.
root# apt-get install libmail-spf-query-perl Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libnet-cidr-lite-perl libnet-dns-perl liburi-perl Suggested packages: libsys-hostname-long-perl libwww-perl The following NEW packages will be installed: libmail-spf-query-perl libnet-cidr-lite-perl libnet-dns-perl liburi-perl 0 upgraded, 4 newly installed, 0 to remove and 32 not upgraded. Need to get 355kB of archives. After unpacking 1360kB of additional disk space will be used. Do you want to continue? [Y/n]
Tunggulah hingga proses instalasi selesai.
Script yang digunakan oleh postfix harus kita download sendiri.
root# wget http://spf.pobox.com/postfix-policyd.txt -O /usr/local/sbin/postfix-policyd.pl --15:35:54-- http://spf.pobox.com/postfix-policyd.txt => `/usr/local/sbin/postfix-policyd.pl' Resolving spf.pobox.com... 67.52.51.36 Connecting to spf.pobox.com|67.52.51.36|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 7,673 (7.5K) [text/plain] 100%[====================================================>] 7,673 10.10K/s 15:35:58 (10.08 KB/s) - `/usr/local/sbin/postfix-policyd.pl' saved [7673/7673] root# chmod 755 /usr/local/sbin/postfix-policyd.pl
Sebelum melakukan konfigurasi, ada bagian yang harus kita hilangkan dari file postfix-policyd.pl
yang baru saja kita download. Buka tersebut itu dengan sembarang editor teks.
1. <%attr> 2. autohandler_skip => 1 3. </%attr> 4. 5. #!/usr/bin/perl 6. 7. # mengwong@pobox.com 8. # Wed Dec 10 03:52:04 EST 2003 9. ... 10. ...
Hapus 4 baris pertama hingga menjadi seperti potongan script di bawah ini.
1. #!/usr/bin/perl 2. 3. # mengwong@pobox.com 4. # Wed Dec 10 03:52:04 EST 2003 5. # postfix-policyd-spf 6. # version 1.06 7. # see http://spf.pobox.com/ 8. 9. ... 10. ...
Setelah itu barulah kita bisa mulai mengkonfigurasi SPF.
Konfigurasi SPF ini dilakukan pada file konfigurasi postfix, yakni master.cf dan main.cf.
Tambahkan baris di bawah ini.
policy unix - n n - - spawn user=nobody argv=/usr/bin/perl /usr/local/sbin/postfix-policyd.pl
Tambahkan check_policy_service unix:private/policy
pada bagian smtpd_recipient_restrictions, sehingga lengkapnya seperti potongan di bawah ini.
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
check_policy_service unix:private/policy
Perhatikan bagian konfigurasi yang dicetak tebal.
Restartlah postfix. Kemudian cobalah mengirim email dan amati jalannya melalui file /var/log/mail.log
postfix/policy-spf[13006]: Attribute: ccert_fingerprint= postfix/policy-spf[13006]: Attribute: ccert_issuer= postfix/policy-spf[13006]: Attribute: ccert_subject= postfix/policy-spf[13006]: Attribute: client_address=202.155.84.182 postfix/policy-spf[13006]: Attribute: client_name=unknown postfix/policy-spf[13006]: Attribute: helo_name=badak.its-sby.edu postfix/policy-spf[13006]: Attribute: instance=32c7.43527e15.0 postfix/policy-spf[13006]: Attribute: protocol_name=ESMTP postfix/policy-spf[13006]: Attribute: protocol_state=RCPT postfix/policy-spf[13006]: Attribute: queue_id= postfix/policy-spf[13006]: Attribute: recipient=kamas@sokam.or.id postfix/policy-spf[13006]: Attribute: request=smtpd_access_policy postfix/policy-spf[13006]: Attribute: sasl_method= postfix/policy-spf[13006]: Attribute: sasl_sender= postfix/policy-spf[13006]: Attribute: sasl_username= postfix/policy-spf[13006]: Attribute: sender=kamas@inf.its-sby.edu postfix/policy-spf[13006]: Attribute: size=1230 postfix/policy-spf[13006]: : testing: stripped sender=kamas@inf.its-sby.edu, stripped rcpt=kamas@sokam.or.id postfix/policy-spf[13006]: handler testing: DUNNO postfix/policy-spf[13006]: : SPF none: smtp_comment=SPF: domain of sender kamas@i nf.its-sby.edu does not designate mailers, header_comment=aphrodite: domain of ka mas@inf.its-sby.edu does not designate permitted sender hosts postfix/policy-spf[13006]: handler sender_permitted_from: DUNNO postfix/policy-spf[13006]: decided action=DUNNO
Bila pada file log terdapat entri semacam itu, berarti implementasi SPF anda sudah berjalan lancar.
Amavisd-New adalah content filter yang ditulis menggunakan perl (Net::Server
) dan berjalan secara daemonized sehingga memungkinkan penanganan lalu lintas email besar tanpa harus banyak memakan resource komputer yang tersedia. Selain itu, amavisd-new dapat menerima email yang akan diperiksa melalui SMTP sehingga dapat dipadukan dengan mudah dengan hampir semua MTA yang ada.
Dalam memeriksa email, amavisd-new menyimpan hash tiap email yang masuk. Bila hash email yang masuk belum tersimpan maka amavis akan memeriksa email tersebut secara utuh. Bila hashnya sudah ditemukan maka email tersebut tidak akan diperiksa, dan keputusan terima/tolaknya diambil sesuai dengan hasil hash yang sudah ada. Bila sebelumnya email dengan jenis hash itu didrop, maka email baru ini akan didrop, dan sebaliknya.
Amavisd-New memerlukan beberapa modul perl yaitu:
Archive::Tar
Archive::Zip
Compress::Zlib
Convert::TNEF
Convert::UUlib
MIME::Base64
MIME::Parser
Mail::Internet
Net::Server
Net::SMTP
Digest::MD5
IO::Stringy
Time::HiRes
Unix::Syslog
Pada instalasinya, apt-get akan ikut menginstall apa yang diperlukan bila memang modul-modul itu belum terinstall.
Selain itu amavisd-new juga dapat menggunakan beberapa program kompresi, bila ditemukan. Program-program kompresi seperti unarj, unzip, unrar, dan sejenisnya digunakan untuk memeriksa virus yang dibawa oleh attachment yang dikompres.
Seperti halnya clamav, instalasi amavisd-new juga hanya menggunakan apt-get
. Selain itu, kita juga sekalian menginstall beberapa program kompresi untuk mengoptimalkan kerja amavisd-new.
root# apt-get install amavisd-new unzip unrar zoo Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libarchive-tar-perl libarchive-zip-perl libcompress-zlib-perl libconvert-binhex-perl libconvert-tnef-perl libconvert-uulib-perl libio-multiplex-perl libio-stringy-perl libio-zlib-perl libmailtools-perl libmime-perl libnet-perl libnet-server-perl libtimedate-perl libunix-syslog-perl Suggested packages: lha arj nomarch lzop apt-listchanges libio-string-perl libmail-audit-perl libio-socket-ssl-perl zip Recommended packages: libnet-ph-perl libnet-snpp-perl libnet-telnet-perl The following NEW packages will be installed: amavisd-new libarchive-tar-perl libarchive-zip-perl libcompress-zlib-perl libconvert-binhex-perl libconvert-tnef-perl libconvert-uulib-perl libio-multiplex-perl libio-stringy-perl libio-zlib-perl libmailtools-perl libmime-perl libnet-perl libnet-server-perl libtimedate-perl libunix-syslog-perl unrar unzip zoo 0 upgraded, 19 newly installed, 0 to remove and 2 not upgraded. Need to get 1827kB of archives. After unpacking 5661kB of additional disk space will be used. Do you want to continue? [Y/n]
Ketik "Y", dan tunggulah hingga instalasi selesai.
File konfigurasi amavisd-new terdapat pada /etc/amavis/amavisd.conf
. File ini sangat panjang, dan terdapat dokumentasi yang sangat mendetail di setiap bagian yang bisa dikonfigurasi.
Aturan konfigurasi yang digunakan oleh amavisd-new sama dengan aturan penulisan variabel pada perl.
Variabel ini tidak begitu terpakai. Isi saja dengan FQDN server anda.
$mydomain = "mailku.sokam.or.id";
Kedua variabel ini digunakan untuk memforward email yang telah diperiksa oleh amavis kembali ke MTA untuk dirimkan ke maildir user. Isi variabel ini berformat "method:address:port";
$forward_method = "smtp:127.0.0.1:10025"; $notify_method = $forward_method;
Variabel ini digunakan untuk mengatur jumlah server yang dijalankan saat amavisd-new dijalankan. Besarnya harus sama dengan jumlah yang diizinkan pada konfigurasi postfix pada file master.cf
. Pengaturan pada postfix akan diterangkan pada bagian selanjutnya. Nilai default variabel ini adalah 2 sehingga dalam satu waktu amavis dapat menerima dua email untuk diperiksa secara simultan. Bila angka ini dirasa kurang, anda dapat menaikkannya namun jangan sampai terlalu besar karena dapat menghabiskan sumber daya server anda.
$max_servers = 2;
Saat amavis menerima email, maka daemon amavis akan membuat sebuah proses anak (child) untuk menangani pemeriksaan email. Jumlah yang disebutkan di sini menentukan jumlah maksimum sebuah child dapat memeriksa email. Bila nilainya diisi 10, maka setelah sepuluh kali pemeriksaan, child ini akan dimatikan dan daemon akan membuat child yang baru.
$max_request = 10;
Variabel ini menentukan jangka waktu maksimal yang dapat digunakan oleh child untuk memeriksa sebuah email. Bila hingga batas waktu yang ditentukan pemeriksaan belum selesai, maka email yang diperiksa dianggap bersih. Satuan waktu yang digunakan adalah detik.
$child_timeout = 5*60; # = 5 menit = 300 detik
Konfigurasi ini digunakan untuk menDISABLEkan pemeriksaan spam. Bila anda ingin memeriksa spam (via spamassassin) maka variabel ini harus ditutup.
# @bypass_spam_checks_acl
Variabel ini digunakan untuk menentukan domain mana saja yang dianggap sebagai "local domain". Pembedaan local domain dan non-local domain digunakan untuk menentukan apakah email yang diperiksa merupakan email yang dikirim oleh postfix ataukah yang diterima. Pembedaan ini digunakan dalam penulisan header spam pada email, dan sebagainya.
Nilai default variabel ini adalah .$mydomain
yang berarti adalah FQDN mailserver anda. Masukkan daftar domain yang ditangani oleh mailserver anda ke variabel ini.
$local_domains_acl = qw( sokam.or.id dev.sokam.or.id list.sokam.or.id .public.sokam.or.id );
Dengan konfigurasi seperti di atas maka domain sokam.or.id, dev.sokam.or.id, list.sokam.or.id, dan *.public.sokam.or.id akan diperlakukan sebagai local domain.
Bila nilai variabel ini diisi "1", maka IP address yang disebutkan pada $forward_method dan $notify_method digantikan oleh client yang terkoneksi dengan daemon amavis. Konfigurasi ini memungkinkan sebuah daemon amavis untuk digunakan bersama-sama oleh beberapa mailserver secara simultan.
$relayhost_is_client = 0;
Variabel ini menentukan apakah amavis bekerja sebagaimana MTA pada umumnya yakni menambahkan header "Received:" pada setiap email yang diperiksa.
$insert_received_line = 0;
Default setting untuk variabel ini adalah undef. Parameter ini menyebutkan nama dan lokasi Unix Socket untuk berkomunikasi dengan MTA. Karena kita menggunakan postfix, maka biarkan variabel ini berisi undef
karena postfix mengirimkan email untuk diperiksa melalui TCP Socket.
$unix_socketname = undef;
Variabel ini menentukan TCP port berapa yang digunakan untuk menerima email yang dikirimkan oleh MTA. Defaultnya adalah 10024
$inet_socket_port = 10024;
Variabel ini menentukan interface yang digunakan untuk menerima email untuk diperiksa. Defaultnya adalah 127.0.0.1, sehingga amavis hanya dapat menerima email dari localhost, dan tidak dari host yang lainnya. Bila anda ingin amavis dapat menerima dari segala macam interface, maka isikan undef
sebagai nilainya.
$inet_socket_bind = "127.0.0.1";
Array ini merupakan daftar IP address yang diizinkan untuk mengirimkan email ke amavis untuk diperiksa. Bila anda ingin lebih dari satu server yang dapat memanfaatkan instalasi amavis ini, masukkan alamat IPnya ke dalam array ini. Selain itu, jangan lupa untuk mengisikan undef
pada $inet_socket_bind
.
@inet_acl = qw( 127.0.0.1 );
Setting di atas hanya mengizinkan localhost untuk mengirim email ke amavis.
$inet_socket_bind = undef; @inet_acl = qw( 127.0.0.1 10.11.12.13 );
Setting di atas mengizinkan localhost dan server dengan IP 10.11.12.13 untuk berkomunikasi dengan amavis.
Nilai default untuk variabel ini adalah postmaster\@$mydomain
. Pada setup ini, konfigurasi ini berarti mengirimkan pembertahuan mengenai ditemukannya virus pada postmaster@mailku.sokam.or.id. Bila anda tidak ingin mendapatkan pemberitahuan tentang ditemukannya virus pada suatu email, isilah varibel ini dengan undef
.
$virus_admin = undef;
Merupakan variabel yang menentukan angka batas minimal amavis untuk menambahkan header informasi spam pada email yang diperiksa.
Merupakan variabel yang menentukan angka batas minimal amavis untuk menambahkan header bahwa email ini adalah spam.
Merupakan variabel yang menentukan pada skor berapakah email akan didrop dan kemudian dikarantina.
$sa_tag_level_deflt = 1.0; $sa_tag2_level_deflt = 2.5; $sa_kill_level_deflt = 5;
Sebaiknya anda memeriksa jalannya amavis secara rutin untuk menentukan apakah angka yang anda pasang di sini sudah sesuai dengan keinginan. Teruslah menyesuaikan, karena seperti halnya virus, spam senantiasa berubah tanpa pola yang tetap.
Variabel yang disebutkan pada panduan ini adalah variabel yang perlu mendapatkan perhatian dengan porsi tinggi. Variabel yang lain sudah cukup baik untuk digunakan apa adanya. Bila memang anda tertarik dengan amavisd-new ini, bacalah setiap keterangan yang terdapat pada file konfigurasinya.
Variabel ini merupakan variabel yang menentukan scanner virus apa saja yang akan kita gunakan. Carilah bagian 'Clam Antivirus-clamd'. Setelah itu ubahlah konfigurasi socket yang menunjuk ke:
/var/run/clamav/clamd.ctl
sehingga mengarah ke:
/var/run/clamav/clamd
Potongan selengkapnya dapat dilihat di bawah ini:
### http://www.clamav.net/
['Clam Antivirus-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
Perhatikan bagian yang dicetak tebal pada potongan konfigurasi di atas.
Setelah selesai mengkonfigurasi amavisd-new, sekarang kita harus mengkonfigurasi postfix untuk menggunakan amavisd-new sebagai content-filter. Konfigurasi yang perlu dilakukan terdapat pada file main.cf
dan master.cf.
Tambahkan baris di bawah ini untuk menentukan ke mana postfix harus mengirimkan email yang akan diperiksa. Format yang digunakan adalah service:host:port
.
content_filter = smtp-amavis:[127.0.0.1]:10024
Tambahkan beberapa baris di bawah ini agar service "smtp-amavis" dapat digunakan oleh postfix.
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - 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.1 -o strict_rfc821_envelopes=no -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000
Pada baris pertama dapat anda lihat bahwa smtp-amavis dikonfigurasikan untuk dapat menerima dua email sekaligus dalam satu waktu. Angka yang terdapat di sini harus sama dengan angka yang terdapat pada variabel $max_servers
yang terdapat pada konfigurasi amavisd-new.
Setelah itu jangan lupa untuk merestart postfix.
root# /etc/init.d/postfix restart Stopping mail transport agent: Postfix. Starting mail transport agent: Postfix.
Pada bagian sebelumnya kita telah mengubah file konfigurasi clamav agar dapat dijalankan oleh user amavis. Sekarang kita harus mengubah kepemilikan direktori /var/run/clamav agar menjadi milik amavisd-new, dan merestart clamav daemon.
root# chown -R /var/run/clamav root# /etc/init.d/clamav-daemon restart Stopping ClamAV daemon: clamd. Starting ClamAV daemon: clamd.
Setelah semua konfigurasi selesai, anda dapat mencoba menjalankan amavisd-new dari command line dalam mode debug dan meneliti apakah amavisd-new sudah berjalan sesuai dengan yang anda inginkan.
root# amavisd-new debug Oct 16 12:10:02 kunti amavisd-new[3808]: starting. amavisd-new at kunti amavisd-new-20030616-p10, Unicode aware, LANG=en_US Oct 16 12:10:03 kunti amavisd-new[3808]: Perl version 5.008007 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Amavis::Conf 1.15 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Archive::Tar 1.26 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Archive::Zip 1.14 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Compress::Zlib 1.34 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Convert::TNEF 0.17 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Convert::UUlib 1.051 Oct 16 12:10:03 kunti amavisd-new[3808]: Module DB_File 1.811 Oct 16 12:10:03 kunti amavisd-new[3808]: Module MIME::Entity 5.417 Oct 16 12:10:03 kunti amavisd-new[3808]: Module MIME::Parser 5.417 Oct 16 12:10:03 kunti amavisd-new[3808]: Module MIME::Tools 5.417 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Mail::Header 1.62 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Mail::Internet 1.62 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Mail::SpamAssassin 3.000004 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Net::Cmd 2.26 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Net::SMTP 2.29 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Net::Server 0.87 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Time::HiRes 1.66 Oct 16 12:10:03 kunti amavisd-new[3808]: Module Unix::Syslog 0.100 Oct 16 12:10:03 kunti amavisd-new[3808]: Found myself: /usr/sbin/amavisd-new -c /etc/amavis/amavisd .conf Oct 16 12:10:03 kunti amavisd-new[3808]: Lookup::SQL code NOT loaded Oct 16 12:10:03 kunti amavisd-new[3808]: Lookup::LDAP code NOT loaded Oct 16 12:10:03 kunti amavisd-new[3808]: AMCL-in protocol code NOT loaded Oct 16 12:10:03 kunti amavisd-new[3808]: SMTP-in protocol code loaded Oct 16 12:10:03 kunti amavisd-new[3808]: ANTI-VIRUS code loaded Oct 16 12:10:03 kunti amavisd-new[3808]: ANTI-SPAM code loaded ... ... ...
Bila anda rasa semua sudah berjalan sesuai dengan keinginan anda tekan [Ctrl]+[c]
untuk keluar, dan jalankan amavisd-new secara permanen.
root# /etc/init.d/amavis restart Stopping amavisd: (not running). Starting amavisd: amavisd-new.
Cobalah mengirimkan email ke salah satu mailbox user, dan kemudian amati /var/log/mail.log
. Contohnya:
root# echo "kirim ke mailbox setelah install amavis" | mail -s testing kamas@sokam.or.id
root# tail /var/log/mail.log
Oct 16 12:27:19 kunti postfix/smtpd[4291]: connect from localhost.localdomain[127.0.0.1]
Oct 16 12:27:19 kunti postfix/smtpd[4291]: D3E46C907: client=localhost.localdomain[127.0.0.1]
Oct 16 12:27:19 kunti postfix/cleanup[4286]: D3E46C907: message-id=<20051016052719.9C2CFC900@mailku.so
kam.or.id>
Oct 16 12:27:19 kunti postfix/qmgr[4184]: D3E46C907: from=<root@mailku.sokam.or.id>, size=800, nrcpt=1
(queue active)
Oct 16 12:27:19 kunti postfix/smtpd[4291]: disconnect from localhost.localdomain[127.0.0.1]
Oct 16 12:27:19 kunti amavis[4241]: (04241-01) Passed, <root@mailku.sokam.or.id> -> <kamas@sokam.or.id
>, Message-ID: <20051016052719.9C2CFC900@mailku.sokam.or.id>, Hits: -2.4
Oct 16 12:27:19 kunti postfix/smtp[4288]: 9C2CFC900: to=<kamas@sokam.or.id>, relay=127.0.0.1[127.0.0.1]
, delay=0, status=sent (250 2.6.0 Ok, id=04241-01, from MTA: 250 Ok: queued as D3E46C907)
Oct 16 12:27:19 kunti postfix/qmgr[4184]: 9C2CFC900: removed
Oct 16 12:27:19 kunti postfix/virtual[4296]: D3E46C907: to=<kamas@sokam.or.id>, relay=virtual, delay=0,
status=sent (delivered to maildir)
Oct 16 12:27:19 kunti postfix/qmgr[4184]: D3E46C907 : removed
Bagian yang dicetak tebal merupakan aktifitas amavisd-new. Sekarang cobalah untuk melihat file email yang telah tersimpan.
root# cd /var/mailbox/sokam.or.id/k/kamas/new/
root# ls
1129440439.V343Ic900M946672.mailku.sokam.or.id
root# cat 1129440439.V343Ic900M946672.mailku.sokam.or.id
Return-Path: <root@mailku.sokam.or.id>
X-Original-To: kamas@sokam.or.id
Delivered-To: kamas@sokam.or.id
Received: from localhost (localhost.localdomain [127.0.0.1])
by mailku.sokam.or.id (Postfix) with ESMTP id D3E46C907
for <kamas@sokam.or.id>; Sun, 16 Oct 2005 12:27:19 +0700 (WIT)
Received: from mailku.sokam.or.id ([127.0.0.1])
by localhost (kunti [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
id 04241-01 for <kamas@sokam.or.id>;
Sun, 16 Oct 2005 12:27:19 +0700 (WIT)
Received: by mailku.sokam.or.id (Postfix, from userid 0)
id 9C2CFC900; Sun, 16 Oct 2005 12:27:19 +0700 (WIT)
To: kamas@sokam.or.id
Subject: testing
Message-Id: <20051016052719.9C2CFC900@mailku.sokam.or.id>
Date: Sun, 16 Oct 2005 12:27:19 +0700 (WIT)
From: root@mailku.sokam.or.id (root)
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at mailku.sokam.or.id
kirim ke mailbox setelah install amavis
Demikianlah sedikit tuntunan untuk melakukan instalasi postfix beserta beberapa komponen pendukungnya pada sebuah komputer. Bagian setelah ini akan menjelaskan tentang mendistribusikan sistem ke beberapa server berjalan secara bersamaan dalam mengelola daftar domain yang kita tangani.
Email merupakan salah satu komponen terbesar yang mendominasi lalu-lintas data di internet, setelah aktifitas web. Walau demikian, sejak awal ditemukannya email hingga saat ini, cara kerjanya tetap seperti dulu. Email merupakan salah satu aktifitas liar, tanpa pengendali dan pengarah. Oleh karena itulah banyak sekali tambahan seperti fasilitas antivirus, RBL, dan sebagainya.
Penggunaan antivirus pada server kadangkala membutuhkan biaya (secara sumber daya) yang cukup besar. Semakin besar jumlah email yang diterima, maka makin besar pula sumber daya komputer yang digunakan untuk memeriksa virus sebelum dikirim ke mailbox pengguna. Hal ini bisa menjadi lebih besar lagi bila kita menerapkan kebijakan content-filter yang memeriksa adanya pola-pola spam. Bayangkan bila pada suatu waktu terdapat 20.000 email dalam queue yang harus dikirim ke mailbox user, dan hampir semuanya mengandung attachment bervirus. Server harus memeriksa email itu satu demi satu hingga antrian terakhir. Itu berarti bila kita menunggu sebuah email dan email itu datang terakhir, kita harus menunggu lama walau pun email yang kita tunggu berukuran kecil.
Permasalahan umum lainnya adalah bila terjadi kerusakan pada server. Para pengguna email tidak dapat membaca email lagi, setidaknya hingga mailserver tersebut diperbaiki oleh administrator.
Beberapa permasalahan itulah yang akan dipecahkan oleh sistem terdistribusi ini. Dengan adanya lebih dari sebuah server yang menangani email, maka 20.000 email dalam antrian itu bisa dipecah untuk ditangani server-server dalam cluster kita. Bila kita punya 4 server, maka masing-masing server cukup memeriksa ~5000 email. Bila toh salah satu server yang kita punya terpaksa "rusak", server lain masih dapat menangani email yang masuk/keluar dan layanan ke user tidak akan berhenti.
Bila kita tarik garis besar manfaat sistem terdistribusi ini, manfaat yang paling terasa adalah menghilangkan single point of failure, high availibility, dan distribusi sumber daya sesuai daya komputer yang ada. Harapan kita akan adanya sistem ini adalah menekan berhenti totalnya layanan email hingga 0%.
Sebagai ilustrasi, beginilah nantinya skema sistem yang akan kita gunakan.
/----------------------\
/ \
| |
| I N T E R N E T |
| |
\ /
\----------------------/
|
|
|
+--------------------------------------------+
| +----------+ +----------+ +----------+ |
| | Mail 1 | | Mail 2 | === | Mail N | |
| +-----+----+ +------+---+ +----+-----+ |
| | | | |
| +-------------+--------------+ |
| | |
| | |
| | |
| +-------------+ | +-------------+ |
| | File Server |---+---| DB Server | |
| +-------------+ +-------------+ |
| |
| Distributed System (mailku.sokam.or.id) |
+--------------------------------------------+
Bisa kita lihat pada gambar di atas bahwa kita mempunyai beberapa server email yang bekerja bersamaan dan sebuah file server yang menampung data email tiap pengguna. Jumlah mail server dapat ditambah atau dikurangi kapan saja tanpa harus menghentikan sistem.
Sebelum melangkah lebih jauh, siapkan terlebih dahulu beberapa email server yang nantinya akan kita gabungkan ke dalam sistem kita. Proses instalasinya persis sama dengan bagian sebelumnya, hanya saja file-file hasil kompilasi (dpkg-buildpackage
) dapat kita gunakan dalam instalasi server lainnya. Oleh karena itu kita tidak perlu mendownload beberapa file seperti sebelumnya. Kita cukup menjalankan dpkg -i [file.deb]
untuk menyelesaikan instalasi server berikutnya.
Konfigurasi pada gambar di atas memang sedikit berbeda dengan apa yang mungkin anda bayangkan, terutama pada bagian database server dan file server.
Sebelumnya kita telah melakukan instalasi MySQL, dan kemudian komponen postfix yang menggunakan MySQL menggunakan alamat "127.0.0.1" sebagai alamat server database. Anda boleh tetap menggunakan konfigurasi ini, atau memindahkan ke sebuah server tersendiri. Saya menyarankan untuk memindahkan ke sebuah server sendiri untuk kemudahan administrasi di kemudian hari.
Proses instalasi MySQL sama persis dengan cara yang diterangkan di atas, hanya saja ada sebuah file konfigurasi yaitu /etc/mysql/my.cnf
yang harus sedikit kita ubah.
bind-address = 127.0.0.1
Hapuslah baris di atas agar server database kita bisa diakses melalui jaringan. Selain menghapus, anda dapat me-non-aktifkan pilihan itu dengan cara memberi tanda pagar (#) di depan barisnya sehingga konfigurasi itu dianggap tidak ada. Jangan lupa untuk merestart server database sebelum mencoba untuk menggunakannya dari server lain.
Setelah itu installah postfix dengan menggunakan paket-paket .deb yang sebelumnya kita punya, dan lakukan konfigurasi seperti pada bagian sebelumnya. Ubahlah konfigurasi IP untuk server database dari 127.0.0.1 menjadi alamat IP server yang anda gunakan sebagai server database.
Contoh:
user = postfix password = postfix hosts = 10.1.1.5 # sesuaikan alamat ini dengan IP server database anda dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
Konfigurasi program-program courier yang harus menyesuaikan adalah file authmysqlrc
. Konfigurasi yang harus diubah adalah MYSQL_SERVER. Sesuaikan isinya dengan alamat IP server database yang anda gunakan.
MYSQL_SERVER 10.1.1.5
NFS (Network File System) merupakan salah satu jenis shared file system yang paling tua. Sistem NFS awalnya dikembangkan oleh Sun Microsystem yang digunakan untuk berbagi file dalam UNIX. NFS mudah untuk digunakan, dan performanya cukup baik untuk digunakan dalam lingkungan terdistribusi.
Server NFS adalah sebuah server tersendiri yang menampung semua data email. Pada server ini tidak ada MTA, dan server ini berperan khusus sebagai File Server. Client yang menggunakan layanan server ini adalah seluruh mail server kita.
Instalasi server NFS dapat kita lakukan seperti biasa, dengan menggunakan apt-get
.
root# apt-get install nfs-kernel-server Reading package lists... Done Building dependency tree... Done The following extra packages will be installed: nfs-common portmap The following NEW packages will be installed: nfs-common nfs-kernel-server portmap 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 241kB of archives. After unpacking 778kB of additional disk space will be used. Do you want to continue [Y/n]?
Pilih Y, dan tunggulah proses instalasi selesai.
Ingatlah bahwa anda harus menyediakan kapasistas harddisk yang cukup besar untuk menampung data-data email milik para pengguna. Semakin banyak pengguna yang menggunakan sistem anda, maka semakin besar pula kapasistas penyimpanan yang harus anda sediakan. Misalkan bila anda menyimpan file-file email pada direktori /home/mailbox
, direktori ini harus kita share agar bisa digunakan oleh seluruh mail server kita.
Untuk itu kita harus mengkonfigurasi sebuah file yaitu /etc/exports
.
/home/mailbox 10.1.1.0/24(rw,no_root_squash,async)
Hal yang sama juga berlaku pada file konfigurasi beberapa paket yang telah kita install. Ingat, skenario ini menuntut kita untuk memiliki konfigurasi yang identik antara satu mail server dengan yang lain. Untuk memudahkan pengubahan file konfigurasi, kita dapat mengumpulkan semua file tersebut pada server NFS, dan kemudian dimount ke sebuah direktori, dan direktori konfigurasi asli yang terdapat pada direktori /etc
masing-masing mail server kita ganti dengan symbolic link yang menuju direktori tersebut.
Pada contoh ini, file konfigurasi berada pada direktori /home/konfigmail
yang kemudian oleh seluruh mailserver dimount pada direktori /konfigmail
. Lengkapilah file /etc/exports
, masukkan direktori tempat file konfigurasi berada.
/home/mailbox 10.1.1.0/24(rw,no_root_squash,async) /home/konfigmail 10.1.1.0/24(rw,no_root_squash,async)
Konfigurasi pada sisi client tidak rumit. Yang harus kita lakukan adalah memount direktori tempat penyimpanan data email dan konfigurasi daemon kita. Alamat IP server NFS yang kita gunakan pada contoh ini adalah 10.1.1.4. Tambahkan kedua baris di bawah ini pada file /etc/fstab.
10.1.1.4:/home/mailbox /var/mailbox nfs wsize=8192,rsize=8192,auto 10.1.1.4:/home/konfigmail /konfigmail nfs wsize=8192,rsize=8192,auto
Langkah berikutnya adalah menghapus beberapa direktori konfigurasi yaitu /etc/postfix, /etc/courier, /etc/amavis, dan /etc/clamav. Kita akan mengganti keempat direktori tersebut dengan symbolic link yang menuju ke direktori yang berada pada /konfigmail.
root# rm -rf /etc/amavis /etc/clamav /etc/postfix /etc/courier root# ln -s /konfigmail/amavis /etc/amavis root# ln -s /konfigmail/clamav /etc/clamav root# ln -s /konfigmail/postfix /etc/postfix root# ln -s /konfigmail/courier /etc/courier
Mengapa DNS Round Robin? Agar kita hanya perlu satu nama sebagai hostname (misal: mailku.sokam.or.id), tapi memiliki beberapa IP sehingga email yang masuk disebar ke semua mailserver yang telah kita bangun sebelumnya. Sederhananya, potongan entri DNS yang bisa kita pakai adalah:
sokam.or.id IN MX 1 mailku.sokam.or.id mailku.sokam.or.id IN A 10.1.1.7 IN A 10.1.1.8 IN A 10.1.1.9
Dengan konfig DNS seperti di atas, maka email yang menuju ke domain sokam.or.id secara berurutan akan terkirim ke 10.1.1.7, kemudian 10.1.1.8, dan ke 10.1.1.9 hingga kembali lagi ke 10.1.1.7 dan seterusnya. Dengan demikian dapat kita simpulkan pula bahwa setiap ada penambahan/pengurangan mail server, entri DNS harus segera kita ubah untuk menghindari adanya email yang salah alamat.
Implementasi potongan konfigurasi di atas dapat bervariasi tergantung perangkat lunak yang anda gunakan sebagai DNS server.
Silakan mencoba mengirim email, dan amati hasilnya pada mail.log. Selamat mencoba, semoga sukses!