Belajar Mailserver - Hardening & Protection dari Open Relay
Episode 16 of 23

Belajar Mailserver - Hardening & Protection dari Open Relay

Memperkuat pertahanan mail server: memastikan Postfix bukan open relay lewat smtpd_relay_restrictions, menguji dengan swaks dari luar, membatasi firewall hanya pada port yang dibutuhkan, memasang fail2ban untuk brute force, serta menegakkan helo dan identitas klien.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Setelah fitur lengkap terpasang, saatnya mengunci benteng. Dua ancaman yang paling sering menimpa mail server yang kurang dijaga: menjadi open relay (dimanfaatkan spammer sebagai pengirim) dan brute force (serangan berulang pada login). Episode ini menutup keduanya.

Kita akan memastikan kebijakan relay Postfix benar, mengujinya dari luar, membatasi firewall hanya pada port yang dibutuhkan, memasang fail2ban, dan menegakkan aturan identitas klien. Di akhir episode, server kalian tahan terhadap uji open relay standar.

Apa itu Open Relay

Open relay adalah mail server yang bersedia meneruskan email dari siapa pun ke siapa pun tanpa autentikasi. Bagi spammer, itu adalah mimpi: mereka bisa mengirim massal tanpa jejak. Bagi pemilik server, itu adalah bencana — IP masuk blacklist, reputasi hancur, dan email sah ikut tertolak.

Postfix secara default menolak relay untuk domain yang tidak dikenal, tapi kebijakan itu bisa salah dikonfigurasi — misalnya dengan mynetworks yang terlalu lebar. Itulah mengapa smtpd_relay_restrictions ada sebagai garis pertahanan eksplisit.

smtpd_relay_restrictions: Garis Baku

Sejak Postfix 2.10, kebijakan relay dipisah dari kebijakan penerima lewat smtpd_relay_restrictions. Aturan bakunya:

Tetapkan kebijakan relay yang aman
sudo postconf -e 'smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination'
sudo postfix reload

Maknanya sederhana:

  • permit_mynetworks — jaringan tepercaya boleh relay.
  • permit_sasl_authenticated — klien terautentikasi (via submission) boleh relay.
  • defer_unauth_destination — sisanya ditolak sementara (4xx), kecuali tujuan adalah domain yang kita layani.

Cek nilai aktifnya:

Lihat kebijakan relay aktif
postconf smtpd_relay_restrictions smtpd_recipient_restrictions

Kedua parameter harus tampil seperti yang diharapkan — perbedaan di antara keduanya sering menjadi sumber open relay yang tidak disengaja.

Menguji dari Luar dengan swaks

Kebijakan tidak berarti sampai diuji dari luar server. swaks bisa mensimulasikan percobaan relay:

Uji relay ke domain lain
swaks --server mail.example.com --from attacker@evil.com \
  --to victim@other-domain.com

Jika server kalian sehat, output menampilkan penolakan seperti 554 5.7.1 Relay access denied. Uji juga dua skenario sah:

  • Relay lokal--to admin@example.com harus diterima (domain kita).
  • Relay terautentikasi--auth-user admin@example.com --tls harus diterima.

Danger

Ulangi pengujian dari IP publik, bukan dari dalam mynetworks. Uji dari localhost akan selalu lulus karena 127.0.0.0/8 ada di mynetworks — bukan bukti server aman. Jalankan dari mesin lain atau via --ehlo dengan alamat berbeda.

Untuk audit massal, tools online seperti MXToolbox menyediakan uji open relay otomatis. Jalankan setelah setiap perubahan kebijakan relay.

Firewall: Hanya Port yang Dibutuhkan

Prinsipnya: buka sekecil mungkin, tutup sisanya. Mail server publik butuh empat port keluar masuk: 25, 587, 465, 993 (plus 143/110/995 jika dibutuhkan, dan 443 untuk webmail).

Dengan ufw:

Buka hanya port mail
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 465/tcp
sudo ufw allow 993/tcp
sudo ufw default deny incoming
sudo ufw enable

Catatan penting: port 25 hanya dari internet (untuk MTA lain), sedangkan IMAP boleh dibatasi ke jaringan internal jika webmail sudah memadai. Verifikasi aturan:

Tampilkan aturan firewall
sudo ufw status verbose

Jika kalian memakai nftables atau firewalld, prinsipnya sama — hanya sintaks yang berbeda. Yang penting: tidak ada port filter (10024/10025), database, atau SSH yang terbuka ke publik tanpa alasan.

fail2ban untuk Brute Force

Login SMTP dan IMAP adalah sasaran brute force. fail2ban memantau log dan memblokir IP yang gagal berulang kali. Buat jail untuk Postfix dan Dovecot di /etc/fail2ban/jail.local:

plaintext
[postfix-sasl]
enabled = true
port = smtp,submission,smtps
logpath = /var/log/mail.log
 
[dovecot]
enabled = true
port = imap,imaps,pop3,pop3s
logpath = /var/log/mail.log

Restart dan periksa status:

Restart fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status

fail2ban-client status postfix-sasl menampilkan jumlah IP yang sedang diblokir. Sesuaikan maxretry dan bantime sesuai kebijakan — misalnya 5 percobaan dalam 10 menit menghasilkan ban 1 jam.

Menegakkan Identitas Klien

Beberapa parameter smtpd_* memperketat siapa yang bisa bercakap dengan server:

Perketat aturan helo dan identitas
sudo postconf -e 'smtpd_helo_required = yes'
sudo postconf -e 'smtpd_helo_restrictions = permit_mynetworks, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname'
sudo postconf -e 'smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain'
sudo postfix reload
  • smtpd_helo_required — setiap klien wajib mengirim helo.
  • reject_invalid_helo_hostname — helo harus hostname yang valid.
  • reject_unknown_sender_domain — domain pengirim harus me-resolve.

Kombinasi ini menolak banyak bot spam yang malas meniru protokol. Tambahkan smtpd_data_restrictions untuk menolak baris yang tidak sesuai spesifikasi.

Audit Keamanan Rutin

Hardening bukan satu kali jalan. Bentuk ritual berkala:

  • Uji open relay dari luar setiap bulan.
  • fail2ban-client status untuk melihat tren serangan.
  • journalctl -u postfix -u dovecot --since "24 hours ago" | grep -iE "reject|error" untuk melihat pola penolakan.
  • Perbarui paket keamanan: sudo apt update && sudo apt upgrade -y.

Tip

Simpan postconf -n dan doveconf -n sebagai "baseline" setelah semua hardening. Saat terjadi masalah di kemudian hari, kalian bisa membandingkan konfigurasi aktif dengan baseline ini dengan cepat.

Penutup

Episode 16 selesai. Inti yang harus dibawa pulang:

  • smtpd_relay_restrictions membatasi relay hanya untuk mynetworks dan klien terautentikasi.
  • Uji open relay harus dilakukan dari IP publik, bukan localhost.
  • Firewall hanya membuka port 25, 587, 465, 993 (dan yang benar-benar dibutuhkan).
  • fail2ban memblokir brute force dengan memantau log Postfix dan Dovecot.
  • smtpd_helo_* dan reject_unknown_sender_domain menolak bot yang malas.

Benteng sudah terkunci. Di episode 17 kita membangun identitas: DKIM Signing (OpenDKIM), SPF Alignment & DMARC — menandatangani setiap email keluar dan menegakkan kebijakan autentikasi hingga reject. Sampai jumpa di episode 17!