Melawan spam di tiga lapisan: menolak IP terkenal lewat RBL/DNSBL di awal koneksi, memaksa server bercakap dengan helo dan identitas yang benar, lalu menilai isi email dengan SpamAssassin termasuk bayes learning dan greylisting untuk menekan spam masuk.

Mail server yang hidup di internet akan dibombardir spam dari menit pertama. Episodes sebelumnya sudah menyiapkan gerbang autentikasi; sekarang kita membangun pertahanan berlapis terhadap spam.
Strateginya berlapis tiga: RBL/DNSBL menolak IP terkenal di awal koneksi, SpamAssassin menilai isi email dengan skor berbasis aturan, dan greylisting memperlambat sender tidak sabar yang ciri khasnya spammer. Kita juga akan belajar membuat SpamAssassin "belajar" dari email yang kalian tandai.
Spam datang dari berbagai sumber: IP yang dikenal, botnet, domain baru, dan konten yang menipu. Tidak ada satu filter yang menangkap semuanya. Konsep defense in depth artinya setiap lapisan menyaring sebagian:
Makin awal sebuah keputusan diambil, makin hemat resource — jadi lapisan pertama selalu yang paling murah.
RBL (Realtime Blackhole List) / DNSBL (DNS-based Blackhole List) adalah daftar IP atau domain yang dikenal mengirim spam. Penolakan dilakukan dengan query DNS sederhana ke server daftar, misalnya Zen Spamhaus. Di Postfix, pasang lewat smtpd_recipient_restrictions:
sudo postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client zen.spamhaus.org, permit'
sudo postfix reloadreject_rbl_client zen.spamhaus.org menolak koneksi dari IP yang terdaftar di daftar tersebut. Perhatikan urutan: setelah penerima divalidasi, barulah RBL diperiksa — urutan ini mencegah IP internal (permit_mynetworks) terkena RBL.
Uji bahwa RBL bekerja:
postmap -q 127.0.0.2 zen.spamhaus.org127.0.0.2 adalah IP uji yang selalu terdaftar di Zen; jika query mengembalikan nilai, koneksi server DNSBL berfungsi.
SpamAssassin meneliti header dan body email, lalu memberi skor berdasarkan ratusan aturan. Email dengan skor di atas ambang (biasanya 5.0) ditandai sebagai spam. Instal dan aktifkan:
sudo apt install -y spamassassin
sudo systemctl enable spamassassinSpamAssassin terintegrasi dengan Postfix melalui salah satu dari dua cara: lewat milter, atau lewat content filter (biasanya Amavis — episode 15). Untuk sekarang, konfigurasi inti ada di /etc/spamassassin/local.cf:
required_score 5.0
rewrite_header Subject [SPAM]
report_safe 0required_score — ambang skor untuk dianggap spam.rewrite_header — menandai subjek agar terlihat.report_safe 0 — kirim email asli dengan header tambahan, bukan laporan terpisah.Uji SpamAssassin dengan contoh pesan:
spamassassin -t < /tmp/contoh-email.txt | grep -i scoreKeunggulan SpamAssassin adalah bayes: ia belajar dari email yang kalian tandai. Semakin sering dilatih, semakin akurat skornya. Latih dengan sa-learn:
sa-learn --spam /var/mail/vhosts/example.com/admin/Maildir/.Junk/cur/
sa-learn --ham /var/mail/vhosts/example.com/admin/Maildir/cur/Setiap kali pengguna menandai email sebagai spam (--spam) atau bukan (--ham), tambahkan ke korpus. Pilih folder yang tepat — di Roundcube, folder Spam biasanya bernama .Junk atau Spam.
Greylisting menolak sementara email dari server yang tidak dikenal (triplet sender-IP/pengirim/penerima) dan meminta pengiriman ulang beberapa menit kemudian. Server email sah akan mencoba lagi; spammer otomatis biasanya tidak. Pasang Postgrey:
sudo apt install -y postgreyLalu tambahkan ke restrictions:
sudo postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023, permit'
sudo postfix reloadcheck_policy_service inet:127.0.0.1:10023 menghubungi Postgrey untuk keputusan triplet. Koneksi pertama tertunda beberapa menit; sender yang sah mencoba lagi, spammer yang massal tidak.
Tip
Jangan greylist sender lokal — tambahkan skip untuk subnet internal. Dan ingat, greylisting menambah latensi; untuk komunikasi kritis yang butuh respons instan, pertimbangkan whitelist domain atau IP tertentu.
Gabungan keempat lapisan dijadikan satu kebijakan yang koheren:
sudo postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_recipient_domain, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023, permit'
sudo postconf -e 'smtpd_helo_required = yes'
sudo postfix reloadPerhatikan tambahan reject_unknown_recipient_domain (menolak domain tujuan yang tidak me-resolve) dan smtpd_helo_required (memaksa klien bercakap dengan helo). Pantau dampaknya di log — episode 19 akan membahas cara membaca dampak setiap lapisan.
Episode 14 selesai. Inti yang harus dibawa pulang:
reject_rbl_client zen.spamhaus.org menolak IP terkenal di gerbang.sa-learn.smtpd_recipient_restrictions menentukan efektivitas dan kinerja.Spam sudah dilawan di tiga lapis. Di episode 15 kita menambah lapisan pamungkas: Antivirus & Content Filtering — ClamAV dan Amavis — memindai setiap email dari virus dan malware sebelum masuk mailbox. Sampai jumpa di episode 15!