Skip to main content

Install DKIM dan SFP pada Postfix Mail Server

Melanjutkan tulisan yang lalu tentang posfix mail server http://aboen.or.id/blog/postfix-virtual-domain-sasl-dovecot-pop3imap-clamav-clamsmtp-pada-ubuntu-lucid-1004-lts.asp
Berikut adalah tambahan agar mail server yang kita bangun bisa berjalan lebih lancar terhadap 2 raksasa penyedia email gratis yahoo dan gmail.

Bila pengiriman email tidak terlalu banyak dan sering ke pada 2 raksasa tersebut implementasi DKIM dan SFP tidak terlalu diperlukan tapi bila sebagian besar email dikirim dengan tujuan ke 2 domain tersebut maka bisa menjadi keharusan. Jika tidak email yang dikirim dari mail server kita akan masuk ke junk atau spam folder dan bisa kena blok dari mereka.

DKIM (DomainKeys Identified Mail) adalah salah satu metode untuk email authentifikasi yang mengijinkan penerima email untuk melakukan verifikasi bahwa pesan/email yang di terima datang dari domain dan server yang benar dengan melakukan pengecekan alamat email pengirim dan isi pesan secara terintegritas.

Metode yang digunakan untuk verifikasi melalui domain DNS record.

DKIM adalah pengembangan dari Domainkeys yang awalnya digunakan oleh yahoo dan masih tetap digunakan sampai sekarang. DKIM digunakan oleh mail server besar termasuk google, yahoo, FastMail.fm

Lebih jauh tentang DKIM dan SPF silakan di tengok disini:
http://en.wikipedia.org/wiki/DKIM
http://www.dkim.org/
http://en.wikipedia.org/wiki/Sender_Policy_Framework
http://www.openspf.org/

Pada tulisan ini DKIM dan SPF digunakan untuk out going atau pengiriman email saja.

Install DKIM
buah:~# apt-get install dkim-filter
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libmilter1.0.1
The following NEW packages will be installed:
dkim-filter libmilter1.0.1
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 484kB of archives.
After this operation, 967kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://ftp.uk.debian.org lenny/main libmilter1.0.1 8.14.3-5+lenny1 [236kB]
Get:2 http://ftp.uk.debian.org lenny/main dkim-filter 2.6.0.dfsg-1+lenny1 [248kB]
Fetched 484kB in 6s (71.5kB/s)
Selecting previously deselected package libmilter1.0.1.
(Reading database ... 20118 files and directories currently installed.)
Unpacking libmilter1.0.1 (from .../libmilter1.0.1_8.14.3-5+lenny1_i386.deb) ...
Selecting previously deselected package dkim-filter.
Unpacking dkim-filter (from .../dkim-filter_2.6.0.dfsg-1+lenny1_i386.deb) ...
Processing triggers for man-db ...
Setting up libmilter1.0.1 (8.14.3-5+lenny1) ...
Setting up dkim-filter (2.6.0.dfsg-1+lenny1) ...
adduser: Warning: The home directory `/var/run/dkim-filter' does not belong to the user you are currently creating.
Starting DKIM Filter: dkim-filter: /etc/dkim-filter.conf: at least one selector and key required for signing mode
See /usr/share/doc/dkim-filter/README.Debian for help
Starting for DKIM verification only

Buat Key dkim-milter
buah:~# dkim-genkey -t -s default -d gue.keren.la

  • -t adalah test mode
  • -s adalah nama selector anda bisa menamakan terserah anda
  • -d adalah nama domain

buat directory mail ( pada debian lenny secara default tidak ada directory mail )
buah:~# mkdir /etc/mail

copy file default.private dan default.txt ke directory /etc/mail
buah:~# cp default.* /etc/mail/

Setting DNS TXT record
isi sama bisa di liat pada file default.txt
buah:~# cd /etc/mail/
buah:/etc/mail# ls
default.private default.txt

lihat isi file default.txt
buah:/etc/mail# cat default.txt
default._domainkey IN TXT "v=DKIM1; g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6YvAYqprLBY9CuUi0+yneluQAtb/akPC4BNIH27Qy4DFOFL6TcyWMsJ3OyrDFSwq9U5hMZ1cCKZDOW9f2hnV8ebTOoPp5ZHrmgxzK+Py1WKEI+EHMcmPHmL/OXJL5vOchD3wwh4Bo42W3zlhtQhIMxDJ2HzKZyCenbXwjtN1jzwIDAQAB" ; ----- DKIM default for gue.keren.la

isikan pada DNS domain anda pada TXT record bagian berikut :
"v=DKIM1; g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6YvAYqprLBY9CuUi0+yneluQAtb/akPC4BNIH27Qy4DFOFL6TcyWMsJ3OyrDFSwq9U5hMZ1cCKZDOW9f2hnV8ebTOoPp5ZHrmgxzK+Py1WKEI+EHMcmPHmL/OXJL5vOchD3wwh4Bo42W3zlhtQhIMxDJ2HzKZyCenbXwjtN1jzwIDAQAB"

Jangan lupa menambahkan default._domainkey.domain (default._domainkey.gue.keren.la) pada record TXT di DNS

Edit file /etc/dkim-filter.conf
buah:/etc/mail# vi /etc/dkim-filter.conf
edit pada bagian berikut sehingga menjadi :

Syslog yes
UMask 002
Domain gue.keren.la
KeyFile /etc/mail/default.private
Selector default
Background yes
Canonicalization simple
DNSTimeout 5
Mode sv
SignatureAlgorithm rsa-sha256
X-Header no
BodyLengths yes
FixCRLF yes
Statistics /var/run/dkim-filter/dkim-stats
RequiredHeaders yes

Atau tambahkan dengan perintah echo karena configurasi seperti diatas secara default masih dalam kondisi di komentar (#)
kecuali syslog dan umask.

buah:~# echo "Domain gue.keren.la" >> /etc/dkim-filter.conf
buah:~# echo "KeyFile /etc/mail/default.private" >> /etc/dkim-filter.conf
buah:~# echo "Selector default" >> /etc/dkim-filter.conf
buah:~# echo "Background yes" >> /etc/dkim-filter.conf
buah:~# echo "Canonicalization simple" >> /etc/dkim-filter.conf
buah:~# echo "DNSTimeout 5" >> /etc/dkim-filter.conf
buah:~# echo "Mode sv" >> /etc/dkim-filter.conf
buah:~# echo "SignatureAlgorithm rsa-sha256" >> /etc/dkim-filter.conf
buah:~# echo "X-Header no" >> /etc/dkim-filter.conf
buah:~# echo "BodyLengths yes" >> /etc/dkim-filter.conf
buah:~# echo "FixCRLF yes" >> /etc/dkim-filter.conf
buah:~# echo "Statistics /var/run/dkim-filter/dkim-stats" >> /etc/dkim-filter.conf
buah:~# echo "RequiredHeaders yes" >> /etc/dkim-filter.conf

Edit File /etc/default/dkim-filter tambahkan baris berikut :
SOCKET="inet:8891@localhost" # Ubuntu default - listen on loopback on port 8891

buah:/etc# vi /etc/default/dkim-filter

Sehingga menjadi :
# Command-line options specified here will override the contents of
# /etc/dkim-filter.conf. See dkim-filter(8) for a complete list of options.
#DAEMON_OPTS=""
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in dkim-filter.conf
#SOCKET="local:/var/run/dkim-filter/dkim-filter.sock" # default
#SOCKET="inet:54321" # listen on all interfaces on port 54321
#SOCKET="inet:12345@localhost" # listen on loopback on port 12345
#SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345
SOCKET="inet:8891@localhost" # Ubuntu default - listen on loopback on port 8891

Tambahkan baris berikut pada file /etc/postfix/main.cf untuk memberitahu postfix dengan DKIM milter dan cara postfix untuk melakukan koneksi

# DKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Caranya dengan mengedit dan menambahkan baris tersebut atau dengan :

buah:~# echo "# DKIM" >> /etc/postfix/main.cf
buah:~# echo "milter_default_action = accept" >> /etc/postfix/main.cf
buah:~# echo "milter_protocol = 2" >> /etc/postfix/main.cf
buah:~# echo "smtpd_milters = inet:localhost:8891" >> /etc/postfix/main.cf
buah:~# echo "non_smtpd_milters = inet:localhost:8891" >> /etc/postfix/main.cf

Install SPF (Sender Policy Framework)

buah:/etc# apt-get install postfix-policyd-spf-perl libmail-spf-perl

Aktifkan policy service SPF di postfix
tambahkan pada /etc/postfix/main.cf
buah:/etc# echo "spf-policyd_time_limit = 3600s" >> /etc/postfix/main.cf

Tambahkan juga di baris berikut pada smtpd_recipient_restrictions di /etc/postfix/main.cf
check_policy_service unix:private/policy-spf

sehingga menjadi kira-kira seperti ini:

smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
check_policy_service unix:private/policy-spf,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dul.dnsbl.sorbs.net,
permit

Tambahkan baris berikut pada /etc/postfix/master.cf


buah:/etc# vi /etc/postfix/master.cf
#spf
policy-spf unix - n n - - spawn
user=nobody argv=/usr/sbin/postfix-policyd-spf-perl

Tambahkan juga pada TXT record DNS baris berikut
"v=spf1 a ~all"

DICOBA
Restart DKIM-filter
buah:/# /etc/init.d/dkim-filter restart
Restarting DKIM Filter: dkim-filter.

Restart Postfix
buah:/# /etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.

Cek apakah konfigurasi sudah benar
http://www.sendmail.org/dkim/checker
http://www.myiptest.com/staticpages/index.php/email-tools-open-relay-dkim-test

test kirim emial ke google dan yahoo

Hasil di google :
Received-SPF: pass (google.com: domain of xxxxx@gue.keren.la designates 91.216.93.59 as permitted sender) client-ip=91.216.93.59;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of xxxxx@gue.keren.la designates 91.216.93.59 as permitted sender) smtp.mail=xxxxx@gue.keren.la; dkim=pass (test mode) header.i=@gue.keren.la

Hasil di Yahoo :
Received-SPF: pass (mta1001.mail.re4.yahoo.com: domain of xxxxx@gue.keren.la designates 91.216.93.59 as permitted sender)
Authentication-Results: mta1218.mail.mud.yahoo.com from=gue.keren.la; domainkeys=neutral (no sig); from=gue.keren.la; dkim=pass (ok)

Berarti sudah Ok dari google dan Yahoo SPF: pass dan DKIM=pass

Catatan:

  • Bila mendapatkan pesan SPF/DKIM: Neutral tunggulah beberapa saat kemungkinan DNS belum terupdate.
  • Bila mendapatkan pesan dkim=neutral (bad format) pastikan seting DNS sudah benar pada penambahan record TXT dns seperti default._domainkey.gue.keren.la default._domainkey pastikan ada sebelum nama domain. kata default yang merupakan selector bisa diganti sesuai selera masing-masing pada saat pembuat key dengan option -s.
  • Bila mengirim email dari script php yang menggunakan format html pastikan ada \n yang artinya new line atau line break untuk mengeliminasi spasi kosong (whitespace) sehingga tidak merusak atau mengacaukan key yang dibuat DKIM. Hal ini biasanya terjadi bila mengirim langsung lewat shell dengan perintah mail atau lewat SMTP (pop3 dan imap) DKIM:pass tapi lewat php akan mendapatkan pesan pada Gmail dkim=neutral (body hash did not verify) pada Yahoo dkim=permerror (bad sig)