Creation date: 09/28/2003 - Last Update: 02/11/2004

Postfix pake(t) AntiVirus

[email protected]

Woro-woro

Artikel ini akan menjelaskan cara instalasi antivirus pada postfix mailserver. Seperti yang kita ketahui akhir-akhir ini banyak sekali virus menyebar dengan menumpang pada e-mail. Mulai virus yang sederhana sampai virus yang mematikan. Sampai-sampai 1 virus bisa punya puluhan variannya. Dengan memasang antivirus di level MTA, diharapkan bisa memotong jalur virus, hingga tidak sampai pada MUA, terutama yang berOS microsoft® dengan aplikasi LookOut express atau 2000/XP.

Dipilihnya postfix sebagai basis software, karena mudahnya konfigurasi dan kecepatan dalam mendelevery email.
Tapi yang pasti penulis baru bisa set up postfix saja .

Untuk Antivirus, dipakai clamav. Selama ini respon dari clamav bila ada virus baru muncul cukup cepat, pernah dalam 1 hari 2 kali update database virus. Dan yang pasti gratis.

Untuk antar muka dipilih amavis-new dengan alasan baru amavis-new yang bisa saya jalankan tanpa pesan error di TSL 2.0 cloud. Amavis dan amavis-ng tidak bisa terinstall dengan sukses. Mailscanner bisa terinstall, tapi semua attachment dianggap virus, mungkin masih ada konfigurasi saya yang salah. Semoga saja sebentar lagi ada antar muka yang bersifat binary, dari pada berbasis perl. Tentunya dengan pertimbangan waktu respon dari aplikasi itu sendiri.

prerequisites

Sebelum instalasi antivirus, pastikan terlebih dahulu postfix sudah dapat berfungsi dengan sempurna/normal.
Untuk distibusi TSL, bisa memakai build-in postfix-2.0.12.
Untuk amavis pada saat tulisan ini diupdate ulang versi amavisd-new-20030616-p5 , dan clamav versi 0.80.

instalasi clamav

Untuk instalasi clamav agar dapat langsung memakai fasilitas built-in zip,gzip,bzip2, periksa apakah library yang dibutuhkan sudah terinstall.
[email protected] root# rpm -qa | grep devel
bzip2-devel-1.0.2-9tr
zlib-devel-1.1.4-5tr
Selain aplikasi diatas, clamav juga membutuhkan library gmp untuk melakukan digital singature pada saat mengupdate database. Beberapa distribusi besar seperti redhat atau mandrake biasanya sudah menyertakan aplikasi gmp yang sudah siap di install dalam bentuk rpm. Bagi yang belum memiliki dapat mendonlot source-nya di http://www.swox.com/gmp/. Lalu lakukan langkah-langkah kompilasi untuk menginstall libgmp ini. Kalau sudah selesai baru dilanjutkan dengan instalasi clamav dibawah

Aplikasi lain yang diperlukan adalah curl. Pastikan curl yang anda pakai mempunyai versi minimal 7.10.0
Curl adalah aplikasi untuk menstransfer file tanpa user interaksi . Aplikasi ini biasanya juga sudah disertakan dalam distro² besar.
Bila tidak ada maka dapat di ikuti petunjuk kompilasi disini.

  1. Siapkan user dengan home di /var/lib/clamav dan group yang akan menjalankan clamav daemon, untuk alasan security shell di set ke /bin/false
    [email protected] clamav-0.80# groupadd clamav
    [email protected] clamav-0.80# useradd  -g clamav -s /bin/false \ 
    -c "Clam AntiVirus" clamav
  2. ambil/donlot clamav versi terbaru di clamav.elektrapro.com
  3. ekstrak dan masuk kedalam direktori clamav dan lakukan konfigurasi awal untuk menyesuaikan OS dan library yang tersedia. Pada tahap ini dapat pula kita lakukan optimasi file binary, misal diset untuk i686
    [email protected] root# tar xzpf clamav-0.80.tar.gz
    [email protected] root# cd clamav-0.80
    
    [email protected] clamav-0.80# CFLAGS="-O3 -march=i686 -mcpu=i686 \
    -funroll-loops -fomit-frame-pointer" \
    ./configure \
    --sysconfdir=/etc \
    --bindir=/usr/bin \
    --sbindir=/usr/sbin \
    --libdir=/usr/lib \
    --includedir=/usr/include \
    --mandir=/usr/share/man \
    --with-dbdir=/var/lib/clamav \
    --disable-clamuko

    Perintah di atas berarti

    • Konfigurasikan untuk intel i686
    • Letakkan file clamd.conf di /etc
    • Letakkan binary executeable ke /usr/sbin karena akan dijalankan sebagai sistem
    • Letakkan file virus.dat kedalam direktori /var/lib/clamav
    • Matikan fasilitas library clamuko karena tidak dipakai

    [email protected] clamav-0.80# make
    [email protected] clamav-0.80# make install
  4. edit file /etc/clamd.conf, ini digunakan untuk mengontrol daemon clamd. Apabila anda merencanakan untuk menggunakan clamscan saja dan tidak menggunakan daemon maka file ini tidak perlu di edit. Edit baris :
    Example 			menjadi #Example
    LocalSocket /tmp/clamd 		menjadi #LocalSocket /tmp/clamd
    #TCPSocket 3310 		menjadi TCPSocket 3310
    #DataDirectory /var/lib/clamav	menjadi DataDirectory /var/lib/clamav
    #User clamav 			menjadi User clamav
    #ScanMail 			menjadi ScanMail
    atau dengan kata lain matikan example, dan ubah daemon dari local socket menjadi tcp/ip. Tapi ini hanya sementara, hanya untuk mengetes apakah daemon bisa berfungsi.
  5. eksekusi daemon dan lakukan periksaan di proses dan tcp/ip port 3310
    [email protected] root# /usr/local/sbin/clamd
    [email protected] root# ps aux | grep clamd
    root     21327  0.0  4.8  9476 6108 ?        S    20:53   0:00 /usr/local/sbin/clamd
    root     21328  0.0  4.8  9476 6108 ?        S    20:53   0:00 /usr/local/sbin/clamd
    root     21329  0.0  4.8  9476 6108 ?        S    20:53   0:00 /usr/local/sbin/clamd
    [email protected] root# netstat -tpan
    r[email protected] root# netstat -tpan | grep clamd
    tcp        0      0 0.0.0.0:3310            0.0.0.0:*               LISTEN      21327/clamd
  6. test dengan telnet untuk melihat respon daemon
    [email protected] root# telnet 127.0.0.1 3310
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    PING <== coba dengan PING (capital)
    PONG
    Connection closed by foreign host.
    daemon sukses, ubah kembali menjadi mode local socket.
    #LocalSocket /tmp/clamd menjadi LocalSocket /var/amavis/clamd
    TCPSocket 3310 		menjadi #TCPSocket 3310
  7. agar pada saat sistem boot-up langsung menjalankan clamd perlu memasang script di /etc/init.d
    [email protected] clamav-0.80# cp support/init/RedHat/clamd /etc/init.d/
    [email protected] clamav-0.80# killall clamd
    [email protected] clamav-0.80# /etc/init.d/clamd start
    Starting clamd:                                            [  OK  ]
    [email protected] clamav-0.80# chkconfig clamd on
    [email protected] clamav-0.80# chkconfig --list clamd
    clamd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  8. update database virus clamav dengan tool freshclam, terlebih dahulu buatkan file tujuan log.
    [email protected] clamav-0.80# touch /var/log/clam-update.log
    [email protected] clamav-0.80# chmod 600 /var/log/clam-update.log
    [email protected] clamav-0.80# chown clamav /var/log/clam-update.log
    bila anda sedang terkoneksi dengan internet, update sekarang juga !

    update realtime
    [email protected] clamav-0.80# /usr/local/bin/freshclam -l /var/log/clam-update.log
    update dapat dijalan secara terjadwal dengan diletakkan di crond atau langsung dari tool freshclam

    update dengan daemon freshclam
    [email protected] clamav-0.80# freshclam -d -c 2 -l /var/log/clam-update.log
    silakan baca petunjuk penggunaan opsi-opsi freshclam pada manual freshclam.
    atau pada crond cek tiap 30 menit

    update dengan crond
    */30 * * * * su - clamav -s /bin/bash -c '/usr/local/bin/freshclam --quiet -l /var/log/clam-update.log'

    update dengan procmail

    atau bila anda berniat untuk mendonload database paling awal, silakan daftar email anda ke milis clamav [email protected], atau buka website clamav dan daftar dari situs tersebut. Set procmail untuk menangkap subject clamav-virusdb dan eksekusi program freshclam
    Pada procmailrc set sebagai berikut. ('it's work with me-tsl)
    [email protected] clamav-0.80# su - clamav -s /bin/bash
    [email protected] clamav$ vi .procmailrc
    edit file .procmailrc untuk user clamav seperti berikut
    DEFAULT=/dev/null
    SHELL=/bin/bash
    MAILDIR=$HOME/
    LOGFILE=$MAILDIR/procmail.log
    LOG="---LOGGING--> "
    VERBOSE=yes
    LOGABSTRACT=all
    COMSAT=no
    
    :0
    * ^TOclamav-virusdb
    * ^Subject:.*Clamav-virusdb
    | /usr/bin/freshclam --quiet -l /var/log/clam-update.log
    Jika ada email dari clamav otomatis akan langsung mendonlot database virus dan membuat file log.
    Pada file procmail.log dapat dilihat
    ---LOGGING--> procmail: [1340] Tue Oct  7 10:16:55 2003
    procmail: Assigning "LOGABSTRACT=all"
    procmail: Assigning "COMSAT=no"
    procmail: Assigning "COMSAT=no"
    procmail: Match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently
    (-Resent)?)-To):(.*[^a-zA-Z])?)clamav-virusdb"
    procmail: Match on "^Subject:.*Clamav-virusdb"
    procmail: Executing "/usr/bin/freshclam,--quiet,-l,/var/log/clam-update.log"
    Sedangkan pada file clam-update.log
    --------------------------------------
    ClamAV update process started at Fri Dec  5 13:50:07 2003
    main.cvd is up to date (version: 7, sigs: 10294, f-level: 1, builder: tkojm)
    daily.cvd updated (version: 44, sigs: 315, f-level: 1, builder: tkojm)
    Database updated (10609 signatures) from database.clamav.net (128.121.60.235).
    

instalasi amavisd-new

Aplikasi amavisd-new membutuhkan dukungan modul perl. Secara default instaler TSL 2.0 tidak memberikan dukungan kepada modul-modul ini. Jadi harus mengambil secara langsung dari internet.
cek terlebih dahulu apakah perl-devel sudah terinstall disistem.
[email protected] clamav-0.80# rpm -qa | grep perl
perl-5.8.0-10tr
perl-devel-5.8.0-10tr
Modul-modul yang diperlukan adalah (berdasarkan file INSTALL)
Archive::Tar   (Archive-Tar-x.xx)
Archive::Zip   (Archive-Zip-x.xx)
Compress::Zlib (Compress-Zlib-x.xx)
Convert::TNEF  (Convert-TNEF-x.xx)
Convert::UUlib (Convert-UUlib-x.xxx)
MIME::Base64   (MIME-Base64-x.xx)
MIME::Parser   (MIME-Tools-x.xxxx)
Mail::Internet (MailTools-1.58 or later have workarounds for Perl 5.8.0 bugs)
Net::Server    (Net-Server-x.xx)
Net::SMTP      (libnet-x.xx) (use libnet-1.16 or latter for performance)
Digest::MD5    (Digest-MD5-x.xx)
IO::Stringy    (IO-stringy-x.xxx)
Time::HiRes    (Time-HiRes-x.xx) (use 1.49 or later, some older cause problems)
Unix::Syslog   (Unix-Syslog-x.xxx)
module Archive::Zip membutuhkan binary zip dan unzip, pastikan sudah terinstall sebelumnya. bila tidak pada waktu make test akan terlihat pesan error
warning: unzip -t doesn't seem to work,...

Cara yang paling mudah mendonlot dan instalasi adalah dengan menggunakan shell dari program perl dengan perintah :

[email protected] clamav-0.80# perl -MCPAN -e shell
konfigurasikan dengan sistem anda, bila shell perl sudah siap, maka mulailah mendonlot (serta instalasi) modul perl dengan perintah
cpan> install Archive::Tar
Ulangi perintah diatas sampai semua modul perl terinstall.

  1. Siapkan direktory untuk amavisd, disini saya pilih user yang menjalankan amavis sama dengan user clamav, agar tidak bermasalah dengan daemon clamd.
    [email protected] root# mkdir /var/amavis
    [email protected] root# chown clamav.clamav /var/amavis
    [email protected] root# chmod 750 /var/amavis
    [email protected] root# mkdir /var/virusmails
    [email protected] root# chown clamav.clamav /var/virusmails
    
  2. ambil/donlot amavisd-new terbaru di http://www.ijs.si/software/amavisd/, lalu ekstrak dan masuk kedalam direktorinya
    [email protected] root# tar xzpf amavisd-new-20030616-p5.tar.gz
    [email protected] root# cd amavisd-new-20030616
    [email protected] amavisd-new-20030616#
  3. Kopikan script amavisd ke /usr/local/sbin dan set ijin akses
    [email protected] amavisd-new-20030616# cp amavisd /usr/local/sbin/
    [email protected] amavisd-new-20030616# chown root /usr/local/sbin/amavisd
    [email protected] amavisd-new-20030616# chmod 755  /usr/local/sbin/amavisd
  4. kopikan file configurasi dan edit seperti contoh.

    [email protected] amavisd-new-20030616# cp amavisd.conf /etc/
    [email protected] amavisd-new-20030616# vi /etc/amavisd.conf

    Edit beberapa bagian amavisd-new

    $mydomain = 'example.com'; (sesuaikan dengan domain anda)
    $daemon_user = 'clamav';
    $daemon_group = 'clamav';

    @bypass_spam_checks_acl = qw( . ); hilangkan tanda # untuk mematikan dukungan spamassin (baris 143), sbg pengganti dipilih bogofilter yang lebih cepat dan akuran menangani spam

    #$unix_socketname = "$MYHOME/amavisd.sock"; matikan baris 203, postfix tdk pakai sock helper

    buka baris 1155 -1158, untuk dukungan daemon clamd, agar proses scanning lebih cepat
    ['Clam Antivirus-clamd',
        \&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd'],
    qr/\bOK$/, qr/\bFOUND$/,
    qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

    terlihat amavisd akan memakai local socket /var/amavis/clamd, maka ubah /etc/clamd.conf sesuaikan dengan local socket yang diperlukan.
    Selain itu matikan semua antivirus yang tidak dipakai agar waktu startup amavisd bisa lebih cepat

  5. Bila file amavisd.conf dan clamd.conf sudah diedit dan disesuaikan, make di coba dengan test
    [email protected] root# /usr/local/sbin/amavisd debug
    ...starting.  amavisd at mizuno.redkurawa.com..
    ...Perl version               5.008
    ...Module Amavis::Conf        1.15
    ...
    ...
    ...Net::Server: Beginning prefork (2 processes)
    ...Net::Server: Starting "2" children
    ...Net::Server: Child Preforked (3061)
    ...Net::Server: Parent ready for children.
    ...Net::Server: Child Preforked (3062)
    buka console/terminal baru, test port 10024 dan user yang menjalankan amavisd
    [email protected] root# netstat -tpan | grep 10024
    tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      3063/perl
    
    [email protected] root# ps aux | grep amavisd
    clamav    3063  2.6 18.9 13088 11792 pts/0   S    22:29   0:04 /usr/bin/perl -T /usr/local/sbin/amavisd debug
    clamav    3064  0.0 18.9 13088 11796 pts/0   S    22:29   0:00 /usr/bin/perl -T /usr/local/sbin/amavisd debug
    clamav    3065  0.0 18.9 13088 11792 pts/0   S    22:29   0:00 /usr/bin/perl -T /usr/local/sbin/amavisd debug
  6. edit agar file konfigurasi menjadi lebih kecil, dengan membuang setiap baris yang dimulai dengan '#' atau
    [email protected] root# cd /etc
    [email protected] etc# mv amavisd.conf amavisd.conf2
    [email protected] etc# cat amavisd.conf2 | grep -v '^#' | tr -s '\n' > amavisd.conf
    hasilnya bisa anda lihat seperti file configurasi milik saya amavisd.conf
  7. agar bisa langsung start pada saat server berjalan kopikan file init script dari amavis ke init.d
    Sesuikan dengan letak init.d pada sistem anda. Pada TSL 2.0 terletak pada /etc/init.d/ bukan /etc/rc.d/init.d
    [email protected] root# cd amavisd-new-20030616
    [email protected] amavisd-new-20030616# cp amavisd_init.sh /etc/init.d/amavisd
    [email protected] amavisd-new-20030616# chmod 755 /etc/init.d/amavisd 
    Pada TSL 2.0 (sesuaikan dengan sistem anda) file init script ini masih perlu diedit.

    pada baris 13 ubah
    . /etc/rc.d/init.d/functions menjadi . /etc/init.d/functions

    pada baris 19 ubah
    prog="/usr/sbin/amavisd" menjadi prog="/usr/local/sbin/amavisd"

    [email protected] root# killall amavisd
    [email protected] root# /etc/init.d/amavisd start
    Starting amavisd:                                          [  OK  ]
    
    [email protected] root# chkconfig amavisd on
    [email protected] root# chkconfig --list amavisd
    amavisd         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  8. saatnya mencoba daemon amavisd dengan berbagai domentasi yang ada pada file README.postfix.
    [email protected] root#  telnet 127.0.0.1 10024
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    220 [127.0.0.1] ESMTP amavisd-new service ready
    quit
    221 2.0.0 [127.0.0.1] (amavisd) closing transmission channel
    Connection closed by foreign host.
  9. edit file /etc/postfix/master.cf dan tambahkan baris dibawah ini
    smtp-amavis unix -      -       n     -       2  smtp
        -o smtp_data_done_timeout=1200
        -o disable_dns_lookups=yes
    	
    127.0.0.1:10025 inet n  -       n     -       -  smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
    sesuai dengan informasi di readme file bila memakai postfix 2.0.xx, maka transport smtp dapat di ganti dengan lmtp untuk meningkatkan performance, jadi
    smtp-amavis unix -      -       n     -       2  lmtp
        -o smtp_data_done_timeout=1200
        -o disable_dns_lookups=yes
    reload ulang postfix dan ujicoba lagi dengan telnet
    [email protected] root# postfix reload
    [email protected] root# netstat -ptan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      457/perl
    tcp        0      0 127.0.0.1:10025         0.0.0.0:*               LISTEN      510/master
    
    [email protected] root# telnet 127.0.0.1 10024
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    220 [127.0.0.1] ESMTP amavisd-new service ready
    MAIL FROM:root
    250 2.1.0 Sender root OK
    RCPT TO:<postmaster>
    250 2.1.5 Recipient postmaster OK
    DATA
    354 End data with <CR><LF>.<CR><LF>
    Subject: test2 - virus test pattern
    tekan enter disini 1x
    X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
    .
    250 2.5.0 Ok, id=00663-01, BOUNCE << respon dari amavis
    quit
    221 2.0.0 [127.0.0.1] (amavisd) closing transmission channel
    Connection closed by foreign host.
    Bila percobaan sukses anda akan menerima email warning dari [email protected]
  10. agar postfix memforwardkan semua email ke daemon amavis, maka edit file /etc/postfix/main.cf,
    edit atau tambahkan baris berikut
    content_filter = smtp-amavis:[127.0.0.1]:10024
  11. reload postfix dan selamat anda sudah berhasil melewati tahap melelahkan membaca toturial ini

troubleshooting

  1. basic
    Berdasarkan pengalaman, paling sering dijumpai error pada ijin akses direktori dan kepemilikan.
    Cek terlebih dahulu kepemilikan file/direktori apakah sudah sesuai. Bila sudah mulai cek ijin akses direktori diatasnya apakah sudah mengijikan user clamav untuk masuk/menulis/mengeksekusi.
    bila belum berhasil juga ulangi langkah diatas sampai berhasil ..ingat sampai berhasil.
  2. Clamd
    Oct xx xx:xx:xx uler amavis[451]: (00451-02) Clam Antivirus-clamd av-scanner FAILED: Too many retries to talk to /var/amavis/clamd (Can't connect to UNIX socket /var/amavis/clamd: Connection refused) at (eval 34) line 179.

    Pesan error diatas muncul karena amavisd tidak bisa terhubung dengan local socket clamd.
    Solusi:
    Periksa apakah daemon clamd sudah berjalan semestinya, bisa pakai ps aux, bila mati, hidupkan lagi servicenya
    Bila ternyata masalahnya clamd tidak mau hidup,walau sudah dipaksa. Coba file local socket di '/var/amavis/clamd' di hapus dulu.

    [email protected] root# rm /var/amavis/clamd
    Kemudian dihidupkan kembali service clamd-nya, clamd akan membuat socket baru.
    Ini biasanya terjadi bila server mati secara tidak normal, atau pada saat akan dimatikan masih ada antrian di local socket, sehingga clamd tidak sempat menghapusnya.
  3. Freshclam

    SECURITY WARNING: NO SUPPORT FOR DIGITAL SIGNATURES

    Pesan diatas muncul apabila pada saat mengkompilasi belum tersedia libgmp. Silakan baca penjelasan libgmp pada bagian instalasi clamav diatas.

customize/neko-neko

  1. viruslover
    Ingin koleksi semua virus yang tertangkap ?

    Edit pada bagian viruslover file configurasi amavisd.conf

  2. Alert
    Mungkin ada yang ingin setiap mendapatkan virus langsung memberikan alert/peringatan?

    clamav mulai versi 0.65 memberikan fasilitas alert yang dapat dipakai untuk customize.
    Pada tulisan ini diberikan contoh pemakaian alert yang digabung dengan tool smbclient dari samba, sehingga setiap kali ditemukan virus administrator dengan Os Windows atau aplikasi LinNeighboorhood dapat langsung mengetahuinya.

    Edit file /etc/clamd.conf cari bagian VirusEvent, ubah seperti dibawah

    VirusEvent /bin/echo "VIRUS ALERT: %f: %v" | smbclient -Mredkurawa
    
    lalu silakan coba dengan mengirimkan email bervirus.

    sample alert

akhirnya ...

Terimakasih kepada Novotel Bali dan Telkom Divre7 yang sudah mensponsori artikel ini :p~.

pustaka

update

  1. 08102003 - ganti home user clamav, agar proses freshclam via procmail dapat berjalan lancar.
    perbaikan script procmail
  2. 22102003 - tambah troubleshot pada clamd
  3. 04122003 - update clamav menjadi versi 0.65, 0.60 it's obsolete
                        rubah procmail default delivery ke /dev/null
  4. 05122003 - tambah artikel virusalert
  5. 09122003 - fix Freshclam Digital Signature Error Message
  6. 02112004 - update clamav menjadi versi 0.80, tambah link artikel instalasi libgmp, dan curl
  7. 27012005 - update clamav menjadi versi 0.81, perbaikan opsi ./configure


kembali ke [ daftar ] dokumentasi lainnya

Hosted by www.Geocities.ws

1