CLAM ANTIVIRUS – TURKISH DOCUMENT
by yavuz kaya and Ýbrahim erken
Email: edukanka at yahoo dot com

1. Giriþ

     1.1 Özellikler
     1.2 E-posta listeleri
     1.3 Virüs bildirimleri
     
2. Kurulum

     2.1 Ýhtiyaçlar
     2.2 Desteklenen platformlar
     2.3 Güncel versiyonlar
     2.4 Binary paketleri
     2.5 Kurulum
     2.6 Düzenleme
     2.7 Test
     2.8 Güncel Clam (Freshclam): Otomatik güncelleme
     2.9 FreshClam: Mirror’lar ve mirrors.txt

3. Kullanma

     3.1 Clam daemon
     3.2 Clamuko
     3.3 Arþivler ve sýkýþtýrýlmýþ dosyalar
     3.4 Çýktý formatý

4. Uygun Yazýlým

     4.1 clamav-milter
     4.2 mod clamav
     4.3 TrashScan
     4.4 AMaViS - ”Next Generation”(Yeni Nesil)
     4.5 amavisd-new(yeni)
     4.6 Qmail-Scanner
     4.7 Sagator
     4.8 ClamdMail
     4.9 BlackHole
     4.10 MailScanner
     4.11 MIMEDefang
     4.12 Exiscan
     
5. LibClamAV

     5.1 API
6. Problem Çözme

     6.1 Return kodlarý
     
7. Teknik kýsým

     7.1 Güvenlik
     7.2 Scan engine

























1. GÝRÝÞ

Clam AntiVirüs UNIX’te kullanýlabilen bir anti virüs programýdýr.Bu yazýlýmýn oluþturulmasýndaki temel amaç e-posta sunucularýdýr.(Attachment taramasý için).Bu paket kullanýcýlara esnek,çok kullanýmlý ve internet üzerinden otomatik güncelleþtirme yapýlabilen bir yazýlým sunuyor.Programlar Clam AntiVirüs paketi tarafýndan daðýtýlmýþ ortak bir kütüphaneyi temel alýrlar. Yazýlýma ait virüstabaný bilgileri OpenAntiVirus.org sitesinden alýr fakat extra virüs tanýmlamalarý da içerir.(Popüler polimorf virüsleri için de tanýmlamalar içerir)

1.1 Özellikler

* GNU GPL v2 lisansý
* POSIX kullanýþlý , taþýnabilir
* Güvenli
* Çok hýzlý
* Çok kullanýmlý
* Kullanýmý kolay
* On-access tarama (Sadece linux’ta)
* 7000’in üzerinde virüs,worm ve trojan tanýyabilir
* Sýkýþtýrýlmýþ dosya ve arþivleri destekler
* RAR(2.0),zip,Gzip,Bzip2 desteler

1.2 E-posta listeleri

3 e-posta listesi mevcut.

* announce@clamav.elektrapro.com – yeni sürümler hakkýnda bilgi için ( Ayrýca yeni Debian paketlerini duyurmak için) , 
* users@clamav.elektrapro.com – kullanýcý sorularý için
* devel@clamav.elektrapro.com -  geliþtirmek için
* virusdb@clamav.elektrapro.com – veritabaný güncelleþtirme bilgileri için

listname-subscribe@clamav.elektrapro.com  adresine boþ bir e-posta atarak veya http://clamav.elektrapro.com/ml sitesi aracýlýðý ile sizde ClamAv ile ilgili bilgiler alabilirsiniz. Boþ e-posta attýktan sonra size gelen özel mesajý cevaplamanýz gerekmektedir. Mail listeleri ;

http://archive.elektrapro.com/clamav.elektrapro.com/users/
http://archive.elektrapro.com/clamav.elektrapro.com/devel/

1.3 Virüs bildirimleri

Son güncelleþtirilmiþ hali ile ClamAV yazýlýmýnýn tespit edemediði virüsleri virus@clamav.elektrapro.com adresine bildiriniz veya virüsü bir ek gibi yollayýnýz.Eðer sisteminiz buna izin vermezse virüsü “virus” þifresi ile bir zip arþivine saklayýnýz.

2. KURULUM

2.1 Ýhtiyaçlar

zlib ve  zlib-devel paketlerine ve the gcc derleyicisine (2.9x ve 3.x desteklenmiþtir) ihtiyaç vardýr.Bunun için bzip2 kütüphanesini kurabilirsin fakat bu gerekli deðildir.

2.2 Desteklenen platformlar

Clam AntiVirus aþaðýdaki iþletim sistemleri ve mimarileri için hazýrlanmýþtýr.(Test edilen platformlar parantez içinde belirtilmiþtir.

* GNU/Linux 2.2/2.4 (Hepsinde, Intel/SPARC/Alpha/zSeries/S/390)
* Solaris 2.6/7/8/9 (Intel/SPARC)
* _ FreeBSD 4.5/6/7 5.0 (Intel/Alpha)
* _ OpenBSD 3.0/1/2 (Intel)
* _ AIX 4.1/4.2/4.3/5.1 (RISC 6000)
* HPUX 11.0
* _ SCO UNIX
* _ Mac OS X
* _ BeOS
* _ Cobalt MIPS boxes (RAQ1, RAQ2, QUBE2)
* _ Windows/Cygwin

Bazý özellikler iþletim sisteminizde çalýþmayabilir. Eðer ClamAV yazýlýmýný yukarýdaki iþletim sistemleri dýþýnda bir sistemde kullanýyorsanýz lütfen bizi haberdar ediniz.

2.3 Güncel versiyonlar

Clam AntiVirüs http://clamav.elektrapro.com sitesinden ücretsiz olarak elde edilebilir.Bu siteye ElektraPro.com tarafýndan sponsorluk desteði verilmektedir.

2.4 Binary paketleri

Linux için yüksek kalitede rpm ve deb paketi vardýr. Debian paketi Magnus Ekdahl tarafýndan idare edilmektedir ve ona http://www.debian.org adresinden ulaþabilirsiniz. RPM paketi ise Arkadiusz Miskiewicz tarafýndan idare edilirken Polish(ed) Linux Distribution tarafýndan daðýtýlmaktadýr(ftp://ftp.pld.org.pl). Ayrýca Mandrake için Oden Eriksson tarafýndan idare edilen RPM paketi mevcuttur.Bu pakete de Mandrake mirrorlarýndan ulaþabilirsiniz. AIX için binary paketlerine de AIX PDSLIB, UCLA http://aixpdslib.seas.ucla.edu/packages/clamav.html adreslerinden ulaþabilirsiniz.Resmi FreeBSD portu Masahiro Teramoto tarafýndan idare edilmektedir. OpenBSD (Flin Mueller tarafýndan) portu ise http://www.activeintra.net/openbsd/article.php?id=5 adresinde mevcuttur.



2.5 Kurulum

Lütfen README dosyasýný okuyunuz , çünkü bazý önemli bilgiler içermektedir.
Eðer Clam AV yazýlýmýný ilk defa yüklüyorsanýz , sisteminize yeni bir kullanýcý ve grup eklemeleisiniz.

# groupadd clamav
# useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav

Yukarýdaki method Linux ve Solaris üzerinde çalýþýr.Eðer sistem yöneticisi deðilseniz veya clamscan iþlemini superuser modunda yapmayacaksýnýz bu basamaðý –disable-clamav passed
to the configure scripti kulanarak atlayabilirsiniz.

$ ./configure --disable-clamav

Bu script clamav user ve grup için olan testi geçersizleþtirir.Clamscan hala clamav’a superuser modu için ihtiyaç duyar.Lütfen bu hesap için bir þifre düzenlemeyin , sadece  /etc/passwd or /etc/shadow içinde”!” ile kilitli kalmasýný saðlayýn.Bu hesap normal,ayrýcalýklý bir user olmalýdýr. Onu hiçbir ek gruba eklemeyin.clamav user/grup oluþtuktan sonra ;

$ zcat clamav-x.yz.tar.gz | tar xvf -$
cd clamav-x.yz

Varsayalým ki dosyayý /etc içine yüklediniz , o zaman paketi þu þekilde düzenlemelisiniz.

$ ./configure --sysconfdir=/etc

Halen gcc derleyici için gerekli.Diðer derleyiciler için gerekli desteðin yakýn zamanda ekleneceðini umuyoruz.

$ make
$ su -c "make install"

En son olarak yazýlýmý /usr/local dizini içinde yüklüdür ve düzenleme dosyasý da ve /etc içindedir.
UYARI : Asla Clam AntiVirus programlarýnda SUID/SGID bit düzenlemesi yapmayýn.

2.6 Düzenleme

Daemon’ý kullanacaksanýz , aþaðýdaki düzenlemeleri yapmalýsýnýz.

$ clamd
ERROR: Please edit the example config file
/etc/clamav.conf.

Þimdi düzenleme dosyanýzýn nerede olduðunu biliyorsunuz ;). Dosya ile ilgili format ve seçenekler clamav.conf dosyasý içinde tanýmlanmýþtýr.clamd düzenlemesi nispeten daha kolaydýr , düzenleme dostasý iyi açýklanmýþtýr. “Example” talimatýný silmeyi unutmayýnýz.
Bir baþka önemli özelliði , Dazuko modülüne dayanan , on-access tarama yapabilmesidir (http://dazuko.org sitesinde mevcuttur) Bu modül clamd’i çalýþtýrmak için gerekli deðildir ayrýca Dazuko modülünü  imalat sistemlerinde çalýþtýrmamanýz tavsiye edilir.
Clamd’ýn bir baþka özelliði de “Clamuko.(Dazuko’nun komik bir ismi , fakat ne anlama geldiðini bilmiyorum)” diye çaðýrýlan Dazuko ile iletiþim kumak için güvenilir olmasýdýr. Calmuko Linux 2.2 ve 2.4’te desteklenmiþtir. Kurulum için ;

$ tar zxpvf dazuko-a.b.c.tar.gz
$ cd dazuko-a.b.c
$ make dazuko
or
$ make dazuko-smp (for smp kernels)
$ su
# insmod dazuko.o
# cp dazuko.o /lib/modules/‘uname -r‘/misc
# depmod –a

Linux daðýtýmýnýza baðlý olarak , “dazuko”’yu /etc/modules veya 

modprobe dazuko

aþaðýdaki çizgiye eklemeniz gerekmektedir , böylece dazuko’yu boot zamanýnda load edebilirsiniz.Ayrýca /dev/dazuko aygýtýný oluþturmanýz gerekmektedir:

$ cat /proc/devices | grep dazuko
254 dazuko
$ su -c "mknod -m 600 /dev/dazuko c 254 0"

Þimdi clamav.conf dosyasý içinde Clamuko’yu düzenlemelisiniz. 3.2 bölümünden bakabilirsiniz.

2.7 Test

Pekala , þimdi biraz test yapalým ve aþaðýdaki dizini tarama yapmaya çalýþalým:

$ clamscan -r -l scan.txt clamav-x.yz

clamav-x.yz/test dizinlerinde virüsler bulmalý.Bu durumu oluþturulan log dosyasýndan kontrol edebilirsiniz.-scan.txt. clamscan seçenekleri hakkýnda daha fazla bilgiyi clamscan(1) manual içinde bulabilirsiniz. Clamd’ý test edebilmek için öncelikle clamdscan’i kullanmamýz gerekmektedir.(Ayrýca clamd’a direkt olarak baðlanabilir ve SCAN komutunu kullanarak çalýþtýrabilirsiniz.)

$ clamdscan -l scan.txt clamav-x.yz





2.8 Güncel Clam (Freshclam): Otomatik güncelleme

freshclam Clam AntiVirüs için varsayýlan otomatik güncelleþtiricidir. 2 þekilde çalýþýr.
* Ýnteraftif –from command line
* Daemon gibi – yalnýz,sessizce çalýþýr.
Eðer superuser modunda çalýþýrsa bazý ayrýcalýklara sahip olunur, varsayýlan olarak clamav olarak çalýþýr.freshclam veritabanýný Clam AntiVirüs’ün ana sayfasýndan alýr ve MD5 toplamý kullanarak tutarlýlýðýný kontrol eder. freshclam’ý ( root gibi) parametresiz kullanýrsanýz doðru çalýþýp çalýþmadýðýný kontrol edebilirsiniz. Eðer her þey olumluysa log dosyasýný /var/log içinde oluþturabilirsiniz :

# touch /var/log/clam-update.log
# chmod 600 /var/log/clam-update.log
# chown clamav /var/log/clam-update.log

Þimdi freshclam’i bir daemon olarak çalýþtýrabilirsiniz.

# freshclam -d -c 2 -l /var/log/clam-update.log

Yukarudaki baþlangýç scriptini eklerseniz , iki günde bir yeni bir bilgi için veritabanýný kontrol eder.  Bir benzer kodu root yada clamav bölümlerine eklemelisiniz :

0 8 * * * /usr/local/bin/freshclam --quiet -l /var/log/clam - update.log

Sisteminizde Proxy desteði varsa aþaðýdaki komut ile her gün saat 8:00 ‘de yeni bir bilgi için veritabanýný kontrol ettirebilirsiniz. $http_ proxy, eg. Ýle çevre deðiþkenlerini ayarlayabilirsiniz.

export http_proxy="my.proxy.server:8080"

bunun dýþýnda –http-proxy ve –proxy-user seçenekleri de mevcuttur.

2.9 FreshClam: Mirror’lar ve mirrors.txt

Ana sunucu clamav.elektrapro.com ve aþaðýdaki mirrorlar mevcut;
* clamav.ozforces.com – elle güncelleþtirilen veritabaný mirror’ý 
* clamav.essentkabel.com – otomatik olarak güncelleþtirilen ana siteye ait mirror
* clamav.linux-sxs.org – veritabaný mirror’ý (ozforces’dan rsnyc’e)

Veritabaný dizininde freshclam’in güncelleþtirmeler için her seferinde okuduðu mirror.txt dosyasýný bulacaksýnýz. Önceki sunucu uygun deðilse , dosyayý birinci sunucu için kullanacak ve bir diðeri ile deðiþtirecek (ve bazý zamanlar için bu pozisyonu hatýrlayacak).Eðer daha hýzlý bir mirror bulursanýz dosyayý deðiþtirebilirsiniz fakat bazý sakýncalarý olabilir.

3. Kullanma

3.1 Clam daemon

clamd libclamav’a dayanan çok kullanýmlý bir iþ parçacýðýdýr.Aþaðýdaki soketlerden herhangi biri ile çalýþabilir ;
* Unix (yerel) soketler
* TCP soketleri
Daemon clamav.conf dosyasý ile düzenlenir.Bununla ilgili açýklamalarý clamav.conf(5) içinde bulabilirsiniz. Clamd aþaðýdaki komutlarý tanýr.

* PING “PONG” komutu ile cevaplanýr.Sunucunun bulunduðu eyaleti,ülkeyi kontrol eder.
* VERSION Versiyon ile ilgili bilgileri verir.
* RELOAD Veritabanýný yeniden yükler.
* QUIT Temiz bir çýkýþ yapar.
* SCAN dosya/dizin Arþiv desteði ile birlikte bir dosya veya dizin üzerinde tarama yapar. Bütün yol gereklidir.
* RAWSCAN dosya/dizin  Arþiv desteði olmadan bir dosya veya dizin üzerinde tarama yapar. Bütün yol gereklidir.
* CONTSCAN Arþiv desteði ile birlikte bir dosya veya dizin üzerinde tarama yapar. Bir virüs bulunduðu zaman da taramaya devam eder. Bütün yol gereklidir.
* STREAM Bu komut ile clamd “PORT numarasý” verir. Bu porta baðlantý kurabilir ve üzerinde tarama yapýlmasý için bir dosya gönderebilirsiniz.

Dahili iþ parçacýklarý dýþarýdan gelen sinyalleri yok sayar (clamuko hariç) . Ana iþ parçacýðý SIGTERM VE SIGINT sinyallerini kullanýr ve bunlardan biri sýkýþtýðý zaman uygun bir çýkýþ gerçekleþtirir.

3.2 Clamuko

Clamuko clamd’da Linux altýnda on-access taramasý gerçekleþtirebilen özel bir iþ parçacýðýdýr.Ýstemci (clamuko) ve sunucu (clamd) modeli Dazuko tarafýndan halen desteklenmemektedir.Mevcut durumun bazý yararlarý vardýr – clamuko clamd ile birlikte ortak bir veritabanýný paylaþýr ve RELOAD komutu ile birlikte güncelleþtiriliyor. Clamuko’yu kullanýrken aþaðýdaki prensiplere uymanýz gerekmektedir. 

* Daemon’u QUIT komutu veya SIGTERM sinyali ile durdurun.Aksi takdirde bilgisayar yeniden baþlatýldýðýnda korumalý dosyalara eriþimi kaybedebilirsiniz.
* E-posta tarayýcýnýn ekleri açmak için kullandýðý dizini asla koruma altýna almayýn.Çünkü virüslü dosyalara eriþim bloklanabilir ve tarayýcý virüsleri tespit edemeyebilir.Virüslü mailler adreslere teslim edilebilir.

clamav.conf dosyasýndan clamuko’yu aktif hale getirmelisiniz.Dizini /home korumak için aþaðýdaki seçeneði kullanýn :

ClamukoIncludePath /home

Bütün sistemi korumak için :

ClamukoIncludePath /
ClamukoExcludePath /proc
ClamukoExcludePath /tempdir/of/mail/scanner
Clamuko’yu Samba/Netatalk üzerindeki dosya eriþimini korumak için kullanabilirsiniz.NFS desteklenmemektedir (Dazuko NFS eriþim çaðrýlarý ile kesiþmemektedir).Bir diðer fikir- bazý popüler davranýþlarýn iþaretlerini ihtiva eden bir veritabaný inþa etmektir.Bu sizi script-kiddies’e karþý koruyacaktýr.

3.3 Arþivler ve sýkýþtýrýlmýþ dosyalar

Clam AntiVirüs LibClamAv’a baðlýdýr. Aþaðýdaki formatlar için destek verir : 

* Zip
* Gzip
* RAR(sadece 2.0 için)

Zlib kütüphanesine Zip/Gzip desteði için ihtiyaç vardýr. Zip arþivleri Guido Draheim ve Tomi Ollila tarafýndan hazýrlana zziplib kütüphanesi ile iletiþim halindedir. RAR desteði ise Christian Scheurer ve Johannes Winkelmann tarafýndan hazýrlanan UniquE RAR dosya kütüphanesine baðlýdýr.Ýkisi de clamav kaynaklarýna biraz deðiþtirilerek eklenmiþtir. Unrarlib sadece RAR 2.0 arþivine destek verir ve Christian’a göre yeni format ( WinRAR 3.0’da sunulmaktadýr) desteklenmemektedir.
Daemon sadece libclamav tarafýndan desteklenen arþivleri tarar.Clamscan kodlarla inþa edilmiþ bir arþivi taramaya çalýþýr fakat baþarýsýz olur , çünkü harici unpacker’la uyuþamaz.

$ clamscan --unrar rarfail.rar
/home/zolw/Clam/test/rarfail.rar: RAR module failure.
UNRAR 3.00 freeware Copyright (c) 1993-2002 Eugene Roshal
Extracting from /home/zolw/Clam/test/rarfail.rar
Extracting test1 OK
All OK
/tmp/44694f5b2665d2f4/test1: ClamAV-Test-Signature FOUND
/home/zolw/Clam/test/rarfail.rar: Infected Archive FOUND

clamscan birçok popüler sýkýþtýrma programý ile uyumludur  - her format için harici programlarý kullanýr.Eðer tarayýcý superuser modunda çalýþtýrýlýrsa clamav sayesinde iþlem daha çok güvenli gerçekleþir.Ayrýca clamav kullanýcýlarý bütün taranmýþ olan sýkýþtýrýlmýþ dosyalarý okuyabilir,kullanabilir.Eðer bütün dizinleri alt dizinleri ile birlikte taramak istiyorsanýz , süzgeç taramasýný –r (-recursive) seçeneðini kullanarak aktifleþtirebilirsiniz , ayrýca arþivlerin içindeki alt arþivlerde taramaya tabi tutulur.Eðer arþivlerin içindeki dosyalar virüslü ise sadec korumak için arþivin kendisi taranýr (arþiv olmayabilir) Lütfen aþaðýdaki seçeneklere bakýnýz.Her seçenek kendine ait bir deðiþkene sahiptir.Eðer $PATH içinde bulunamýyorsa lütfen ekleyin.Çünkü Clam AntiVirüs GNU seçenek formatýna sahiptir. “=” iþaretini deðiþken ve seçenek arasýnda kullanmayý unutmayýnýz.Örnek olarak –unzip=/path/to/unzip.

-unzip : Bu seçeneðe ihtiyacýnýz yok çünkü Zip libclamav tarafýndan desteklenmektedir.Eðer libclamav bazý dosyalarý unzip etmekte baþarýsýz olursa,bu olay faydalý olabilir.clamscan UnZip 5.41 of 16 April 2000, by Info-ZIP tarafýndan test edilmiþtir.
-unrar : UNRAR 3.0 ile test edilmiþtir.
-unace : UNACE v1.2’in halk versiyonu tarafýndan desteklenen seçenekleri kullanýr, test edilmemiþtir fakat çalýþmaktadýr.
-arj : arj 3.10b tarafýndan test edilmiþtir.
-zoo : zoo 2.1 tarafýndan test edilmiþtir.
-lha : LHa for Unix V 1.14e tarafýndan test edilmiþtir.
-jar : CA jar dosyalarý için unzip’i kullanýr. UnZip 5.41 of 16 April 2000 tarihinde info-ZIP tarafýndan test edilmiþtir.
-tar : Bu seçenek sýkýþtýrýlmamýþ dosyalarý destekler. GNU tar 1.13.17. tarafýndan test edilmiþtir.
-deb : Bu seçenek debian binary paketleri tarafýndan desteklenir. GNU ar 2.12.90.0.14. tarafýndan test edilmiþtir.-tgz’yi beraberinde getirir ve –tgz=FULLPATH ile uyuþur.
-tgz :Bu seçnek .tar.gz ve tgz formatlarýný destekler.Linux olmayan bir sistemde muhtemelen gtar olarak bilinmektedir.Eðer $PATH içinde ise sadece kullanýn yada bütün yolu bir deðiþken olarak bu seçneðe ekleyin.

3.4 Çýktý formatý

clamd clamscan ile çýktý formatýnda uyum gösterir.

zolw@Wierszokleta:˜$ telnet localhost 3310
Trying 127.0.0.1...
Connected to localhost.
Escape character is ’ˆ]’.
SCAN /home/zolw/infected
/home/zolw/infected/sobre.com: W32/Magistr.B FOUND
Connection closed by foreign host.

SCAN modunda ilk virüs bulunduðu zaman baðlantýyý keser.Arþivin durumuna göre çýktý normal dosyalarla ayný olur.

SCAN /home/zolw/Clam/test/test2.zip
/home/zolw/Clam/test/test2.zip: ClamAV-Test-Signature FOUND

CONTSCAN bulunmuþ olan bütün virüslü dosyalarý görüntüler.Hata mesajlarý aþaðýdaki formatta yayýnlanýr.

SCAN /no/such/file
/no/such/file: Can’t stat() the file ERROR

ve onlar kolayca ayrýþtýrýlýr.
clamscan bütün mesajlarý stderr’e yazar.(sadece yardom varsayýlan olarak stdout içine yazýlýr.) Bazý durumlarda –stdout komutu ile onu yeniden stdout’a yönlendirmek isteyebilirsiniz. stdout stdderr’nin arabelleðine zýttýr.bu yüzden clamscan her mesajdan sonra bu ara belleði çýktýda oluþabilecek hatalara karþý korunmak için temizler. Tarama yaparken aþaðýdaki gibi çýktýlar oluþur.

/TEST/test: OK
/TEST/Makefile: OK
/TEST/getopt.c: OK
/TEST/virfile: Phantom #1 FOUND 

Bir virüs bulunduðu zaman onun ismi bulunduðu dosya ile birlikte yazýlýr.Eðer virüs bir arþivin içinde bulunursa Infected Archive olarak mimlenir. Bu arþiv virüslü dosya olarak sayýlmaz sadece bu tür dosyalar o arþivin içinde yer alýr.Bu durumu internal unarchiving ile karýþtýrmayýn çünkü bu libclamav tarafýndan gerçekleþtirilir , clamscan virüslü dosyanýn arþivin içinde olup olmadýðýný bilemez.

4. Uygun Yazýlým

  Aþaðýdaki yazýlým ClamAV.ý desteklemektedir.ClamAV.  desteklenen elemanlarý belirtmiþtir.
Eðer program Clamd’ý desteklemezse Clamdscan yerine Clamscan’ý kullanabileceðinizi lütfen
unutmayýn

4.1 clamav-milter

Eriþim:  clamav paketinde bulunur.
Destekleyen: clamd

clamav-milter  Nigel Horne tarafýndan yazýlmýþtýr ve mail yollamak için dizayn edilmiþ çok hýzlý bir e-mail tarayýcýsýdýr.”C” dilinde yazýlmýþtýr .(Nigel tarafýndan) ClamAV   mail tarayýcýsýný kullanýr.
Yükleme:
bir tane libmilter geliþmiþ dosyasýna ihtiyacýnýz var. Ýlk önce ClamAV’ý ;

$ ./configure --enable-milter
 16
ile configüre edin ve yeniden derleyin. program /usr/local/sbin/clamav-milter üzerine yüklenir.
Aþaðýdaki açýklamalar Nigel’in  INSTALL dosyasýndan alýnmýþtýr: /etc/mail/sendmail.mc:’e
Ekleyin.

INPUT_MAIL_FILTER(‘clmilter’,‘S=local:/var/run/clmilter.sock,
F=, T=S:4m;R:4m’)dnl
define(‘confINPUT_MAIL_FILTERS’, ‘clmilter’)

 Girdileri formun clamav.conf  bölümünde kontrol edin:

LocalSocket /var/run/clamd.sock
ScanMail
SaveStreamToDisk

 Clamav-milter’ý baþlatýn:

/usr/local/sbin/clamav-milter -blo /var/run/clmilter.sock

ve  sendmaili yeniden baþlatýn.

4.2 mod clamav

Eriþim: http://software.othello.ch/mod\_clamav
Destekleyen: libclamav, clamd

mod clamav bir  Apache virus tarama filtresidir. Andreas Mller tarafýndan yazýlmýþ ve geliþtiril-
miþtir. Proje çok iyi dökümanlaþtýrýlmýþtýr ve çok kolay yüklenir.

4.3 TrashScan

Eriþim: clamav-sources/support/trashscan
Destekleyen: clamscan

 procmail tabanlý gerçekten yüklemesi kolay bir tarayýcýdýr .Ama sadece basit kullanýcýlar içindir. MTA tabanlý tarayýcýlar için yeterli deðildir.
17
4.4 AMaViS - ”Next Generation”(Yeni Nesil)

Eriþim: http://sourceforge.net/projects/amavis
Destekleyen: clamscan
AMaViS  amavis-perl/amavisd ýnyeniden yazýlmýþ daha modüler versiyonudur.Hilko Bengen tarafýndan geliþtirilmiþtir.

Yükleme:
 Lütfen yeni versiyonunu yükleyiniz(en az 0.1.4). yüklemeden sonra(çok kolay ve hýzlýdýr), lütfen aþaðýdaki satýrý  amavis.conf a uncomment edin

virus-scanner = CLAM

 ve en sonunda  [CLAM]  bölümündeki clamscana giden yolu deðiþtirin:

[CLAM]
clamscan = /usr/local/bin/clamscan

4.5 amavisd-new(yeni)

Eriþim: http://www.ijs.si/software/amavisd
Destekleyen: clamd, clamscan
amavisd-new Mark Martinec tarafýndan geliþtirilen amavisin yeniden yazýlmýþ versiyonudur.

Yükleme:
Eðer amavisd-new baþlatma zamanýnda clamscan binary bulunursa clamscan otomatik olarak eriþilebilir.  clamd girdileri  @av scannerslist, file /etc/amavisd.conf. adresinde uncomment edilerek aktive edilir.

4.6 Qmail-Scanner

Eriþim: http://qmail-scanner.sf.net
Destekleyen: clamscan

Softlimit deðerini yükseltmelisiniz yada daemon desteði için beklemelisiniz.

4.7 Sagator

Eriþim: http://www.salstar.sk/sagator
Destekleyen: clamscan, clamd, libclamav
 18
Bu program bir e-mail antivirüs/antispam gatewayidir. postfixe (yada baþka bir smtpd) bir arayüzdür,antivirus ve/veye spamchecker programlarýný çalýþtýrýr. Modular mimarisi herhangi bir
antivirüs/spamchecker  programýnýn konfigürasyonu için kullanýlabilir.

4.8 ClamdMail

Eriþim: http://clamdmail.sf.net
Destekleyen: clamd
 ClamAV. Ýçin bir mail iþlemci clientidir.küçüktür ve yüklemesi hýzlýdýr.

4.9 BlackHole

Eriþim: http://www.groovy.org/blackhole.shtml
Destekleyen: clamscan, clamd

BlackHole  Qmail, Postfix, Sendmail, Exim, Courier (Chris Kennedy tarafýndan yazýlmýþ). Ýçin yazýlan geliþmiþ bir antivirüs filtresidir .genelde geliþmiþ administrator ler içindir.(yüklenmesi zordur)

4.10 MailScanner

Eriþm: http://www.mailscanner.info
Destekleyen: clamscan

MailScanner  bütün e-mailleri virüs ve spam için tarar ve güvenlik açýklarýný kollar.herhangi bir virüs tarayýcýsýna baðlý deðildir.Ama 14 deðiþik virüs tarayýcýsý kombinasyonuyla  kullanýlabilir.
“best of breed” virüs scannerini seçmeniz tavsiye edilir.

4.11 MIMEDefang
Eriþm: http://www.roaringpenguin.com/mimedefang
Destekleyen: clamscan, clamd

 Sendmail/milter için yeterli bir mail tarayýcýsýdýr.

4.12 Exiscan

Eriþim: http://duncanthrax.net/exiscan
Destekleyen: clamscan, clamd
Exiscan  Exim versiyon 4’ün  yamasýdýr.Exim tarafýndan iletilen e-mail mesajlarýna yeterli tarama desteði saðlar.Dört deðiþik tarama imkaný desteklenir:antivirüs,antispam,düzenli ifadeler ve dosya uzantýlarý.
5. LibClamAV

LibClamAV yazýlýmýnýza virüs korumasý eklemek için kullanýlabilir.kütüphanesi thread-safe dir. Otomatik olarak arþivleri tanýr ve tarar.tarama iþlemi oldukça hýzlýdýr.çoðu zaman farkýna bile varamazsýnýz.

5.1 API
 libclamav kullanan her program clamav.h baþlýk dosyasýný içermelidir:

#include <clamav.h>

Ýlk adým makine yüklemesidir,aþaðýda eriþilebilen üç fonksiyon bulunmaktadýr:

int cl_loaddb(const char *filename, struct cl_node **root,
int *virnum);
int cl_loaddbdir(const char *dirname, struct cl_node **root,
int *virnum);
char *cl_retdbdir(void);

cl loaddb() birim zamanda bir veri tabaný oluþturur, cl loaddbdir() bütün.db ve .db2 dosyalarýný
dizinden yükler  dirname. cl retdbdir()  hardcoded veritabaný dizini yoluna döner. Veritabaný root  altýnda kaydedilecektir ve yüklenen signature sayýsý virnum a eklenir.  tree structure a (trie, bak 7.2)  giden pointer son olarak  NULL deðerini point eder.eðer üçüncü argüman olarak NULL deðeri yüklenen   signaturelarýn sayýsýný kaydetmezsen cl loaddb fonksiyonu 0  a döner ve diðer deðerler de hata verir (failure).

struct cl_node *root = NULL;
int ret;
ret = cl_loaddbdir(cl_retdbdir(), &root, NULL);
20
 libclamav’ýn hata kodlarýný print etmenin kolay bir yolu vardýr:

char *cl_perror(int clerror);

cl perror()  string açýklamalý clerror koda dön:

if(ret) {
printf("cl_loaddbdir() error: %s\n", cl_perror(ret));
exit(1);
}

Veritabaný yüklendiðinde, propertrie ýaþaðýdaki kodlarla oluþturmalýsýnz:

void cl_buildtrie(struct cl_node *root);




Örneðimizde:

cl_buildtrie(root);

Tamam,þimdi bir buffer, descriptor yada dosyayý aþaðýdaki kodlarla scan edebilirsiniz:

int cl_scanbuff(const char *buffer, unsigned int length,
char **virname, const struct cl_node *root);
int cl_scandesc(int desc, char **virname, unsigned long int
*scanned, const struct cl_node *root, const struct cl_limits
*limits, int options);
int cl_scanfile(const char *filename, char **virname,
unsigned long int *scanned, const struct cl_node *root,
const struct cl_limits *limits, int options);

Bütün fonksiyonlar virüs adlarýný adresini virname pointerýnýn altýna kaydeder. cl scandesc()Ve  cl scanfile() taranan verinin deðerini CL COUNT PRECISION ünitesinde arttýrabilirler.Ayrýca arþiv limitlerini de desteklerler:

struct cl_limits {
int maxreclevel;
int maxfiles;
long int maxfilesize;
};
21
Son argüman scan engineni koknfigüre eder. Daha sonra CL ARCHIVE(arþiv taramasýna eriþebilir), CL RAW(arþiv taramasýna eriþemez) ve CL MAIL(mbox ve Maildir taramasýna eriþebilir ) ile destek saðlar. Eðer virüs yoksa fonksiyon  0 a döner(CL CLEAN)   CL VIRUS ;Eðer virüs bulunursa yada herangi bir deðer bozuksa.

struct cl_limits limits;
char *virname;
/* maximal number of files in archive */;
limits.maxfiles = 100
/* maximal archived file size == 10 Mb */
limits.maxfilesize = 10 * 1048576;
/* maximal recursion level */
limits.maxreclevel = 8;
if((ret = cl_scanfile("/home/zolw/test", &virname, NULL, root,
&limits, CL_ARCHIVE)) == CL_VIRUS) {
printf("Detected %s virus.\n", virname);
} else {
printf("No virus detected.\n");
if(ret != CL_CLEAN)
printf("Error: %s\n", cl_perror(ret));
}

Birden fazla dosyayý scan etmek istiyorsanýz trie aþaðýdaki kodla relased edilmelidir:

void cl_freetrie(struct cl_node *root);

Calamav kaynaklarýndan birkaç örnek bulacaksýnýz. Libclamavtý kullanan her program ona link olmalýdýr:

gcc -Wall ex1.c -o ex1 -lclamav

Baþarýlar !
    22
6. Problem Çözme

6.1 Return kodlarý

Return kodlarý çok kullanýþlýdýr, özellikle sistem scriptlerinde.Return kodlarýný clamscan ‘dan aþaðýdaki kodlarla kontrol edebilirsiniz :

$ echo $?

Ýþte size clamscan return kodlarýnýn bir listesi:

0: Virüs bulunamadý .
1: Virüs(ler) bulundu.
40: Bilinmeyen opsiyon clamscan e geçti.lütfen yardýmý kontrol edin.
50: Virüs veritabaný yüklemesinde hata oluþtu.Default ayarlarýndan kaynaklanmýyor yada yanlýþ bir dosya veritabanýna geçmiþ olabilir.
51: Yanlýþ sayýda  threads  –threads e geçti.Doðal sayý 0
52: Desteklenmeyen Dosya tipi. tarayýcý düzenli dosyalarý, dizinleri ve symlinksleri destekler.
53: Dizini açamýyor
54: Dosyayý açamýyor.5
55: Dosya okumasý hatasý okunan medium kýrýlmýþ olabilir. 5
56: Giriþ dosyasýný ve dizinini baþlatamýyor.Taramak istediðiniz dosya / dizin mevcut deðil.
58: I/O hatasý. Lütfen dosya sisteminizi kontrol edin.
59: Kullanýcý bilgileri alýnamýyor (clamscan  çalýþýrken).
60: kullanýcý clamavýndan yeterli bilgi alýnamýyor  (önceliði olmayan kulanýcý)  /etc/passwd de yok.

5 sadece bir dosya modunda ( recursive modda bu hatalar düzeltilir)
 23
61:Fork edemiyor,yeni iþlem yapamýyor.Lütfen limitinizi kontrol edin
63: Geçici dizin yad dosya oluþturamýyor.Lütfen haklarýnýzý kontrol edin.
64: Geçici dizin yazmýyor lütfen baþka bir tane bildirin
70: Hafýzayý ayýrýp,temizleyemiyor,bu kritik bir hata lütfen sisteminizi kontrol edin.
71: hafýzayý ayýramýyor.

7. Teknik kýsým

7.1 Güvenlik

Clam Antivirüs programý öncelikle güvenliði düþünür. Tehlikeli iþlemler clamscande (geçici  dosya oluþturma yada unlink() iþlemleri gibi)  clamav.ayrýcalýðý ile yapýlýr. Ama bilirsiniz ki hatasýz program yoktur. Bu daha çok yeni bir çalýþma ve her þey mümkündür. Bazý yerlerde snprintf() fonksiyonu kullanýlýr, Bazý eski sistemler(C kütüphanesi) bu fonksiyonu kontrol etmezler.Bu örnek gösterir ki yapmanýz gereken ilk þey sisteminizi kontrol etmek olmalýdýr.Hiçbir zaman  Clam AntiVirus uygulamasýna SUID/SGID bitlerini kurmayýn.EðerSUID bit kurulursa sistemdeki tüm dosyalar –log özelliðiyle modifiye olabilir. Normal kulanýcýlar clamscan ý  kendi þahsi dosyalarýný taramak için kullanýrlar,diðer dosyalar onlarý alakadar etmez .Clam AntiVirus Daemon  güvenlikl düþüncesi ile yazýlmýþtýr,dýþ saldýrýlara izin vermez ve birkaç extra korumaya sahiptir.

7.2 Scan engine

Clam AntiVirüs ün yeni versiyonunda  Aho-Corasick model eþleþtirme algoritmasý kullanýlmaktadýr.Bu algoritma sonlu sabit model eþleþtirme  automatonunu kulanýr[1]. Algoritmanýn kendisi Knuth-Morris-Pratt algoritmasýnýn genellemesidir.Veri tip tanýmlamasý için lütfen matcher.h ye bakýnýz. automaton  trie ile yeniden sunulmuþtur. Trie spesifik özellikleri olan köklü bir aðaç gibidir [2].triedeki her bir nod automatonun bir parçasýdýr.Tanýmlamada node aþaðýdaki gibi tanýmlanmýþtýr:

struct node {
int islast;
struct patt *list;
int maxpatlen;
struct node *next[NUM_CHILDS], *trans[NUM_CHILDS], *fail;};