<!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>