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 :

[root@wedus src]# wget http://clamav.elektrapro.com/stable/clamav-0.54.tar.gz 
[root@wedus src]# tar -xzvf clamav-0.54.tar.gz 
[root@wedus src]# cd clamav-0.54

Buat user dan group yang akan menjalankan daemon clam anvirus :

[root@wedus clamav-0.54]# groupadd clamav 
[root@wedus clamav-0.54]# useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav

Lakukan kompilasi dan install :

[root@wedus clamav-0.54]# ./configure 
[root@wedus clamav-0.54]# make 
[root@wedus 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 :

[root@wedus 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 ) :

[root@wedus clamav-0.54]# clamd

Periksa apakah daemon tersebut sudah berjalan seperti yang kita inginkan :

[root@wedus 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 :

[root@wedus 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 :

[root@wedus clamav-0.54]# clamscan -r test

Kemudian download update database virus yang paling baru :

[root@wedus 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 ) :

[root@wedus clamav-0.54]# touch /var/log/clam-update.log 
[root@wedus clamav-0.54]# chmod 644 /var/log/clam-update.log 
[root@wedus clamav-0.54]# chown clamav /var/log/clam-update.log 

Jalankan daemonnya (freshclam ):

[root@wedus clamav-0.54]# freshclam -d -c 2 -l /var/log/clam-update.log

Untuk menjalankan daemon freshclam jika server di reboot :

[root@wedus 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 :

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

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

[root@wedus 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 :

[root@wedus src]# wget http://unc.dl.sf.net/courier/maildrop-1.5.2.tar.bz2 
[root@wedus src]# tar -jxvf maildrop-1.5.2.tar.bz2 
[root@wedus src]# cd maildrop-1.5.2 
[root@wedus maildrop-1.5.2]# ./configure 
[root@wedus maildrop-1.5.2]# make 
[root@wedus 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.

[root@wedus src]# wget http://unc.dl.sf.net/sourceforge/tnef/tnef-1.2.0.tar.gz 
[root@wedus src]# tar -xzvf tnef-1.2.0.tar.gz 
[root@wedus src]# cd tnef-1.2.0 
[root@wedus tnef-1.2.0]# ./configure 
[root@wedus tnef-1.2.0]# make 
[root@wedus 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) ) :

[root@wedus src]# wget \
ftp://rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/perl-suidperl-5.6.1-34.99.6.i386.rpm
[root@wedus 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 :

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

Ganti direktori ke source qmail-scanner kemudian lakukan konfigurasi :

[root@wedus src]# cd qmail-scanner-1.16 
[root@wedus 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 :

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

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

[root@wedus qmail-scanner-1.16]# cp quarantine-attachments.txt /var/spool/qmailscan/

Ubah kepemilikan dari direktori /var/spool/qmailscan :

[root@wedus qmail-scanner-1.16]# chown -R qmailq:qmail /var/spool/qmailscan/ 

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

[root@wedus 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 :

[root@wedus qmail-scanner-1.16]# chown qmailq:qmail /var/qmail/bin/qmail-scanner-queue.pl
[root@wedus qmail-scanner-1.16]# chmod 4755  /var/qmail/bin/qmail-scanner-queue.pl

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

[root@wedus qmail-scanner-1.16]# /var/qmail/bin/qmail-scanner-queue.pl -z 
[root@wedus 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 root@localhost :

[root@wedus 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 :

[root@wedus 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]      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 :

[root@wedus src]# mkdir qss 
[root@wedus src]# cd qss 
[root@wedus qss]# wget http://unc.dl.sf.net/sourceforge/qss/qss-2.0.2.tar.gz 
[root@wedus 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 :

[root@wedus qss]# chmod +x /etc/qss.sh

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

[root@wedus qss]# mkdir /usr/local/httpd/logs/quarantine 
[root@wedus 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) :

[root@wedus qss]# mkdir /usr/local/httpd/htdocs/qss 

Salin semua file ke direktori tersebut diatas dan ganti kepemilikannya :

[root@wedus qss]# cp -R * /usr/local/httpd/htdocs/qss 
[root@wedus 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 :

[root@wedus 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 ) :

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

Enjoy !

Changelog

12 Maret 2003

08 Maret 2003

04 Maret 2003

Referensi :