Antivirus dengan qmail-scanner dan clam antivirus pada qmail

Asfihani ([email protected])

12 Maret 2003
Diasumsikan diserver anda telah telah terpasang qmail yang sudah dipatch menggunakan qmail-queue patch dari Bruce Guenter ( http://www.qmail.org/qmailqueue-patch) . Tutorial ini disusun menggunakan distro Redhat Linux 7.3 dan mungkin juga bisa anda coba pada distro yang lain. Saran, koreksi, kritik, kesalahan ketik, maupun ucapan silakan dikirimkan ke email tersebut diatas atau langsung join ke channel #indolinux di EFnet. Terima Kasih.

1. Instal clam antivirus

Clam antivirus ( http://clamav.elektrapro.com) merupakan software antivirus yang berlisensi GNU GPL 2 dengan menggunakan database virus dari OpenAntiVirus ( http://www.openantivirus.org). Download, ekstrak dan ganti direktori ke source clam antivirus :

[[email protected] src]# wget http://clamav.elektrapro.com/stable/clamav-0.54.tar.gz 
[[email protected] src]# tar -xzvf clamav-0.54.tar.gz 
[[email protected] src]# cd clamav-0.54

Buat user dan group yang akan menjalankan daemon clam anvirus :

[[email protected] clamav-0.54]# groupadd clamav 
[[email protected] clamav-0.54]# useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav

Lakukan kompilasi dan install :

[[email protected] clamav-0.54]# ./configure 
[[email protected] clamav-0.54]# make 
[[email protected] clamav-0.54]# make install 

Pindah file konfigurasi standar dari clam antivirus ke nama file yang lain, karena kita akan menyusun sendiri file konfigurasi tersebut :

[[email protected] clamav-0.54]# mv /usr/local/etc/clamav.conf /usr/local/etc/clamav.conf.default

Buatlah file /usr/local/etc/clamav.conf isinya :

LogFile /tmp/clamd.log 
LogFileMaxSize 2M 
LogVerbose 
LogTime 
PidFile /var/run/clamd.pid 
DataDirectory /usr/local/share/clamav 
LocalSocket /tmp/clamd 
MaxDirectoryRecursion 15 
User clamav 
ScanArchive 
ArchiveMaxFileSize 10M 
ArchiveMaxRecursion 5 
ArchiveMaxFiles 1000 

Jalankan daemon clam antivirus (clamd ) :

[[email protected] clamav-0.54]# clamd

Periksa apakah daemon tersebut sudah berjalan seperti yang kita inginkan :

[[email protected] clamav-0.54]# ps axu | grep clamd 
clamav   29192  0.0  4.7  9120 5984 ?        S    11:06   0:00 clamd 
clamav   29193  0.0  4.7  9120 5984 ?        S    11:06   0:00 clamd 
clamav   29194  0.0  4.7  9120 5984 ?        S    11:06   0:00 clamd 

Untuk menjalankan daemon clamd setiap server di reboot :

[[email protected] clamav-0.54]# echo /usr/local/sbin/clamd >> /etc/rc.local

Tanpa berpindah dari direktori source clam antivirus, lakukan test dengan cara menscan direktori test :

[[email protected] clamav-0.54]# clamscan -r test

Kemudian download update database virus yang paling baru :

[[email protected] clamav-0.54]# freshclam 

Jika sudah selesai kemudian kita jalankan daemon proses update database virus tersebut secara otomatis (akan dilaksanakan pengecekan database virus yang paling baru 2 kali dalam sehari ) :

[[email protected] clamav-0.54]# touch /var/log/clam-update.log 
[[email protected] clamav-0.54]# chmod 644 /var/log/clam-update.log 
[[email protected] clamav-0.54]# chown clamav /var/log/clam-update.log 

Jalankan daemonnya (freshclam ):

[[email protected] clamav-0.54]# freshclam -d -c 2 -l /var/log/clam-update.log

Untuk menjalankan daemon freshclam jika server di reboot :

[[email protected] clamav-0.54]# echo "freshclam -d -c 2 -l /var/log/clam-update.log" \
>> /etc/rc.local

2. Instal Module Perl Time::HiRes dan DB_FIle

Anda bisa mendapatkan module perl Time::HiRes tersebut yang paling baru melalui http://search.cpan.org/search?module=Time::HiRes, atau anda bisa langsung mendownload di lokal mirror CPAN di Indonesia (terima kasih kepada ISP CBN), download, ekstrak, dan kompilasi :

[[email protected] src]# wget \
ftp://ftp.cbn.net.id/mirror/CPAN/authors/id/J/JH/JHI/Time-HiRes-1.42.tar.gz
[[email protected] src]# tar -xzvf Time-HiRes-1.42.tar.gz 
[[email protected] src]# cd Time-HiRes-1.42 
[[email protected] Time-HiRes-1.42]# perl Makefile.PL 
[[email protected] Time-HiRes-1.42]# make
[[email protected] Time-HiRes-1.42]# make install

Atau, anda juga bisa menggunakan CPAN auto-install sebagai berikut untuk menginstal module perl Time::HiRes tersebut :

[[email protected] src]# perl -MCPAN -e "install Time::HiRes" 

Lakukan juga langkah seperti tersebut diatas untuk module DB_File.

3. Instal maildrop

Yang dibutuhkan oleh qmail-scanner dari paket maildrop sebenarnya adalah program reformime. Download, ekstrak, kompilasi dan install :

[[email protected] src]# wget http://unc.dl.sf.net/courier/maildrop-1.5.2.tar.bz2 
[[email protected] src]# tar -jxvf maildrop-1.5.2.tar.bz2 
[[email protected] src]# cd maildrop-1.5.2 
[[email protected] maildrop-1.5.2]# ./configure 
[[email protected] maildrop-1.5.2]# make 
[[email protected] maildrop-1.5.2]# make install

4. Instal tnef unpacker

Tnef unpacker digunakan untuk menguraikan attachment MS-TNEF MIME yang digunakan oleh Microsoft mail server.

[[email protected] src]# wget http://unc.dl.sf.net/sourceforge/tnef/tnef-1.2.0.tar.gz 
[[email protected] src]# tar -xzvf tnef-1.2.0.tar.gz 
[[email protected] src]# cd tnef-1.2.0 
[[email protected] tnef-1.2.0]# ./configure 
[[email protected] tnef-1.2.0]# make 
[[email protected] tnef-1.2.0]# make install 

5. Instal perl-suidperl

Karena pada default distribusi RedHat 7.3 tidak menyertakan program perl-suidperl, maka kita perlu menginstal program tersebut (hal ini mungkin bisa anda temui jika anda tidak menginstal program tersebut pada file /var/log/qmail/smtpd/current akan terdapat error Can't do setuid atau jika di server lokal akan anda dapatkan error 451_qq_temporary_problem_(#4.3.0) ) :

[[email protected] src]# wget \
ftp://rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/perl-suidperl-5.6.1-34.99.6.i386.rpm
[[email protected] src]# rpm -ivh perl-suidperl-5.6.1-34.99.6.i386.rpm

6. Instal qmail-scanner

Download, ekstrak source qmail-scanner yang paling baru :

[[email protected] src]# wget \
http://unc.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-1.16.tgz 
[[email protected] src]# tar -xzvf qmail-scanner-1.16.tgz

Ganti direktori ke source qmail-scanner kemudian lakukan konfigurasi :

[[email protected] src]# cd qmail-scanner-1.16 
[[email protected] qmail-scanner-1.16]# ./configure 

Jika sukses, script configure akan menemukan path program yang dibutuhkan oleh qmail-scanner dan clam antivirus, misalnya :

....
mimeunpacker=/usr/local/bin/reformime
uudecode=/usr/bin/uudecode
unzip=/usr/bin/unzip 
tnef=/usr/local/bin/tnef
clamscan=/usr/local/bin/clamscan
scanners="clamscan_scanner"
....

Buat direktori yang akan digunakan oleh qmail-scanner :

[[email protected] qmail-scanner-1.16]# mkdir -p /var/spool/qmailscan/quarantine/{tmp,cur,new}
[[email protected] qmail-scanner-1.16]# mkdir -p /var/spool/qmailscan/working/{tmp,cur,new}
[[email protected] qmail-scanner-1.16]# mkdir -p /var/spool/qmailscan/archive/{tmp,cur,new}

Salin file quarantine-attachments.txt ke direktori /var/spool/qmailscan :

[[email protected] qmail-scanner-1.16]# cp quarantine-attachments.txt /var/spool/qmailscan/

Ubah kepemilikan dari direktori /var/spool/qmailscan :

[[email protected] qmail-scanner-1.16]# chown -R qmailq:qmail /var/spool/qmailscan/ 

Salin file qmail-scanner-queue.pl ke direktori /var/qmail/bin :

[[email protected] qmail-scanner-1.16]# cp qmail-scanner-queue.pl \
/var/qmail/bin/qmail-scanner-queue.pl 

Ganti kepemilikan dan mode dari file qmail-scanner-queue.pl tersebut :

[[email protected] qmail-scanner-1.16]# chown qmailq:qmail /var/qmail/bin/qmail-scanner-queue.pl
[[email protected] qmail-scanner-1.16]# chmod 4755  /var/qmail/bin/qmail-scanner-queue.pl

Generate database perl-scanner dan membersihkan file-file sementara :

[[email protected] qmail-scanner-1.16]# /var/qmail/bin/qmail-scanner-queue.pl -z 
[[email protected] qmail-scanner-1.16]# /var/qmail/bin/qmail-scanner-queue.pl -g

Edit file /var/qmail/bin/qmail-scanner-queue.pl, sesuaikan dengan konfigurasi yang anda kehendaki, misalnya :

my $V_FROM='[email protected]'; 
my $QUARANTINE_CC='[email protected]';

Test kirim email bervirus ke [email protected] :

[[email protected] qmail-scanner-1.16]# ./contrib/test_installation.sh -doit 

Jika sukses, anda bisa memodifikasi file startup untuk menjalakan qmail-smtpd anda, misalnya jika anda menggunakan supervise anda bisa mengedit file /service/qmail-smtpd/run menjadi :

PATH=$PATH:/usr/local/bin:/var/qmail/bin 
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" 
export PATH QMAILQUEUE

QMAILDUID=`id -u qmaild` 
NOFILESGID=`id -g qmaild` 
MAXSMTPD=30 
exec /usr/local/bin/softlimit -m 11000000 \
tcpserver -H -R -v -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" \
0 25 qmail-smtpd 2>&1 

Perhatikan perubahan tersebut diatas terutama pada path QMAILQUEUE dan angka (memory) yang digunakan softlimit, jika anda mengeset angka tersebut terlalu kecil, maka biasanya anda akan mendapatkan error perl: error in loading shared libraries: atau failed to map segment from shared object: Cannot allocate memory. Qmail-scanner tidak mendeteksi virus klez jika setting dari soflimit kurang dari 11000000 (11 juta), anda bisa lihat referensinya di http://archive.elektrapro.com/clamav.elektrapro.com/users/2002/10/msg00114.html (thanks kepada tio aka geep di #indolinux EFnet)

Restart daemon qmail anda, jika anda menggunakan supervise anda bisa menggunakan :

[[email protected] qmail-scanner-1.16]# qmailctl restart

Kemudian anda bisa mencoba mengirim email dengan attachment sebuah file eicar.com yang isinya sebagai berikut :

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Jika anda lakukan tail -f /var/spool/qmailscan/quarantine.log, maka akan anda dapatkan file tersebut akan ditolak dan di log oleh qmail-scanner, misalnya :

04/03/2003 12:31:45     [email protected]        [email protected]u      test email mengandung virus     EICAR Test Virus      clamscan: 0.54. 

Jika sukses, berarti mail server anda telah menggunakan software antivirus :), have fun ! Jika anda menginginkan pembacaan statistik berapa jumlah email yang masuk kedalam file /var/spool/qmailscan/quarantine.log, anda bisa menggunakan Qmail Scanner Statistics (QSS). Caranya, buat direktori qss, download source qss, dan ekstrak :

[[email protected] src]# mkdir qss 
[[email protected] src]# cd qss 
[[email protected] qss]# wget http://unc.dl.sf.net/sourceforge/qss/qss-2.0.2.tar.gz 
[[email protected] qss]# tar -xzvf qss-2.0.2.tar.gz 

Tentukan direktori dimana akan kita salin file /var/spool/qmailscan/quarantine.log, misalnya buat direktori /usr/local/httpd/logs/quarantine, kemudian cari user yang menjalankan daemon apache (anda bisa melihat dari file httpd.conf anda bagian User atau anda bisa menggunakan perintah ps axu | grep httpd untuk mencarinya), disini kita misalkan usernya adalah www. Kemudian buatlah file /etc/qss.sh (mulai dibawah ini ganti user www dengan user yang menjalankan daemon apache anda) isinya :

#!/bin/bash 
cp -f /var/spool/qmailscan/quarantine.log /usr/local/httpd/logs/quarantine/quarantine.log 
chown www /usr/local/httpd/logs/quarantine/quarantine.log

Set menjadi script yang executable :

[[email protected] qss]# chmod +x /etc/qss.sh

Buat direktori /usr/local/httpd/logs/quarantine dan ganti kepemilikannya ke user www :

[[email protected] qss]# mkdir /usr/local/httpd/logs/quarantine 
[[email protected] qss]# chown www /usr/local/httpd/logs/quarantine 

Tentukan dimana qss akan diinstall, hal ini tergantung setting dari DocumentRoot di file httpd.conf anda, misalnya kita buat di direktori /usr/local/httpd/htdocs/qss (sehingga nantinya bisa diakses melalui http://localhost/qss misalnya) :

[[email protected] qss]# mkdir /usr/local/httpd/htdocs/qss 

Salin semua file ke direktori tersebut diatas dan ganti kepemilikannya :

[[email protected] qss]# cp -R * /usr/local/httpd/htdocs/qss 
[[email protected] qss]# chown -R www /usr/local/httpd/htdocs/qss

Edit file /usr/local/httpd/htdocs/qss/config.php ganti bagian :

$config["logFile"] = "quarantine.log"; 

menjadi :

$config["logFile"] = "/usr/local/httpd/logs/quarantine/quarantine.log";

Jalankan script untuk menyalin file quarantine.log untuk pertama kali :

[[email protected] qss]# sh /etc/qss.sh

Test dengan browser anda dengan url http://localhost/qss atau http://ip.address.server.anda/qss tergantung konfigurasi ServerNamepada file httpd.conf anda. Jika sukses anda bisa menambahkan cron setiap 5 menit (jika anda menginginkan waktu yang lebih lama anda bisa mengganti angka 5 menjadi yang lain, misalnya 10,15 atau 30, silakan konsultasi dengan man 5 crontab anda ) :

[[email protected] qss]# echo "*/5 * * * * /etc/qss.sh" > cron.temp 
[[email protected] qss]# crontab -u root cron.temp 

Enjoy !

Changelog

12 Maret 2003

08 Maret 2003

04 Maret 2003

Referensi :