Memindai virus di setiap email: instalasi ClamAV dengan update signature freshclam, integrasi sebagai content filter lewat Amavis, mengalirkan mail Postfix ke antrian filter, serta membatasi serangan dengan rate limiting dan batas ukuran pesan.

SpamAssassin di episode 14 menangani sampah. Tapi ada ancaman yang lebih serius dari sekadar sampah: malware — lampiran berbahaya yang dikirim spammer dan penyerang. Episode ini memasang ClamAV sebagai mesin antivirus dan Amavis sebagai jembatan yang memindai setiap email.
Kita akan memasang ClamAV dengan signature yang diperbarui, menyusun Amavis sebagai content filter, mengalirkan email Postfix melewatinya, dan menutup dengan batas ukuran pesan serta rate limiting.
Email adalah salah satu vektor penyebaran malware paling efektif. Virus, trojan, dan ransomware sering tiba sebagai lampiran dengan nama yang menjebak. Mesin antivirus di server memindai isi email sebelum masuk mailbox — sehingga yang sampai ke pengguna sudah bersih.
Amavis (AMaViSd) adalah "pintu" yang mengorkestrasi: ia menerima email dari Postfix, menjalankan ClamAV untuk virus dan SpamAssassin untuk spam dalam satu alur, lalu mengembalikan hasilnya ke Postfix. Satu titik filter, banyak engine.
Pasang ClamAV dan komponen daemon:
sudo apt install -y clamav clamav-daemonSignature virus diperbarui oleh freshclam. Perbarui manual sekali sebelum memulai daemon:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclamCek status database dan versi:
clamscan --version
systemctl status clamav-daemon --no-pagerclamscan --version menampilkan versi mesin dan tanggal database. Uji pemindaian cepat dengan file contoh EICAR (string uji standar antivirus):
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.txt
clamscan /tmp/eicar.txtJika output menampilkan FOUND, ClamAV mendeteksi file uji — mesin bekerja.
Pasang dan sesuaikan Amavis:
sudo apt install -y amavisd-newKonfigurasi utama ada di /etc/amavis/conf.d/. Edit 50-user untuk menyesuaikan kebijakan organisasi:
@bypass_virus_checks_maps = (0);
@bypass_spam_checks_maps = (0);
$sa_tag_level_deflt = 2.0;
$sa_tag2_level_deflt = 5.0;
$sa_kill_level_deflt = 6.9;Maknanya: virus selalu diperiksa (0 = jangan bypass), spam mulai ditandai di skor 2.0, dianggap spam di 5.0, dan dihapus (killed) di 6.9. Amavis akan memanggil ClamAV lewat socket /var/run/clamav/clamd.ctl — pastikan keduanya berbicara dengan klien yang sama di 50-user:
$virus_scan_engine = 'clamav';Restart Amavis dan cek log:
sudo systemctl restart amavis
sudo journalctl -u amavis --since "1 minute ago"Postfix memakai pola content filter: email yang masuk diarahkan ke transport khusus yang menyerahkan ke Amavis, lalu hasilnya dikembalikan. Aktifkan di main.cf dan master.cf:
sudo postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'
sudo postconf -e 'receive_override_options = no_address_mappings'Definisikan transport smtp-amavis di master.cf:
sudo postconf -M smtp-amavis/unix='smtp-amavis unix - - n - 2 smtp'
sudo postconf -P smtp-amavis/unix/smtp_data_done_timeout=1200
sudo postconf -P smtp-amavis/unix/smtp_helo_timeout=60
sudo postfix reloadAlurnya menjadi: email masuk → Postfix (port 25) → content_filter → Amavis (10024) → ClamAV + SpamAssassin → kembali ke Postfix (10025) → LMTP → Maildir.
Info
Perhatikan port: Amavis mendengarkan di 10024 dan mengembalikan hasil ke Postfix di 10025. Kedua port ini tidak boleh dibuka ke publik — hanya antar proses di localhost. Firewall di episode 16 akan memastikannya.
Verifikasi alur dengan mengirim email uji dan membaca log:
echo "virus test" | mail -s "check" admin@example.com
sudo journalctl -u amavis --since "1 minute ago"Cari baris dengan Passed (bersih) atau Blocked (terinfeksi). Jika muncul Passed CLEAN, seluruh rantai filter bekerja.
Amavis memproses pesan di memori — pesan raksasa bisa menghabiskan resource. Batasi ukuran di Postfix:
sudo postconf -e 'message_size_limit = 25600000'
sudo postconf -e 'mailbox_size_limit = 0'
sudo postfix reloadmessage_size_limit = 25600000 membatasi pesan 25 MB. Amavis punya batasnya sendiri; samakan di 50-user:
$max_message_size = 25600000;Rate limiting melindungi dari banjir koneksi. Postfix punya built-in anvil yang mencatat koneksi per klien:
sudo postconf -e 'anvil_rate_time_unit = 60s'
sudo postconf -e 'smtpd_client_connection_rate_limit = 20'
sudo postfix reloadanvil_rate_time_unit dan smtpd_client_connection_rate_limit bekerja sama membatasi 20 koneksi per menit per klien — cukup untuk mail server normal, terlalu cepat untuk spammer.
Episode 15 selesai. Inti yang harus dibawa pulang:
freshclam memperbarui signature secara rutin.content_filter mengarahkan semua email lewat Amavis; port 10024/10025 hanya untuk localhost.message_size_limit dan $max_message_size mencegah pesan raksasa.anvil membatasi laju koneksi per klien.Setiap email kini melewati gerbang virus dan spam. Di episode 16 kita merapatkan benteng: Hardening & Protection dari Open Relay — firewall, fail2ban, dan memastikan Postfix tidak pernah menjadi relay terbuka. Sampai jumpa di episode 16!