Friday, April 10, 2015

Implementasi SPF, DKIM, DMARC dan Reverse DNS Sebagai Standard Protection dan Meningkatkan Email Integrity

Ketika kita membangun sebuah email server sering kita lupa bahwa ada konfigurasi tambahan yang harus kita lakukan. Konfigurasi ini termasuk kategori penting loh sebab ini terkait integritas email system yang telah kita bangun, pertanyaannya itu seberapa penting sih? 

Banyak Email System saat ini terutama seperti Gmail, Yahoo, AOL, sampe Email System Perbankan (Bank-Bank) biasanya sangat memperhatikan paramater-parameter seperti SPF, DKIM, DMARC, dan Resolve DNS yang digunakan oleh si pengirim email. Kenapa sih kok ribet amat yah? Itu karna mereka mengeluarkan banyak tenaga untuk bertarung melawan spam dan email spoofing. Inilah kenapa sebabnya biasanya paket email yang tidak terdapat SPF, DKIM, DMARC bahkan yang Resolve DNS nya kurang baik konfigurasinya sering dianggap spam dan lebih parahnya lagi bahkan di DROP oleh email system penerima.

By the way untuk tulisan ini best practicenya menggunakan platform zimbra. Namun, kudu diinget meskipun saya sebelumnya pernah berguru sama salah satu jagoan email server dgn platform zimbra di Indonesia, bukan berarti bahwa standard yang saya tulis ini hanya untuk platform zimbra saja, namun sebenernya juga untuk semua platform. Artinya ketika selesai mendeploy sebuah email system jangan cuma intinya bisa kirim dan terima email saja, sebaiknya jangan lupa juga tambahkan konfigurasi lainnya untuk meningkatkan proteksi dan juga email integrity, antara lain yaitu sebagai berikut ini :
  • Sender Policy Framework (SPF).
  • Domain Keys Identified Mail (DKIM).
  • Domain-Based Message Authentication, Reporting & Conformance (DMARC).
  • Reverse DNS.

Berikut beberapa penjelasan singkat termasuk best practice untuk membangun standard proteksi dan memperbaiki reputasi serta email integrity di email system yang kita bangun. Nah best practicenya baru mengacu pada platform zimbra nih hehe...

Sender Policy Framework (SPF)
Sender policy framework adalah sebuah email validation system yang sebenernya di desain untuk mencegah spoofing. Cara kerja SPF cukup sederhana yaitu SPF akan melakukan verifikasi Source IP dari email yang dikirim lalu mencocokannya dengan DNS TXT record menggunakan SPF content.
Dibawah ini kira-kira merupakan flow gimana kira-kira SPF bekerja.


Penjelasan :
Nah kalo dari flow diatas terlihat bahwa email system yang menerima email akan mengecek Sender-ID Framework dari tiap-tiap email yang mereka terima dengan cara menanyakan SPF record si pengirim email ke DNS.  Nah hasilnya hanya ada dua yaitu Pass atau Fail, apabila pass maka email biasanya akan di redirect ke folder inbox penerima dan apabila fail maka email akan diredirect ke folder Junk/Quarantine bahkan yang lebih parahnya lagi bisa saja di drop.
Sebenernya ada juga status selain Pass dan Fail yaitu neutral. Kalo statusnya neutral ada beberapa kemungkinan bisa saja masih menunggu propagasi DNS atau memang sudah di konfigurasi namun namun memang si admin menginginkan implementasi SPF tanpa policy.
Apa dampaknya kalo kita enggak buat SPF di email system kita? Biasanya kalo si penerima memang agak strict ya email kita di anggap spam bahkan bisa aja di drop karna dianggap tidak trusted.

Konfigurasi SPF?
Setelah saya ceritain dulu konsep SPF biar paham jadi gak cuma bisa konfig doang hehe, maka selanjutnya kita masuk ke proses konfigurasi SPF. Konfigurasinya standardnya sih sebenernya mudah kok, mungkin untuk beberapa kasus yang custom baru sedikit lebih rumit cuma saya coba share yang standard yah..

Format
"v=spf1 a mx include:servermta.domain.com ~all"

Contoh
"v=spf1 a mx include:mail.example.com ~all"

Kalo agan pake WHM contohnya seperti dibawah ini.


Notes :
  • Saya merahin karna pake domain orang, yang saya merahin seharusnya adalah nama domain agan. Nah yang saya kasih tanda panah isi dengan server mta yang sudah di isi dengan A Record di DNS agan.
  • Sebagai catatan tambahan aja kalo masih gak ngerti ~all, -all, ?all, +all bisa liat tabel dibawah ini.

Nah kalo sudah selesai agan tinggal nunggu propagasi DNS paling lama 1-2 hari. 

Pengecekan SPF
Kalo propagasi DNS sudah selesai agan bisa test SPF internet seperti mxtoolbox.com disini. Setelah itu cari box yang SPF lalu masukan domain agan. Kalo sudah selesai seharusnya hasil testing akan seperti dibawah ini.

Dan apabila agan coba ngirim email ke google dan show original code maka SPF akan terlihat pass.




Domain Keys Identified Mail (DKIM)
Domain keys adalah salah satu metode security pada email untuk mengasosiasikan domain name dengan email yang dikirim. Dengan adanya DKIM maka ini memungkinkan adanya proses signature pada masing-masing email yang dikirim oleh si pengirim dengan metode enkripsi asymetric dengan saling berbagi informasi mengenai public keys dan private keys yang digunakan.

Coba agan perhatikan gambar dibawah ini :

Penjelasan :
Nah dari gambar diatas terlihat bahwa MTA si pengirim mempublish public keys di DNS public lalu ketika proses pengiriman email terjadi, maka si penerima akan menggunakan public keys yang ada di DNS untuk mencocokan apakah match atau tidak, apabila match maka akan tertera bahwa email yang dikirim signed-by domain si pengirim.

Konfigurasi DKIM?
Konfigurasi DKIM lebih sedikit rumit daripada SPF namun enggak susah kok. Langkah-langkahnya itu adalah sebagai berikut ini, saya contohkan generate dengan zimbra yah.
  • Masuk ke server lalu masuk lagi ke user zimbra setelah itu cek dengan command ini "/opt/zimbra/libexec/zmdkimkeyutil -q -d contoh.com"
  • Kalau belum ada saatnya buat dengan format seperti dibawah ini :
    /opt/zimbra/libexec/zmdkimkeyutil -a -d example.com -s namadkim
  • Setelah selesai di generate maka akan muncul public key yang bisa di publish di DNS, agan bisa copas public key tersebut lalu buat lagi TXT record di DNS agan. Sebagai contoh hasil generate public key seperti dibawah ini :

    "v=DKIM1; k=rsa; "  "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2c4zVBYQtUsoeEGiqYKEZ7JLU3cbuQCOYvr+IDQJPOQjVlsSTapsu+4yUZ6OJ41RmzYQooneL+We1MMYDmGMAQmHNQAAfhoudLN/+aSC7ggo+rTAd4ipwMujgySB8SsKzKBeAFLth/WteAOrVMIfMrmNgKj0pLUfQp1sVpa1WGQIDAQAB"

    Hapus tanda-tanda petik diatas lalu coba copas ke website tools checker dkim di disini.
    Kalo hasilnya sudah seperti pada screenshot dibawah ini maka berarti DKIM untuk domain agan sudah berjalan.

  • Setelah selesai di cek copas key record yang sudah valid tsb ke WHM atau manajemen tools yang agan gunakan, buat TXT record yah. Sebagai contoh seperti dibawah ini :

Pengecekan DKIM
Untuk mengecek DKIM agan sudah berjalan atau belum agan bisa cek di link yang sama di dkimcore disini. Lalu masukan nama dkim yang agan generete tadi lalu domain seperti dikotak merah ini.


Kalo hasilnya sudah valid seperti gambar dibawah berarti DKIM anda sudah terecord di DNS.



Tinggal lanjutkan coba kirim email dari email agan ke google lalu cek parameter ini dan show original code, apabila sudah sesuai seperti dibawah ini harusnya DKIM sudah berjalan.

Show Original Code

Show Arrow Details


Keliatan kalo di original code bahwa dkim agan statusnya PASS dan di arrow details bisa dilihat signed-by nah yg garis merah seharusnya nama domain agan.
Kalo seperti ini lebih reliable dan trusted kan? hehe


Domain-Based Message Authentication, Reporting & Conformance (DMARC)
Selanjutnya kita membahas DMARC, sebenernya cara kerjanya hampir sama seperti dengan SPF namun metodenya dan fungsinya sedikit berbeda. Meskipun begitu nampaknya saat ini DMARC merupakan salah satu komponen penting juga yang kudu dikonfigurasi pada email system kita yang sudah established untuk meningkatkan email integrity.
DMARC sendiri adalah sebuah spesifikasi teknis yang dibuat oleh sekelompok organisasi yang ingin membantu mengurangi potensi penyalahgunaan email dengan metode email authentication protocol. Coba perhatikan cara kerjanya pada gambar dibawah ini.


Penjelasan :
DMARC melakukan standarisasi dengan mendeteksi bagaimana penerima email menjalankan autentikasi menggunakan mekanisme well-known SPF & DKIM yang telah ada di record DNS. Hal ini biasanya akan berdampak pada user experience pengirim email tersebut karna email yg dikirim akan menerima "Consistent Authentication Results" dari setiap penerima email mereka yg juga menjalankan mekanisme DMARC, yang jelas dengan menggunakan mekanisme ini komunikasi email yang terjadi antara pengirim dan penerima akan menjadi lebih reliable.

Konfigurasi DMARC?
Untuk melakukan konfigurasi DMARC sebaiknya lakukan dulu konfigurasi SPF dan DKIM di email system agan. Setelah itu agan bisa generate record untuk DMARC disini.

Nah coba isi parameter seperti contoh dibawah ini, lalu kalo sudah selesai tekan tombol "Get DMARC Record". Nama domain example.com ganti dengan nama domain masing-masing yah.


Dari policy diatas itu saya tentukan apabila status email paket fail maka akan di redirect ke quaratine. Sebenernya agan bisa juga pilih policy yang reject kalo mau lebih strict sih, cuma kekurangannya kita jadi gak bisa analisa aja itu email spam ato bukan karna langsung di drop emailnya. #CMIIW

Setelah dapet DMARC Record seperti gambar dibawah ini agan bisa masukan record yang ada di kotak merah dari gambar dibawah ini ke DNS agan, seperti biasa buat TXT record.


Copas record yang sudah di generate dari link diatas yg ada di kotak merah tsb lalu buat TXT Record di WHM ato cPanel ato DNS managemen agan lah pokoke seperti contoh gambar dibawah ini.


Kalo sudah selesai ketik OK/Apply Modification.

Pengecekan DMARC
Kamu bisa cek dari mxtoolbox.com disini lalu cari kotak box DMARC dan masukan domain agan, atau bisa juga di dmarcian.com disini dengan cara yang sama tinggal masukan domain agan. Sebagai contoh saya masukan domain google.com di mxtoolbox kalo domain agan yang dimasukan hasilnya sudah sesuai sama seperti gambar dibawah ini maka seharusnya mekanisme DMARC sudah berjalan di email system agan.


Agan bisa cek juga dengan kirim email ke gmail misalnya lalu di "Show Original Code" cari parameter DMARC, apabila sudah PASS seperti gambar dibawah ini artinya sudah berjalan nih mekanisme DMARC di email system agan.



Reverse & Resolve DNS
Sepertinya banyak engineer dan sysadmin yang kurang aware juga untuk hal yang satu ini, di beberapa email system yang sudah strict banged ada loh biasanya yang mereject pengirim email yang tidak memiliki Reverse DNS yang konsisten.
Gambaran proses untuk Resolve DNS bisa dilihat dari gambar dibawah ini.


Setelah liat gambar diatas harusnya dapet yah gambarannya? Kalo Resolution DNS itu menentukan IP Address yang diasosiasikan ke domain name, sedangkan kalo Reverse DNS itu sebaliknya Domain yang diasosiasikan ke IP Address.

Konfigurasi Reverse DNS?
Cara satu-satunya itu cuma bisa minta tolong ISP di tempat dimana agan berlangganan. Bilang aja ke mereka kalo kita punya IP Public pengen bikin PTR Record yang dipointing ke domain A dengan IP Public yang digunakan B, sesimple itu kok hehe.
Setelah itu jangan lupa edit SMTP Helo agan, kalo di zimbra bisa menggunakan command dibawah ini.

Perhatikan bahwa mail.example.com ganti dengan nama mx record yg digunakan di DNS agan yah.

Version 8.0.X
zmlocalconfig -e postfix_smtpd_banner="mail.example.com"
zmcontrol restart

Version 8.5 keatas
zmprov ms  `zmhostname` zimbraMtaSmtpdBanner mail.example.com
zmcontrol restart

Pengecekan Reverse DNS
Caranya gampang gan, tinggal pake mxtoolbox.com aja menggunakan link disini. Lalu agan tinggal masukan IP Address yang agan gunakan sebagai mail server agan yg juga digunakan sebagai MX Record. Kalo sudah sesuai artinya sudah tidak ada issue lagi dan dengan cara ini pastinya email integrity dari email system kita akan naik di pihak penerima email.


Done! 
Lumayan panjang yah? Namanya juga catetan pribadi, semoga bermanfaat terutama buat diri saya pribadi hehehe.....

7 comments:

  1. SAya ingin bertanya tentang PTR record.
    Bila flownya seperti ini,

    mail.server.com -< PTR
    server.com -< menggunakan smtp mail.server.com
    servertambahan.com -< menggunakna smtp mail.server.com

    Bagaimana caranya email yang dikirim dari server.com dan servertambahan.com tidak masuk ke dalam spam?

    ReplyDelete
    Replies
    1. Halo mas, ptr record tidak ngejamin email yg dikirim tidak msk ke spam

      Makanya saya jabarin teknik2 diatas seperti SPF, DKIM, DMARC supaya email2 yg dikirim sebisa mungkin tidak teridentifikasi sbg spam oleh si receiver.


      Seperti itu yang saya tau.

      Delete
  2. Halo mas arif sy mo tanya.
    Kami selalu tidak bisa terima email dari domain tertentu benline.co.id. mereka selalu menerima email error balasan seperti dibawah ini.
    Apakah ini ada hubungannya dengan setting spf?
    Apakah masalah ini ada dipihak pengirim ato penerima?

    Terima kasih sebelumnya.

    Subject: Undelivered Mail Returned to Sender

    This is the mail system at host relay.mailchannels.net.

    I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below.

    For further assistance, please send mail to postmaster.

    If you do so, please include this problem report. You can delete your own text from the attached returned message.

    The mail system

    : host spamex01.webvis.net[202.157.166.240] said:
    550
    23.83.210.16 is not allowed to send mail from benline.co.id. Please see

    http://www.openspf.net/Why?scope=mfrom;identity=bat-portservices@benline.co.
    id;ip=23.83.210.16
    (in reply to end of DATA command)

    ReplyDelete
    Replies
    1. halo mas,

      Kalo saya liat itu gak ada hubungannya dengan spf sih.
      Sepertinya yang bermasalah smtp si sender yang gak bisa deliver mailnya ke smtp domain bapak.

      Kemungkinannya ada dua sih.
      1. smtp sender bermasalah
      2. ada rules hardening di smtp receiver

      mungkin bisa di cek ke tim terkait yang menangani email server bapak/ibu

      thx

      Delete
  3. nanya dong gan,, klo saya gak punya DNS Internal apakah configurasi ini tetap berlaku utk Zimbra??

    ReplyDelete
  4. Tanya Gan, itu pas mau bikin DMARC itu masukin emailnya pake domain xsample.com ganti dengan domain saya, apa saya harus bikin dulu email dmarc@domainsaya.com atau cuma fake email doang?
    terimaksih sebelumnya

    ReplyDelete
  5. gan klo "Reverse DNS does not contain the hostname" gimana gan ?

    ReplyDelete