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;};