creation date: 27/10/2004 by

Postfix-ClamAV-ClamSMTP

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 ?
atau malas install/upgrade module perl untuk amavis ?
atau pusing amavisd tidak kunjung jalan ?
Ini solusi alternatif !!!

intro...

Banyak sudah aplikasi yang diciptakan untuk memeriksa email pada level smtpd, baik untuk spam atau virus.
Postfix sebagai mail server sangat mudah untuk di konfigurasi sesuai dengan kebutuhan user. Selain itu penambahan aplikasi-aplikasi lain yang bersifat "plug-in" juga mudah, dengan memberikan opsi content-filter.
Sedangkan untuk aplikasi antivirus, pilihan utama yang dipakai adalah ClamAV. ClamAV sudah terbukti handal untuk memeriksa muatan-muatan virus yang ada pada email. Asal syarat update virus-dat terpenuhi, dapat dipastikan network akan bebas dari permasalahan email bervirus.

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.
Selain itu karena AmavisD-new dibangun diatas bahasa perl, maka unjuk kerja-nya tidak akan secepat aplikasi yang dikompile langsung menjadi file binary yang siap di eksekusi.

Berdasarkan pertimbangan diatas, maka dipilih mempergunakan ClamSMTP sebagai pengganti amavisd-new.
Binary ClamSMTP kecil, lightweight dan simple. File konfigurasinya pun mudah untuk dipahami daripada amavisd.conf, dan secara default tidak akan mengirim email notifikasi ke sender . Pada waktu membangun-pun tidak direpotkan untuk melengkapi file modul perl, yang terkadang harus dilangsung didonlot dari internet.
Dan yang pasti, waktu untuk memproses/scanning email dirasakan lebih cepat.

Minus-nya :( -mungkin-, tidak ada e-mail alert, tidak bisa memforward e-mail bervirus ke user tertentu (viruslover) dan juga belum support LMTP.

start...

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.

  1. ClamSMTP dapat di donlot di http://memberwebs.com/nielsen/software/clamsmtp/
    Pada saat artikel dibuat, versi terbaru adalah 1.0

  2. Extract dan masuk kedalam direktori clamsmtpd

    [email protected] adi# tar xzpf clamsmtp-1.0.tar.gz
    [email protected] adi# cd clamsmtp-1.0

  3. 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

    [email protected] 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.

    [email protected] clamsmtp-1.0# make
    [email protected] clamsmtp-1.0# make check
    [email protected] clamsmtp-1.0# make install
    [email protected] clamsmtp-1.0# strip /usr/sbin/clamsmtpd
  4. Sebelum aplikasi dapat diuji-coba, kopikan terlebih dahulu file konfigurasi (di direktori doc) ke direktori /etc.

    [email protected] clamsmtp-1.0# cp doc/clamsmtpd.conf /etc/
  5. Edit file clamsmtpd.conf, sesuikan dengan kebutuhan.

    [email protected] 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

  6. Sekarang edit file main.cf postfix untuk membelok-kan aliran menuju clamSMTP.

    [email protected] root# vi /etc/postfix/main.cf

    pada baris terakhir tambahkan

    content_filter = scan:127.0.0.1:10025
    receive_override_options = no_address_mappings
  7. Edit file master.cf, lalu restart postfix

    [email protected] clamsmtp-1.0# vi /etc/postfix/master.cf
    Pada 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

    [email protected] clamsmtp-1.0# service postfix restart
  8. Sebelum aliran dari postfix (file main.cf) dibelokkan menuju clamSMTP, dicoba dahulu dengan debug. Jalankan perintah dari konsole 1.

    [email protected] 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

    [email protected] 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.

    [email protected] 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

  9. 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

  10. [email protected] 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.

    [email protected] clamsmtp-1.0# wget http://memberwebs.com/nielsen/software/clamsmtp/contrib/clamsmtpd
    
    [email protected] clamsmtp-1.0# mv clamsmtpd /etc/init.d/clamsmtpd
    [email protected] clamsmtp-1.0# chmod 755 /etc/init.d/clamsmtpd
    
    [email protected] 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.

    [email protected] root# chkconfig --add clamsmtpd
    [email protected] root# chkconfig --list clamsmtpd
    clamsmtpd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
    [email protected] root# chkconfig clamsmtpd on
    [email protected] 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.

    [email protected] root# service clamsmtpd start
    Starting ClamSmtpd:                                        [  OK  ]
    
  11. Coba dengan email biasa (tanpa virus), dan lihat output log dari postfix.

    [email protected] 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=<[email protected]>
    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=<[email protected]>
    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]
    ....
    

VirusAction:....

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.

[email protected] root# chown clamav.clamav virus_action.sh
[email protected] root# chmod 700 virus_action.sh

Tambahkan opsi VirusAction di clamsmtp.conf.

VirusAction: /etc/virus_action.sh

Jangan lupa restart kembali service clamsmtpd.

[email protected] root# service clamsmtpd restart
Stopping ClamSmtpd:                                        [  OK  ]
Starting ClamSmtpd:                                        [  OK  ]

Update


kembali ke [ daftar ] dokumentasi lainnya

Hosted by www.Geocities.ws

1