<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <meta name="keywords" content="ClamAV, Sendmail, clamav-milter, AntyVir, Linux, UNIX"> <meta name="description" content="::: ClamAV / Sendmail / clamav-milter :::"> <meta name="author" content="doozer"> <title>::: ClamAV / Sendmail / clamav-milter :::</title> <style type="text/css"> P { font-size : 12px; font-style : normal; color : #000000; font-family : verdana, arial, helvetica, sans-serif; text-decoration : none; text-align : justify; } A { font-size : 12px; font-style : normal; font-weight : bold; color : #4457c9; font-family : verdana, arial, helvetica, sans-serif; text-decoration : none; } A:Visited { font-size : 12px; font-style : normal; font-weight : bold; color : #4457c9; font-family : verdana, arial, helvetica, sans-serif; text-decoration : none; } A:Active { font-size : 12px; font-style : normal; font-weight : bold; color : #4457c9; font-family : verdana, arial, helvetica, sans-serif; text-decoration : none; } A:Hover { color : #000000; font-size : 12px; font-style : normal; font-weight : bold; font-family : verdana, arial, helvetica, sans-serif; text-decoration : none; } BODY { font-size : 12px; font-style : normal; color : #000000; font-family : verdana, arial, helvetica, sans-serif; background-color : #ffffff; text-decoration : none; text-align : left; margin: 0; } PRE { color: #000080; font-size: 12px; border: 1px solid #000000; padding: 3pt; background-color: #dddddd; font-family : verdana, arial, helvetica, sans-serif; } TABLE { border-collapse: collapse; border-color: #000000; border: 0; background-color: #ffffff; } TD { font-size : 12px; font-style : normal; font-weight : normal; color : #000000; font-family : verdana, arial, helvetica, sans-serif; text-decoration : none; border-color: #000000; } TD.rtw { font-size : 12px; font-style : normal; font-weight : normal; color : #ffffff; font-family : verdana, arial, helvetica, sans-serif; text-decoration : none; border-color: #000000; } TD.rall { border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; border-color: #000000; } TD.rl { border-left-width: 1pt; border-left-style: solid; border-top-width: 0pt; border-top-style: none; border-right-width: 0pt; border-right-style: none; border-bottom-width: 0pt; border-bottom-style: none; border-color: #000000; } TD.rt { border-left-width: 0pt; border-left-style: none; border-top-width: 1pt; border-top-style: solid; border-right-width: 0pt; border-right-style: none; border-bottom-width: 0pt; border-bottom-style: none; border-color: #000000; } TD.rt_dddddd { border-left-width: 0pt; border-left-style: none; border-top-width: 1pt; border-top-style: solid; border-right-width: 0pt; border-right-style: none; border-bottom-width: 0pt; border-bottom-style: none; border-color: #dddddd;; } TD.rlr { border-left-width: 1pt; border-left-style: solid; border-right-width: 1pt; border-right-style: solid; border-color: #000000; } TD.rlr_b { border-left-width: 4pt; border-left-style: solid; border-right-width: 4pt; border-right-style: solid; border-color: #000000; } TD.rlb { border-left-width: 1pt; border-left-style: solid; border-top-width: 0pt; border-top-style: none; border-right-width: 0pt; border-right-style: none; border-bottom-width: 1pt; border-bottom-style: solid; } TD.rltr { border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 0pt; border-bottom-style: none; } TD.rltr_b { border-left-width: 4pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 4pt; border-right-style: solid; border-bottom-width: 0pt; border-bottom-style: none; } TD.rrb { border-left-width: 0pt; border-left-style: none; border-top-width: 0pt; border-top-style: none; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; } TD.rr { border-left-width: 0pt; border-left-style: none; border-top-width: 0pt; border-top-style: none; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 0pt; border-bottom-style: none; } TD.rltb { border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 0pt; border-right-style: none; border-bottom-width: 1pt; border-bottom-style: solid; } TD.rlt { border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 0pt; border-right-style: none; border-bottom-width: 0pt; border-bottom-style: none; } TD.rtr { border-left-width: 0pt; border-left-style: none; border-top-width: 1pt; border-top-style: solid; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 0pt; border-bottom-style: none; } TD.rlrb { border-left-width: 1pt; border-left-style: solid; border-top-width: 0pt; border-top-style: none; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; } TD.rlrb_b { border-left-width: 4pt; border-left-style: solid; border-top-width: 0pt; border-top-style: none; border-right-width: 4pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; } TD.rallwl { border-top-width: 1pt; border-top-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; border-right-width: 1pt; border-right-style: solid; border-left-width: 0pt; border-left-style: none; } TD.rbottom { border-bottom-width: 1pt; border-bottom-style: solid; border-left-width: 1pt; border-left-style: solid; border-right-width: 1pt; border-right-style: solid; } TD.rlrbdotted { border-left-width: 1pt; border-left-style: dotted; border-top-width: 0pt; border-top-style: none; border-right-width: 1pt; border-right-style: dotted; border-bottom-width: 1pt; border-bottom-style: dotted; } TD.rbdotted { border-left-width: 0pt; border-left-style: none; border-top-width: 0pt; border-top-style: none; border-right-width: 0pt; border-right-style: none; border-bottom-width: 1pt; border-bottom-style: dotted; } TD.rn { border-left-width: 0pt; border-left-style: none; border-top-width: 0pt; border-top-style: none; border-right-width: 0pt; border-right-style: none; border-bottom-width: 0pt; border-bottom-style: none; border-color: #dddddd; } IMG { padding: 0; border: 0; border-color: #000000; } .rfoot { border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; border-color: #000000; } .rfoot:link { color: #000000; text-decoration: none; border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; border-color: #000000; } .rfoot:hover { border: 1px solid #0A246A; background-color: #B6BDD2; color: #000000; border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; border-color: #000000; } .rfoot:visited { color: #000000; text-decoration: none; border-left-width: 1pt; border-left-style: solid; border-top-width: 1pt; border-top-style: solid; border-right-width: 1pt; border-right-style: solid; border-bottom-width: 1pt; border-bottom-style: solid; border-color: #000000; } </style> </head> <body bgcolor="#ffffff"> <center> <a name="#begin"> </a> <table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"> <tr> <td bgcolor="#dddddd" width="100%" align="left" height="20" class="rn"></td> </tr> </table> <!-- LOGOTABLE --> <table width="100%" align="center" cellpadding="10" cellspacing="0" border="0"> <tr> <td bgcolor="#dddddd" width="8%" align="left" height="100" class="rt_dddddd"></td> <td bgcolor="#ffffff" width="24%" align="left" height="100" class="rlt"><img src="clam.png" alt="ClamAV Logo"></td> <td bgcolor="#ffffff" width="60%" align="left" height="100" class="rtr"> <b><font size="-1">ARTYKU£ Z SERII</font></b><br> <b><font size="+1">Ochrona antywirusowa z wykorzystaniem ClamAV</font></b><br><br> <font size="+1">Jak zmusiæ Sendmaila do pracy z ClamAV</font> </td> <td bgcolor="#dddddd" width="8%" align="left" height="100" class="rt_dddddd"></td> </tr> </table> <!-- end LOGOTABLE --> <!-- TOPTABLE --> <table width="100%" align="center" cellpadding="10" cellspacing="0" border="0"> <tr> <td bgcolor="#dddddd" colspan="1" valign="top" align="left" width="8%" height="200"> </td> <td colspan="1" valign="top" align="left" width="84%" height="200" class="rlrb"> <br><b>Nowo¶ci</b> <br>W wersjach <= 0.65 ClamAV wykryty zosta³ b³±d, którego wykorzystanie dokonuje DoS demona <i>clamd</i> <br>W po¶piechu zosta³a wiêc wydana wersja 0.66, która posiada³a kilka niedoci±gniêæ. Obecnie zalecan± wersj± stabiln± jest 0.67 <br> <br><br><b>Spis tre¶ci</b> <br><b>1.</b> <a href="sendmail_clamav.html#a1">Wprowadzenie</a> <br><b>2.</b> <a href="sendmail_clamav.html#a2">Jak to dzia³a?</a> <br><b>3.</b> <a href="sendmail_clamav.html#a3">Zapotrzebowanie na oprogramowanie</a> <br><b>4.</b> <a href="sendmail_clamav.html#a4">Konfiguracja serwera Sendmail</a> <br><b>5.</b> <a href="sendmail_clamav.html#a5">Kompilacja ClamAV</a> <br><b>6.</b> <a href="sendmail_clamav.html#a6">Uruchamianie</a> <br><b>7.</b> <a href="sendmail_clamav.html#a7">Obserwacje i analiza logów</a> <br><br><br> Po d³uuugiej przerwie, nasz³a mnie znów ochota na przygotowanie jakiego¶ ma³ego HOWTO.<br> Tym razem zajmê siê odwiecznym problemem wirusów, które pustosz± komputery naszych biednych<br> userów i ich wspania³e windowsy :) <a name="a1"> </a> <br><br><br><b>1. Wprowadzenie</b> <br><br>Jak ju¿ w tytule mogli¶cie przeczytaæ, opiszê sposób w jaki mo¿na po³±czyæ <a href="http://www.sendmail.org/">Sendmaila</a> z tworzonym na licencji GPL, programem antywirusowym <a href="http://www.clamav.net/">ClamAV</a>. Projekt zapocz±tkowany zosta³ przez Tomasza Kojma a obecnie rozwijany jest przez <a href="http://www.clamav.net/team.html">miêdzynarodowy zespó³ programistów</a>.<br> W chwili powstawania tego HOWTO, ostatni± stabiln± wersj± ClamAV by³ 0.65 tak wiêc wszelkie pliki konfiguracyjne i rozwi±zania bêd± omawiane w oparciu o tê wersjê. Zachêcam was równie¿ do prób ze <a href="http://www.clamav.net/snapshot/">snapshotami</a>. Mo¿na tam znale¼æ naprawdê wiele nowych i przydatnych funkcji. <a name="a2"> </a> <br><br><br><b>2. Jak to dzia³a?</b> <br><br>Na pocz±tek krótko opiszê zasadê dzia³ania takiego rozwi±zania. <br>Gdy kto¶ wysy³a pocztê do u¿ytkownika, którego konto znajduje siê na naszym serwerze, wówczas serwer pocztowy,<br> (MTA - <i>Mail Transfer Agent</i>) w tym przypadku Sendmail, odbiera j± a nastêpnie je¶li przesy³ka spe³nia odpowiednie wymagania, zapisuje j± jako now± pocztê dla konkretnego u¿ytkownika. Zanim jednak taka przesy³ka trafi jako nowy e-mail, zostaje poddana serii testów i musi przej¶æ przez odpowiednie filtry (zupe³nie jak student w sesji :>). <br><br>Sendmail posiada wspania³y mechanizm do zarz±dzania zawarto¶ci± e-maili jakim jest <a href="http://www.milter.org/">milter</a> (<i>Sendmail's Content Management API</i>). Ogólnie mówi±c, milter to pewien rodzaj wewnêtrznego API Sendmaila, które pozwala na pe³ne zarz±dzanie zawarto¶ci± przesy³ek; tak nag³ówkami jak i sam± tre¶ci± maila. Na <a href="http://www.milter.org/milter_api/index.html">tej stronie</a> dowiecie siê wiêcej na temat tego mechanizmu. <br><br>Biblioteka <b>libmilter</b> wykorzystywana jest przez filtry antyspamowe, programy do zarz±dzania tre¶ci± maili oraz przez programy antywirusowe. Jednym z takich filtrów jest <b>clamav-milter</b>, którego autorem jest Nigel Horne. Filtr ten (a raczej skaner e-mailowy) wchodz±cy w sk³ad projektu ClamAV dziêki temu, ¿e napisany zosta³ w C, jest bardzo szybki i wydajny. <br><br><i>clamav-milter</i> mo¿e ³±czyæ siê z demonem ClamAV - <b>clamd</b> na dwa sposoby. Albo poprzez <i>local socket</i> albo poprzez <i>TCP socket</i> na port <i>3310</i>. Sposób w jaki ma dzia³aæ <i>clamd</i> oraz wszelkie zwi±zane z tym parametry okre¶lamy w pliku konfiguracyjnym <i>clamav.conf</i>. Oto one: <pre> LocalSocket /var/run/clamav/clamd.sock # Okre¶lenie pliku dla lokalnego socketu #TCPSocket 3310 # Okre¶lenie portu #TCPAddr 127.0.0.1 # Okre¶lenie adresu IP #MaxConnectionQueueLength 30 # Maksymalna d³ugo¶æ kolejki (domy¶lnie 15) </pre> <i>Pamiêtaæ nale¿y, ¿e tylko jeden z tych sposobów mo¿e byæ w³±czony w danej konfiguracji.</i> <br>Opcja <i>TCPAddr</i> s³u¿y do okre¶lenie adresu IP na którym bêdzie nas³uchiwa³ <i>clamd</i>. Domy¶lnie <i>clamd</i> akceptuje po³±czenia przychodz±ce na wszystkie adresy IP. Je¶li odhaszujemy tê opcjê, wówczas ograniczamy <i>clamd</i> do akceptowania po³±czeñ tylko do wybranego adresu. Jest to opcja podnosz±ca bezpieczeñstwo dzia³ania w konfiguracji z sieciowym socketem TCP. Podczas uruchamiania, <i>clamav-milter</i> sprawdza w pliku <i>clamav.conf</i> wpisy dotycz±ce po³±czenia i na tej podstawie wybiera sposób komunikacji z clamd. <br><b>Ze wzglêdów bezpieczeñstwa, autorzy zalecaj± korzystanie z lokalnego socketu.</b> <br><br> Po po³±czeniu z <i>clamd</i>, <i>clamav-milter</i> sprawdza zawarto¶æ przesy³ki pod k±tem wystêpowania w niej wirusów. Rozwi±zanie to jest szybkie i bardzo skuteczne. Ma jeden minus, trzeba siê trochê nakompilowaæ ale gwarantujê, ¿e warto :-) <br><br>W dalszej czê¶ci dokumentu omówiê zalety nowej wersji clamav-miltera dostêpnej w wersjach <i>latest</i> ClamAV. <a name="a3"> </a> <br><br><br><b>3. Zapotrzebowanie na oprogramowanie</b> <br><br> - ClamAV v0.65 - <a href="http://prdownloads.sourceforge.net/clamav/">http://prdownloads.sourceforge.net/clamav/</a> <br> - Sendmail 8.12.10 - <a href="ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.12.10.tar.gz">ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.12.10.tar.gz</a> <br><b>ClamAV posiada wbudowan± obs³ugê formatów RAR (2.0), Zip, Gzip, Bzip2.</b> <br><br> <b>Skrypty startowe</b> <br> - Skrypty startowe, które uruchamiaj± Sendmaila, clamd i clamav-miltera: <br> <a href="http://clamav.skc.com.pl/howtos/files/rc.sendmail">rc.sendmail</a> <br> <a href="http://clamav.skc.com.pl/howtos/files/rc.clamd">rc.clamd</a> <br> <a href="http://clamav.skc.com.pl/howtos/files/rc.clamav-milter">rc.clamav-milter</a> <br><br>Skrypty te zosta³y zrobione z my¶l± o dystrybucjach, które jako systemu startowego u¿ywaj± tego, który wywodzi siê z systemów BSD. Ja u¿ywam dwóch dystrybucji, Slackware i shtOS i w tych dystrybucjach skrypty bêd± dzia³aæ prawid³owo. Je¶li u¿ywacie systemu startowego System V, to musicie sami stworzyæ sobie odpowiednie skrypty startowe. <br>G³ównym skryptem startowym jest <i>rc.sendmail</i>. Po uruchomieniu go z opcj± <i>start</i> zostan± równie¿ uruchomione skrypty <i>rc.clamd</i> i <i>rc.clamav-milter</i>. <!-- <br><br><b>Uwaga Slackwareowcy i shtOSowcy :-)</b> <br>Je¶li kto¶ chce mo¿e pobraæ gotow± paczkê z ClamAV oraz specjalnie przygotowane pliki startowe rc.sendmail; rc.clamd; rc.clamav-milter <br> - clamav-clamav-i686-1.tgz - <a href="http://insidiae.eu.org/clamav-clamav-i686-1.tgz">http://insidiae.eu.org/clamav.tgz</a> <br> - rc.sendmail - <a href="http://insidiae.eu.org/rc.sendmail">http://insidiae.eu.org/rc.sendmail</a> <br> - rc.clamd - <a href="http://insidiae.eu.org/rc.clamd">http://insidiae.eu.org/rc.clamd</a> <br> - rc.clamav-milter - <a href="http://insidiae.eu.org/rc.clamav-milter">http://insidiae.eu.org/rc.clamav-milter</a> --> <a name="a4"> </a> <br><br><br><b>4. Konfiguracja serwera Sendmail</b> <br><br>Ja u¿ywam obecnie wersji 8.12.10 ale powinno te¿ dzia³aæ z wcze¶niejszymi. <br><br><i>UWAGA, na stronie www.sendmail.org w dziale opisuj±cym kompilacjê i konfiguracjê libmilter, s± nieaktualne informacje. Naj¶wie¿sze informacje na temat konfiguracji miltera mo¿na znale¼æ w katalogu <b>sendmail_source/libmilter/README</b></i> <br><br>Do dzie³a: <pre> Do pliku <i>sendmail_source/devtools/Site/site.config.m4</i> dodajemy linijkê: APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER') Mo¿e siê zdarzyæ, ¿e nie bêdziecie mieli pliku <i>site.config.m4</i> i katalogu <i>Site</i> W takim przypadku nale¿y je stworzyæ rêcznie a do naszego pliku .mc (u mnie nazywa siê on sendmail.mc) <i>sendmail_source/cf/cf/sendmail.mc</i> nastêpuj±ce dwie linijki: INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clmilter.sock,F=, T=S:4m;R:4m')dnl define(`confINPUT_MAIL_FILTERS', `clmilter') </pre> Oto mój przyk³adowy plik <a href="http://clamav.skc.com.pl/howtos/files/sendmail.mc">sendmail.mc</a> <br>Znajdziecie w nim jeszcze dwie linijki dotycz±ce SMTP-AUTH czyli autoryzacji SMTP. Je¶li kto¶ nie u¿ywa tego mechanizmu to proszê je usun±æ. Oto one: <pre> define(`confAUTH_MECHANISMS',`LOGIN PLAIN')dnl TRUST_AUTH_MECH(`LOGIN PLAIN')dnl </pre> Teraz dokonujemy standardowej kompilacji Sendmaila: <pre> root@linux: cd sendmail_source/sendmail root@linux: sh Build -c root@linux: cd sendmail_source/cf/cf root@linux: sh Build sendmail.cf root@linux: cd sendmail_source/sendmail root@linux: sh Build install root@linux: cd sendmail_source/cf/cf root@linux: sh Build install-cf root@linux: cd sendmail_source root@linux: sh Build install </pre> Po tych czynno¶ciach Sendmail jest ju¿ zainstalowany i gotowy do dzia³ania (na razie jeszcze bez bibliotek libmilter). <br><br> Teraz zainstalujemy libmilter: <pre> root@linux: cd sendmail_source/libmilter root@linux: sh Build install </pre> libmilter powinien siê zainstalowaæ. <br><br><b>UWAGA: Po instalacji libmiltera konieczna jest konfiguracja bibliotek dynamicznych, czyli:</b> <pre> root@linux: ldconfig </pre> Bez tego nie skompilowa³by siê nam clamav-milter :> <br><br>I to w zasadzie wszystko odno¶nie Sendmaila. Teraz przejdziemy do kompilacji ClamAV. <a name="a5"> </a> <br><br><br><b>5. Kompilacja ClamAV</b> <br><br>Przed rozpoczêciem kompilacji nale¿y dodaæ nowego u¿ytkownika - <i>clamav</i> <pre> root@linux: groupadd clamav root@linux: useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav </pre> Aby ClamAV skompilowa³ siê wraz z clamav-milter, nale¿y uruchomiæ configure z opcj± --enable-milter + jakie¶ nasze dodatkowe opcje, np: <pre> user@linux: cd clamav_source user@linux: make clean user@linux: ./configure --prefix=/usr --sysconfdir=/etc/clamav --datadir=/etc/clamav \ --with-dbdir=/etc/clamav --enable-milter user@linux: make user@linux: make check user@linux: su root@linux: make install </pre> Na koniec musimy jeszcze zrobiæ link symboliczny: <pre> root@linux: ln -s /usr/sbin/sendmail /usr/lib/sendmail </pre> Nale¿y jeszcze dokonaæ edycji pliku /etc/clamav/clamav.conf, czyli pliku konfiguracyjnego ClamAV. <a href="http://clamav.skc.com.pl/howtos/files/clamav.conf">Tutaj</a> dostêpny jest mój plik clamav.conf <br><br>UWAGA: clamav-milter do dzia³ania wymaga odhaszowania nastêpuj±cych wpisów w clamav.conf; <pre> LocalSocket /var/run/clamav/clamd.sock ScanMail SaveStreamToDisk </pre> clamav-milter uruchamiamy poprzez wpisanie polecenia: <pre> root@linux: /usr/sbin/clamav-milter -c /etc/clamav/clamav.conf --max-children=15 -blo /var/run/clamav/clmilter.sock </pre> <i>Je¶li u¿ywasz moich skryptów startowych (rc.clamav-milter) to nie musisz siê o to martwiæ, skrypt dokona prawid³owego uruchomienia automagicznie :></i> <br><br>Poni¿ej przedstawie krótki opis zastosowanych tu parametrów wywo³ania <i>clamav-milter</i>. <pre> -c (--config-file=FILE) Odczytaj konfiguracjê z pliku FILE -b (--bounce) Wy¶lij wiadomo¶æ o b³êdzie do nadawcy maila -l (--local) Skanuj maile pochodz±ce z wewnêtrznej sieci LAN -o (--outgoing) Skanuj wiadomo¶ci wychodz±ce z tej maszyny </pre> Polecam równie¿ zapoznanie siê z komend± <i>clamav-milter --help</i> :-) <br><br>Na koniec nale¿y skopiowaæ najnowsze bazy sygnatur wirusów do katalogu /etc/clamav <br>Mo¿esz je ¶ci±gn±æ ze strony <a href="http://database.clamav.net/">http://database.clamav.net/</a> lub z którego¶ z <a href="http://www.clamav.net/mirrors.html">mirrorów</a>. <br><br><i>Polecam stosowanie baz sygnatur w formacie CVD. Poprzednie bazy by³y w formacie tekstowym, ale w przysz³o¶ci nie bêd± ju¿ obs³ugiwane przez ClamAV.</i> <br><br>Pliki baz danych to <b>main.cvd</b> i <b>daily.cvd</b>. Do main.cvd trafiaj± ju¿ sprawdzone sygnaturki, w których sporadycznie pojawiaj± siê jakie¶ b³êdy lub niedoci±gniêcia. W pliku daily.cvd znajduj± siê ostatnio dodane sygnaturki najnowszych wirusów.<br> W dniu tworzenia tego dokumentu, ClamAV rozpoznawa³ prawie <b>20800</b> ró¿nych wirusów, robaków i koni trojañskich. <br><br> Liczba rozpoznawanych wirusów ro¶nie bardzo szybko i tylko patrzeæ jak do¶cignie komercyjn± konkurencjê :-) <br><br>Do pobrania najnowszych baz sygnatur mo¿na u¿yæ programu <b>freshclam</b>, który potrafi dzia³aæ jako demon. To rozwi±zanie jest o tyle wygodne, ¿e program sam sprawdza, okre¶lon± przez nas ilo¶æ razy dziennie, czy dostêpne s± nowe sygnaturki. Je¶li tak to je pobiera a nastêpnie dokonuje prze³adowania clamd aby ten rozpoznawa³ najnowsze wirusy. <br><br><b>Uprawnienia</b> <br>Jeszcze kilka s³ów na temat uprawnieñ. Demon <i>clamd</i> musi byæ uruchomiony jako root, ale do poprawnego dzia³ania wcale nie potrzebuje praw roota. Wystarcz± mu ograniczone uprawnienia jakiego¶ u¿ytkownika (np. <i>clamav</i>). Poprzez opcjê <i>User</i> w pliku clamav.conf, mo¿emy okre¶liæ na prawach jakiego u¿ytkownika ma pracowaæ clamd. Po uruchomieniu, clamd porzuci uprawnienia roota i przejdzie na ni¿szy poziom z uprawnieniami okre¶lonego u¿ytkownika. <br><br>Ju¿ nied³ugo dostêpne bêdzie HOWTO, w którym postaram siê opisaæ wszelkie zagadnienia zwi±zane z poprawn± konfiguracj± ClamAV oraz z u¿ywaniem innych narzêdzi dostêpnych w ramach projektu. <a name="a6"> </a> <br><br><br><b>6. Uruchamianie</b> <br><br>Przed uruchomieniem skryptów musimy zadbaæ jeszcze o stworzenie odpowiednich katalogów i nadanie im odpowiednich uprawnieñ; i tak: <pre> root@linux: chown -R clamav:clamav /etc/clamav root@linux: mkdir /var/run/clamav; chown -R clamav:clamav /var/run/clamav root@linux: mkdir /var/log/clamav; chown -R clamav:clamav /var/log/clamav </pre> W nowszych wersjach <i>clamav-milter</i> dostêpna jest opcja <i>--quarantine-dir</i> podczas wywo³ania której musimy podaæ jako parametr, katalog z plikami poddanymi kwarantannie. W tym celu musimy go najpierw utworzyæ. <pre> root@linux: mkdir /var/clamav/quarantine; chown -R clamav:clamav /var/clamav/quarantine Zabijmy jeszcze dzia³aj±cy stary proces sendmail root@linux: killall -9 sendmail </pre> Teraz wystarczy uruchomiæ skrypt <i>/etc/rc.d/rc.sendmail start</i> i wszystko powinno ruszyæ. Jako pierwszy uruchomi siê demon clamd po 1 sekundzie zw³oki clamav-milter a po kolejnych dwóch sekundach, Sendmail. Te sztuczne opó¼nienia wprowadzone s± po to aby programy zd±¿y³y po³±czyæ siê z socketami. W przeciwnym wypadku, mog± wyst±piæ pewne problemy, zw³aszcza podczas ³±czenia siê Sendmaila z socketem clamav-milter. <a name="a7"> </a> <br><br><br><b>7. Obserwacje i analiza logów</b> <br><br> Nie muszê chyba pisaæ jak wa¿ne jest okresowe przegl±danie logów serwera. W przypadku ClamAV równie¿ nale¿y zwróciæ uwagê na kilka szczegó³ów. Szczególnie je¶li chodzi o zachowanie clamav-miltera i demona clamd. Wszystkiego mo¿emy siê dowiedzieæ z plików <i>/var/log/clamav/clamd.log</i> i <i>/var/log/maillog</i> <br><br>Ja po kilku dniach obserwacji trio Sendmail+ClamAV+clamav-milter, doszed³em do nastepuj±cych wniosków: <br><br> - Zalecam zwrócenie szczególnej uwagi na clamav-miltera. Najprostszym sposobem jest; <pre> root@linux: ps -A </pre> i obserwacja czy nie wystêpuje nadmierna liczba procesów clamav-milter. <br>Zauwa¿y³em, ¿e clamav-milter mia³ sk³onno¶æ do nie zamykania swoich procesów. Jego nowe wersje (dostêpne w wersji deweloperskiej ClamAV) radz± sobie zdecydowanie lepiej i nie ma ju¿ takich problemów. Nowy clamav-milter zapisuje podejrzane pliki do katalogu kwarantanny (<i>ang. quarantine</i>). Ma te¿ lepsz± obs³ugê zawieszonych procesów. <br><br> - Kolejn± rzecz±, któr± zmieni³em jest liczba maksymalnych procesów potomnych ( --max-children ), które mo¿e tworzyæ clamav-milter. Im wiêksze obci±¿enie serwera poczt± przychodz±c± tym liczba tych procesów powinna byæ wy¿sza. Ja u¿ywam --max-children=15 i jest to w moim przypadku liczba wystarczaj±ca. Je¶li liczba ta jest zbyt ma³a w logu <i>/var/log/maillog</i> mo¿na dostrzec wpisy typu: <pre> clamav-milter[22068]: hit max-children limit (7 >= 3): waiting for some to exit clamav-milter[26826]: hit max-children limit (8 >= 3): waiting for some to exit clamav-milter[26515]: hit max-children limit (8 >= 3): waiting for some to exit clamav-milter[4360]: hit max-children limit (9 >= 3): waiting for some to exit </pre> Warto¶æ --max-children ka¿dy z Was musi ustaliæ samodzielnie w zale¿no¶ci od obci±¿enia MTA. Na pocz±tek proponujê - 10; a nastêpnie przez kilka dni nale¿y obserwowaæ maillog. <br><br> Na koniec, ¿yczê Wam owocnej kompilacji i wychwycenia jak najwiêkszej ilo¶ci wirusów :-) <br>Wszelkie pytania i sugestie proszê wysy³aæ poczt±. <br><br> <hr size="1" style="color: #aaa4a0;"> Autor: <b>Przemys³aw Ho³owczyc</b><br> e-mail: <b>doozer (at) skc (dot) com (dot) pl</b> <br><br> Mon Sep 15 22:34:21 CEST 2003 <b>Pierwsza wersja HOWTO</b><br> Mon Feb 9 16:58:50 CET 2004 <b>Wersja aktualna</b><br> <font style="font-size: 12px; color: #aaaaaa"> # sendmail_clamav.html v1.2; Last modified: Mon, 23 Feb, 2004 20:04:34 by doozer # </font> </td> <td bgcolor="#dddddd" colspan="1" valign="top" align="left" width="8%" height="2000"> </td> </tr> </table> <!-- end CONTENTTABLE --> <table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"> <tr> <td bgcolor="#dddddd" width="100%" align="center" height="60" class="rn"> </td> </tr> </table> </center> </body> </html>