ClamSMTP is an SMTP filter that allows you to check for viruses using the ClamAV anti-virus software. It accepts SMTP connections and forwards the SMTP commands and responses to another SMTP server. The 'DATA' email body is intercepted and scanned before forwarding. ClamSMTP aims to be lightweight, reliable, and simple rather than have a myriad of options. It's written in C without major dependencies. If you need more options then you could use something big like AMaViS which is written in PERL and can do almost anything. ClamSMTP can also be used as a transparent proxy to filter an entire network's SMTP traffic at the router. Here's how to configure it as a Postfix Content Filter in indonesia language. Pusing dengan configurasi amavisd ? intro...Banyak sudah aplikasi yang diciptakan untuk memeriksa email pada level smtpd, baik untuk spam atau virus. Sudah banyak tutorial (Indonesia) mengenai pemakaian postfix dan antivirus. Rata-rata yang dipakai sebagai interface antara Postfix dan ClamAV adalah amavisd-new. Penulis sendiri juga memakai AmavisD sekian tahun, tutorial pemakaian-nya pun ada di situs ini. Dan puas dengan kinekerja AmavisD, rasanya tidak ada keluhan yang perlu di ungkap. Hanya saja diserver -penulis- yang terpakai cuma untuk scanning virus, sedangkan untuk spam tidak. Hal ini dikarenakan AmavisD-new hanya mendukung SpamAssassin. Sedangkan penulis memakai Bogofilter. Berdasarkan pertimbangan diatas, maka dipilih mempergunakan ClamSMTP sebagai pengganti amavisd-new. Minus-nya -mungkin-, tidak ada e-mail alert, tidak bisa memforward e-mail bervirus ke user tertentu (viruslover) dan juga belum support LMTP. |
Tutorial berikut ini dikerjakan dengan mempergunakan OS Linux TSL 2.0 cloud, dengan processor PIII.
ClamAV diasumsikan sudah terinstall dan bekerja dengan normal. Untuk menginstall ClamAV dapat dibaca di sini.
Untuk distro yang lain bisa menyesuikan dengan letak file yang dibutuhkan, demikian juga untuk tipe processor yang lain.
ClamSMTP dapat di donlot di http://memberwebs.com/nielsen/software/clamsmtp/
Pada saat artikel dibuat, versi terbaru adalah 1.0
Extract dan masuk kedalam direktori clamsmtpd
root@opera adi# tar xzpf clamsmtp-1.0.tar.gz root@opera adi# cd clamsmtp-1.0
Lakukan konfigurasi awal untuk menyesuaikan OS dan library yang tersedia.
Pada tahap ini dapat pula dilakukan optimasi file binary, misal diset untuk i686.
File konfigurasi-nya juga akan diletak-kan didirektori /etc
root@opera clamsmtp-1.0# CFLAGS="-O3 -march=i686 -mcpu=i686 \ -funroll-loops -fomit-frame-pointer" \ ./configure \ --sysconfdir=/etc \ --bindir=/usr/bin \ --sbindir=/usr/sbin \ --mandir=/usr/share/man
Bila tiidak ada pesan error, maka dapat langsung dikompile (make) untuk membuat file binary.
Bila pada saat kompile tidak terjadi masalah bisa dilanjutkan dengan dicheck dan langsung di-install.
Error biasanya terjadi bila ada file library yang dibutuhkan belum tersedia.
Bila hal ini terjadi, penuhi/install library yang dimaksud dan ulangi perintah configure diatas.
root@opera clamsmtp-1.0# make root@opera clamsmtp-1.0# make check root@opera clamsmtp-1.0# make install root@opera clamsmtp-1.0# strip /usr/sbin/clamsmtpd
Sebelum aplikasi dapat diuji-coba, kopikan terlebih dahulu file konfigurasi (di direktori doc) ke direktori /etc.
root@opera clamsmtp-1.0# cp doc/clamsmtpd.conf /etc/
Edit file clamsmtpd.conf, sesuikan dengan kebutuhan.
root@opera clamsmtp-1.0# vi /etc/clamsmtpd.conf
Baris berikut ini perlu diperhatikan, agar bisa berkomunikasi dengan ClamAV
#ClamAddress: /var/run/clamav/clamd Buka/hilangkan tanda #. Dan sesuaikan dengan letak socket clamav yang ada pada file konfigurasi clamav. Misal pada configurasi penulis: ClamAddress: /var/clamav/clamd
Baris berkutnya bersifat opsional, boleh tidak dirubah
#Quarantine: off Secara default e-mail bervirus akan dibuang. Bila butuh untuk mengkarantina atau koleksi, hilangkan tanda # dan ganti on dengan off menjadi on. Default direktori karantina /tmp Quarantine: on
#User: clamav Default clamSMTP akan dijalankan sebagai user root. Untuk alasan keamanan sistem, buat user clamav dan hilangkan tanda #. User: clamav
Pada saat ini aplikasi clamSMTP belum perlu dijalankan, masih perlu mengedit konfigurasi postfix dan mencoba clamSMTP pada mode debug
Sekarang edit file main.cf postfix untuk membelok-kan aliran menuju clamSMTP.
root@opera root# vi /etc/postfix/main.cf
pada baris terakhir tambahkan
content_filter = scan:127.0.0.1:10025 receive_override_options = no_address_mappings
Edit file master.cf, lalu restart postfix
root@opera clamsmtp-1.0# vi /etc/postfix/master.cfPada baris paling bawah, tambahkan
scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes 127.0.0.1:10026 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o smtpd_authorized_xforward_hosts=127.0.0.0/8
Dan reload/restart ulang postfix untuk membaca perubahan
root@opera clamsmtp-1.0# service postfix restart
Sebelum aliran dari postfix (file main.cf) dibelokkan menuju clamSMTP, dicoba dahulu dengan debug. Jalankan perintah dari konsole 1.
root@opera clamsmtp-1.0# /usr/sbin/clamsmtpd -d 4 clamsmtpd: read config file: /etc/clamsmtpd.conf clamsmtpd: parsed option: OutAddress: 10026 clamsmtpd: parsed option: ClamAddress: /var/clamav/clamd clamsmtpd: parsed option: ScanHeader: X-AV-Checked: ClamAV using ClamSMTP clamsmtpd: parsed option: TempDirectory: /tmp clamsmtpd: parsed option: Quarantine: on clamsmtpd: parsed option: User: clamav clamsmtpd: starting up... clamsmtpd: switched to user clamav (uid 503, gid 500) clamsmtpd: created socket: 10025 clamsmtpd: accepting connections
Buka konsole baru dan jalankan netstat dari konsole baru tersebut (konsole 2).
Pastikan port 10025 dan 10026 terbuka dan siap menerima request
root@opera clamsmtp-1.0# netstat -tan Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:10025 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:10026 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
Dari konsole 2, coba lakukan perintah telnet dan lihat progress-nya di konsole satu.
root@opera root# telnet 127.0.0.1 10025 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 smtp.passthru quit 221 Bye Connection closed by foreign host.
Hasil di konsole 1
clamsmtpd: 100000: processing 4 on thread 4002 clamsmtpd: 100000: accepted connection from: 127.0.0.1 clamsmtpd: 100000: SERVER connected to: 127.0.0.1:10026 clamsmtpd: 100000: SERVER < 220 opera.clamsmtp.com ESMTP Postfix clamsmtpd: 100000: intercepting initial response clamsmtpd: 100000: CLIENT > 220 smtp.passthru clamsmtpd: created thread for connection clamsmtpd: 100000: CLIENT < quit clamsmtpd: 100000: SERVER > quit clamsmtpd: 100000: SERVER < 221 Bye clamsmtpd: 100000: CLIENT > 221 Bye clamsmtpd: 100000: CLIENT connection closed clamsmtpd: 100000: SERVER connection closed
Bila percobaan menunjukkan hasil yang sama, bisa diasumsikan bahwa clamSMTP berfungsi baik
Matikan clamSMTP mode debug yang ada dikonsole 1 (dengan ^c).
Agar service clamSMTP dapat langsung berfungsi pada saat server boot/restart maka perlu script.
Cara yang paling mudah dengan menulikan ke dalam file rc.local
root@opera clamsmtp-1.0# echo "/usr/sbin/clamsmtpd" >> /etc/rc.local
Atau, bila ingin service dikenali di sistem init linux (sehingga pada saat booting terlihat progress-nya), silakan ambil file init script di [situs] clamSMTP.
Untuk sementara hanya ada untuk versi RedHat/Fedora dan Mandrake.
Karena TSL 2.0 dibangun berdasarkan script RH 7.2 maka yang dipilih init script RedHat/Fedora.
root@opera clamsmtp-1.0# wget http://memberwebs.com/nielsen/software/clamsmtp/contrib/clamsmtpd root@opera clamsmtp-1.0# mv clamsmtpd /etc/init.d/clamsmtpd root@opera clamsmtp-1.0# chmod 755 /etc/init.d/clamsmtpd root@opera clamsmtp-1.0# vi /etc/init.d/clamsmtpd
Edit file init clamSMTP dan pastikan letak direktori dan file-file yang diperlukan sudah sesuai.
Setelah itu daftarkan kedalam sistem init dan service siap digunakan.
root@opera root# chkconfig --add clamsmtpd root@opera root# chkconfig --list clamsmtpd clamsmtpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
root@opera root# chkconfig clamsmtpd on root@opera root# chkconfig --list clamsmtpd clamsmtpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Service clamsmtpd siap dijalankan pada saat sistem booting pada runlevel 2, 3, 4 dan 5.
Dan jalankan sekarang.
root@opera root# service clamsmtpd start Starting ClamSmtpd: [ OK ]
Coba dengan email biasa (tanpa virus), dan lihat output log dari postfix.
root@opera root# tail -f /var/log/messages Oct 27 14:16:09 opera postfix/smtpd[18496]: connect from adi.clamsmtp.com[192.168.1.250] Oct 27 14:16:09 opera postfix/smtpd[18496]: 161452FA5: client=adi.clamsmtp.com[192.168.1.250] Oct 27 14:16:09 opera postfix/cleanup[18497]: 161452FA5: message-id=<00a801c4bbec$3d9a87f0$fa01a8c0@redkurawa> Oct 27 14:16:09 opera postfix/qmgr[18459]: 161452FA5: from=, size=621, nrcpt=1 (queue active) Oct 27 14:16:09 opera postfix/smtpd[18496]: disconnect from adi.clamsmtp.com[192.168.1.250] Oct 27 14:16:09 opera clamsmtpd: 100004: accepted connection from: 127.0.0.1 Oct 27 14:16:09 opera postfix/smtpd[18500]: connect from localhost.localdomain[127.0.0.1] Oct 27 14:16:09 opera postfix/smtpd[18500]: 3E2942FB3: client=localhost.localdomain[127.0.0.1] Oct 27 14:16:09 opera clamd[18501]: /tmp/clamsmtpd.XZt2T0: OK Oct 27 14:16:09 opera postfix/cleanup[18497]: 3E2942FB3: message-id=<00a801c4bbec$3d9a87f0$fa01a8c0@redkurawa> Oct 27 14:16:09 opera postfix/qmgr[18459]: 3E2942FB3: from=<[email protected]>, size=852, nrcpt=1 (queue active) Oct 27 14:16:09 opera clamsmtpd: 100004: [email protected], [email protected], status=CLEAN Oct 27 14:16:09 opera postfix/smtp[18498]: 161452FA5: to= , relay=127.0.0.1[127.0.0.1], delay=0, status=sent (250 Ok: queued as 3E2942FB3) Oct 27 14:16:09 opera postfix/smtpd[18500]: disconnect from localhost.localdomain[127.0.0.1] Oct 27 14:16:09 opera postfix/local[18502]: 3E2942FB3: to= , relay=local, delay=0, status=sent ("|/usr/bin/ procmail")
Sedangkan bila e-mail bervirus.
.... Oct 27 14:33:46 opera postfix/smtpd[18622]: 2828C2FB4: client=localhost.localdomain[127.0.0.1] Oct 27 14:33:46 opera clamd[18634]: /tmp/clamsmtpd.7XincE: Eicar-Test-Signature FOUND Oct 27 14:33:46 opera clamsmtpd: 100011: quarantined virus file as: /tmp/virus.WM8UZR Oct 27 14:33:46 opera postfix/smtp[18619]: 0E77E2FA5: to=, relay=127.0.0.1[127.0.0.1], delay=0, status=sent (250 Virus Detected; Discarded Email) Oct 27 14:33:46 opera clamsmtpd: 100011: [email protected], [email protected], status=VIRUS:Eicar -Test-Signature Oct 27 14:33:46 opera postfix/smtpd[18622]: disconnect from localhost.localdomain[127.0.0.1] ....
Virus action adalah fasilitas baru yang berguna untuk melakukan suatu pekerjaan bila terdeteksi adanya virus dalam email.
Fasilitas ini mulai ada dari sejak versi 0.9. Contoh dari script virus action dapat diambil dari situs clamSMTP (file virus_action.sh), donlot file tersebut dan silakan edit beberapa bagian, hasilnya seperti contoh dibawah.
#!/bin/sh # A sample script for virus actions. When testing make sure # everything can run as the clamav (or relevant) user. file="/home/users/clamav/virus.log" dir="/home/users/clamav/quarantine/" exec 1>>$file exec 2>>$file # Add some fun log lines to the log file echo Sender $SENDER echo Recipients $RECIPIENTS echo Virus $VIRUS echo "-------------------------------------------------------" # Move the virus file to another directory # This only works if Quarantine is enabled if [ -n "$EMAIL" ]; then mv "$EMAIL" "$dir" fi
Selanjutnya edit file clamsmtp.conf, tambahkan, contoh disini file script diletak-kan di direktori /etc.
Ubah akses mode-nya menjadi execute.
root@opera root# chown clamav.clamav virus_action.sh root@opera root# chmod 700 virus_action.sh
Tambahkan opsi VirusAction di clamsmtp.conf.
VirusAction: /etc/virus_action.sh
Jangan lupa restart kembali service clamsmtpd.
root@opera root# service clamsmtpd restart Stopping ClamSmtpd: [ OK ] Starting ClamSmtpd: [ OK ]