<!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;
}
												   
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 poczty przychodz±cej</font></b><br><br>
   &nbsp;&nbsp;&nbsp;<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">
   &nbsp;
  </td>
  
  <td colspan="1" valign="top" align="left" width="84%" height="200" class="rlrb">
   <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>Aktualn± wersjê tego How-to znajdziecie zawsze pod <a href="http://clamav.skc.com.pl/howtos/sendmail_clamav.html">tym</a> adresem.
   
   <br><br><b>Spis tre¶ci</b>
   <br><b>1.</b>&nbsp;<a href="sendmail_clamav.html#a1">Wprowadzenie</a>
   <br><b>2.</b>&nbsp;<a href="sendmail_clamav.html#a2">Jak to dzia³a?</a>
   <br><b>3.</b>&nbsp;<a href="sendmail_clamav.html#a3">Zapotrzebowanie na oprogramowanie</a>
   <br><b>4.</b>&nbsp;<a href="sendmail_clamav.html#a4">Konfiguracja serwera Sendmail</a>
   <br><b>5.</b>&nbsp;<a href="sendmail_clamav.html#a5">Kompilacja ClamAV</a>
   <br><b>6.</b>&nbsp;<a href="sendmail_clamav.html#a6">Uruchamianie</a>
   <br><b>7.</b>&nbsp;<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.&nbsp;&nbsp;&nbsp;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.&nbsp;&nbsp;&nbsp;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.&nbsp;&nbsp;&nbsp;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>&nbsp;<b>Skrypty startowe</b>
<br> - Skrypty startowe, które uruchamiaj± Sendmaila, clamd i clamav-miltera:
<br>&nbsp;&nbsp;&nbsp;<a href="http://clamav.skc.com.pl/howtos/files/rc.sendmail">rc.sendmail</a>
<br>&nbsp;&nbsp;&nbsp;<a href="http://clamav.skc.com.pl/howtos/files/rc.clamd">rc.clamd</a>
<br>&nbsp;&nbsp;&nbsp;<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.&nbsp;&nbsp;&nbsp;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')

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: killall -9 sendmail
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.&nbsp;&nbsp;&nbsp;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>20700</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.&nbsp;&nbsp;&nbsp;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
</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.&nbsp;&nbsp;&nbsp;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>
<font style="font-size: 12px; color: #aaaaaa">
 # sendmail_clamav.html v1.1; Last modified: Tue, 10 Feb, 2004 18:16:01 by doozer #
</font>


 </td>
 <td bgcolor="#dddddd" colspan="1" valign="top" align="left" width="8%" height="2000">
    &nbsp;
 </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">
   &nbsp;
  </td>
 </tr>
</table>

</center>
</body>
</html>