DomainKeys Identified Mail di Zimbra (Postfix)

zimbra_logo

Dalam upaya mengurangi spam mail forgery (klaim email seolah-olah benar dari pengirim/domain yang valid) yang sering terjadi adalah dengan DKIM (DomainKeys Identified Mail). Pada DKIM, sebuah email yang dikirim akan disign dengan private key dan ketika diterima email akan diverifikasi dengan public key yang sudah disiarkan sebelumnya melalui record DNS. Dari hasil verifikasi tersebut bisa ditentukan apakah email akan diterima atau ditola. Beberapa major mail provider seperti Yahoo dan Gmail telah lama mengadopsinya. Postfix, mailer yang digunakan oleh Zimbra, juga telah mendukung penggunaan DKIM ini menggunakan proxy (via content_filter) atau secara native menggunakan milter (mail filter). Untuk mengkonfigurasi Postfix dengan content_filter (DKIM proxy), silakan baca posting saya yang lain: DKIM di Postfix.

Milter merupakan sebuah protokol yang diperkenalkan oleh Sendmail untuk memfilter email dari virus maupun spam maupun fungsi lain yang lebih kompleks. Antara MTA dengan milter ini komunikasi dilakukan dengan menggunakan API yang disediakan oleh library milter. Di Postfix, milter dibedakan dalam dua macam, yaitu SMTP milter (smtpd_milters) untuk memfilter email yang _hanya_ datang dari network, dan non-SMTP milter (non_smtpd_milters) untuk email yang datang dari local submission (a.k.a sendmail wrapper). Aplikasi milter dapat ‘berbicara’ dengan Postfix melalui unix-socket atau TCP. Contoh aplikasi milter adalah dkim-miltersid-milter, dan SpamAssassin. Jika digambarkan posisi aplikasi milter dan Postfix kira-kira seperti ini:

DKIM di Zimbra

Untuk mengkonfigurasi Postfix DKIM Zimbra di Ubuntu, cukup dengan menginstall paket dkim-filter (yang otomatis akan menginstall paket libmilter0).

$ sudo aptitude install dkim-filter

Buat direktori untuk menyimpan file private key, misalnya /etc/mail :

$ sudo mkdir -p /etc/mail
$ cd /etc/mail

Buat key yang akan digunakan untuk mengsign email dengan utiliti dkim-genkey, misalnya untuk membuat 1024 bits key pada domain domain.tld dengan selector selector1 adalah:

$ sudo dkim-genkey -b 1024 -d domain.tld -s selector1

Maka kalau kita lihat perintah diatas akan membuat dua buah file  yaitu selector1.private yang berisi private key dan selector1.txt yang merupakan contoh record DNS yang berisi public key untuk domain domain.tld. Ubah DNS pada domain domain.tld seperti pada contoh file tersebut. Untuk memeriksanya bisa menggunakan perintah dig, misalnya :

$ dig -t txt +short selector1._domainkey.domain.tld

Ubah file /etc/dkim.filter pada bagian seperti dibawah ini :

Ubah kepemilikan file  /etc/mail/selector1.private menjadi file milik user yang akan menjalankan dkim-filter (default: dkim-filter):

$ sudo chown dkim-filter /etc/mail/selector1.private

Restart daemon dkim-filter :

$ sudo /etc/init.d/dkim-filter restart

Secara default, daemon dkim-filter akan listen di port 8891 di localhost bukan menggunakan unix-socket. Periksa daemon apakah sudah listen di port tersebut :

$ sudo lsof -i TCP:8891

COMMAND    PID        USER   FD   TYPE  DEVICE SIZE NODE NAME
dkim-filt 4752 dkim-filter    4u  IPv4 2728156       TCP localhost:8891 (LISTEN)

Sekarang kita beritahu Postfix untuk menggunakan filter tersebut dengan mengubah/menambahkan pada file /opt/zimbra/postfix/conf/master.cf.in menjadi :

-o milter_default_action=accept
-o smtpd_milters=inet:localhost:8891
-o non_smtpd_milters=inet:localhost:8891
-o disable_mime_output_conversion=yes

Pada milter_default_action diset accept agar jika suatu ketika milter tidak tersedia, email masih bisa diteruskan.

Restart Postfix di Zimbra :

$ sudo  su - zimbra
$ zmmtactl restart

Kemudian coba kirim email ke Yahoo atau Gmail dan melihat header lengkapnya untuk memeriksa status DKIM. Alternatif lain adalah dengan mengirimkan email test ke autorespond+dkim-relaxed @ dk.elandsys.com.

Contoh di Gmail :

Contoh di Yahoo:

Semoga bermanfaat.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.