<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TommyBlue.it &#187; apache</title>
	<atom:link href="http://www.tommyblue.it/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tommyblue.it</link>
	<description>Bombardare per la pace è un po' come trombare per la verginità...</description>
	<lastBuildDate>Tue, 24 Jan 2012 09:34:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Configurare i check passivi in Nagios per l&#8217;integrazione con Munin</title>
		<link>http://www.tommyblue.it/2010/09/16/configurare-i-check-passivi-in-nagios-per-l-integrazione-con-munin/</link>
		<comments>http://www.tommyblue.it/2010/09/16/configurare-i-check-passivi-in-nagios-per-l-integrazione-con-munin/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 16:51:16 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ALIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Debian Voyage]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Munin]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[NRPE]]></category>
		<category><![CDATA[NSCA]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=990</guid>
		<description><![CDATA[Continuo la serie di guide sulla configurazione di Nagios spiegando come attivare i check passivi con NSCA e come usare Munin per avvertire Nagios di ciò che non va&#8217;. Intanto ricordo i link alla prima e alla seconda parte della guida: Parte 1 Parte 2 Tornando a Nagios e Munin: l&#8217;uso dei check passivi può [...]]]></description>
			<content:encoded><![CDATA[<p>Continuo la serie di guide sulla configurazione di Nagios spiegando come attivare i check passivi con <a href="http://www.nagios.org/download/addons" target="_blank">NSCA</a> e come usare Munin per avvertire Nagios di ciò che non va&#8217;.</p>
<p>Intanto ricordo i link alla prima e alla seconda parte della guida:</p>
<ul>
<li><a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/">Parte 1</a></li>
<li><a href="http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/">Parte 2</a></li>
</ul>
<p>Tornando a Nagios e Munin: l&#8217;uso dei check passivi può tornare utile se si va ad installare Nagios in una rete in cui è già presente Munin che, per chi non lo conoscesse, è un software che crea grafici di andamento di una lunga serie di servizi o aspetti dei server (anch&#8217;esso configurabile con agenti su vari server e un&#8217;applicazione centralizzata per la raccolta dei dati).<br />
Se Munin non fosse già installato si può valutare una configurazione Nagios-centrica con i check effettuati da NRPE e i grafici fatti con <a href="http://nagiosgraph.sourceforge.net/" target="_blank">NagiosGraph</a>.</p>
<p>Nel mio caso era già presente Munin e ho quindi optato per la configurazione dei check passivi.<span id="more-990"></span></p>
<h2>Configurazione del server (Nagios e nsca)</h2>
<p>Si comincia come sempre installando i pacchetti necessari:</p>
<pre>apt-get install libmcrypt-dev xinetd</pre>
<p>Quindi si scarica NSCA dalla <a href="http://www.nagios.org/download/addons" target="_blank">pagina degli addon di Nagios</a>, si scompatta, si compila e si installa:</p>
<pre>tar xzf nsca-2.7.2.tar.gz
cd nsca-2.7.2/
./configure prefix=/usr/local/nagios --with-nsca-user=nagios --with-nsca-grp=nagcmd
make all
cp -a src/nsca /usr/local/nagios/bin/
cp sample-config/nsca.cfg /usr/local/nagios/etc/
chown nagios:nagcmd /usr/local/nagios/etc/nsca.cfg
chmod g+r /usr/local/nagios/etc/nsca.cfg
cp sample-config/nsca.xinetd /etc/xinetd.d/nsca</pre>
<p>Bisogna anche aggiungere al file <em>/etc/services</em> il servizio NSCA con la riga:</p>
<pre>nsca    5667/tcp    # NSCA</pre>
<p>Nel file <em>/etc/xinetd.d/nsca</em> bisogna modificare il parametro <em>only_from</em> per consentire l&#8217;accesso al server in cui gira Munin, poi possiamo riavviare xinetd.</p>
<h2>Configurazione del client (send_nsca e Munin)</h2>
<p>Nel client da cui arriveranno i check (ovvero dove gira Munin) bisogna ugualmente scaricare il pacchetto NSCA e compilarlo. Differisce l&#8217;installazione del binario che in questo caso è <strong>send_nsca</strong> e può essere posizionato dove si vuole (stessa cosa vale per il suo file di configurazione). Dato che nel mio caso Munin e Nagios sono sullo stesso server ho usato la directory di Nagios per ospitare questi file:</p>
<pre>cp -a src/send_nsca /usr/local/nagios/bin/
cp sample-config/send_nsca.cfg /usr/local/nagios/etc/</pre>
<p>Se i due software sono su server diversi potete impostare un metodo di cifratura nel file <em>send_nsca.cfg</em> e impostare una password (che deve essere la stessa sul server e sul client).</p>
<p><strong>Proviamo adesso se <em>send_nsca</em> funziona.</strong> I check passivi consistono in una riga contenente:</p>
<pre>HOSTNAME[tab]SERVIZIO[tab]CODICE[tab]DESCRIZIONE</pre>
<p>quindi per fare un test possiamo creare un file con il contenuto:</p>
<pre>hostAcaso   pippo   0   OK</pre>
<p>e fare un test di connessione con:</p>
<pre>/usr/local/nagios/bin/send_nsca localhost -c /usr/local/nagios/etc/send_nsca.cfg &lt; test
1 data packet(s) sent to host successfully.</pre>
<p>Nei log di Nagios troveremo:</p>
<pre>nagios: Warning:  Passive check result was received for service 'pippo' on host 'hostAcaso', but the host could not be found!</pre>
<p>Funziona! Non fatevi spaventare dal <em>warning</em>: Nagios ha ricevuto il check ma non ha nessun host corrispondente nella sua configurazione. Niente di male, glielo spiegheremo più tardi.</p>
<p>Possiamo quindi configurare Nagios per accettare i check passivi. Per farlo andiamo nel server e inseriamo nel file <em>etc/objects/templates.cfg</em> il template per un servizio che accetta sono check passivi:</p>
<pre>define service{
 name                            passive-service
 use                             generic-service
 active_checks_enabled           0
 passive_checks_enabled          1
 flap_detection_enabled          0
 register                        0
 is_volatile                     0
 check_period                    24x7
 max_check_attempts              1
 normal_check_interval           5
 retry_check_interval            1
 check_freshness                 0
 contact_groups                  admins
 notification_options            w,u,c,r
 stalking_options                w,c,u
 notification_interval           120
 check_command                   check_dummy!0
}</pre>
<p>Inseriamo poi nel file <em>etc/objects/commands.cfg</em> la definizione del comando <em>check_dummy</em>:</p>
<pre>define command{
 command_name    check_dummy
 command_line    $USER1$/check_dummy $ARG1$
}</pre>
<p>Fatto questo possiamo inserire un check di prova in un host:</p>
<pre>define service{
 use                             passive-service
 host_name                       hostCheEsiste
 service_description             TestMessage
}</pre>
<p>Una volta riavviato Nagios vedremo questo servizio in stato pending. Modificando il file di prima con:</p>
<pre>hostCheEsiste    TestMessage    0     Messaggio di OK</pre>
<p>ed eseguendo nuovamente:</p>
<pre>/usr/local/nagios/bin/send_nsca localhost -c /usr/local/nagios/etc/send_nsca.cfg &lt; test</pre>
<p>possiamo mettere il servizio in stato di OK.</p>
<p>Per finire dobbiamo dire a Munin di chiamare Nagios quando qualcosa non va. Per farlo dobbiamo modificare il file <em>munin.conf</em> inserendo:</p>
<pre>contacts nagios
contact.nagios.command /usr/local/nagios/bin/send_nsca -H localhost -c /usr/local/nagios/etc/send_nsca.cfg</pre>
<p>Modificate le path secondo la vostra configurazione e inserite nel file <em>send_nsca.cfg</em> l&#8217;eventuale password per comunicare con NSCA.</p>
<h2>Ma come funzionano in dettaglio gli avvertimenti di Munin?</h2>
<p>Munin si basa su plugin e ognuno di essi ha dei limiti. Per vederli basta lanciare (in questo caso interrogo il plugin <strong>cpu</strong>):</p>
<pre>munin-run cpu config</pre>
<p>Nella risposta si possono individuare i limiti:</p>
<pre>system.warning 60
system.critical 100</pre>
<p>Tali limiti possono essere monitorati da munin-limits, un eseguibile che, per essere lanciato automaticamente, va inserito in crontab. Di base ne trovate una configurazione in <em>/etc/cron.d/munin</em> (se non c&#8217;è createlo). Io l&#8217;ho modificato così:</p>
<pre>*/5 * * * *     munin if [ -x /usr/share/munin/munin-limits ]; then /usr/share/munin/munin-limits --force --contact nagios --contact old-nagios; fi</pre>
<p>Quindi ogni 5 minuti fa il check e contatta Nagios per passargli il risultato.</p>
<p>L&#8217;ultima cosa da fare è adattare i limiti di ogni plugin secondo le proprie esigienze. Si possono definire in <em>munin.conf</em> per ogni host:</p>
<pre>df._mapper_sda1_vm_root.warning      0:90
df._mapper_sda1_vm_root.critical     0:95
df.notify_alias     Disk usage</pre>
<p>La logica con cui vengono definiti i limiti è un po&#8217; cervellotica e dipende molto dal tipo di plugin. In questo caso ho usato <strong>df</strong> che controlla l&#8217;uso del disco.<br />
Il limite di warning 0:90 viene superato se il limite è al di fuori di questo range (il range è 0:100). Ma a sua volta il limite critico è al di fuori del range 0:95. Il risultato è che il plugin entra in <strong>warning</strong> se la partizione è occupata tra il 90% e il 94% e in <strong>critical</strong> da 95% in sù.<br />
Vi lascio divertire con gli altri plugin :)</p>
<h2>Inseriamo in Nagios questi check</h2>
<p>Ho già mostrato prima come inserire un check passivo in un host, ovvero:</p>
<pre>define service{
 use                             passive-service
 host_name                       hostCheEsiste
 service_description             TestMessage
}
</pre>
<p>Per accettare un check passivo valido da Munin bisogna modificare <strong>service_description</strong> affinchè sia uguale al nome del servizio che definisce il plugin di Munin. Dato che hanno nomi non facilmente individuabili e che a volte contengono caratteri incompatibili con Nagios (ad esempio %) una cosa furba è rinominarli in <em>munin.conf</em> con <strong>.notify_alias</strong> (guardate qualche riga più in sù nel caso del <strong>df</strong>) e usare quell&#8217;alias in Nagios.</p>
<p>A questo punto la teoria è finita e non rimane altro da fare che iniziare a scrivere le definizioni dei check in Nagios e le configurazioni dei plugin in Munin, buon lavoro!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2010/09/16/configurare-i-check-passivi-in-nagios-per-l-integrazione-con-munin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Costruirsi un sistema di monitoraggio &#8220;casalingo&#8221; con Nagios – parte 2</title>
		<link>http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/</link>
		<comments>http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 14:01:37 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ALIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Debian Voyage]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[NRPE]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=853</guid>
		<description><![CDATA[Costruzione di un sistema di monitoraggio a basso costo con una scheda embedded x86, Debian Voyage e Nagios]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/"><strong>Leggi la prima parte della guida</strong></a></p>
<p>In questa seconda parte della guida illustrerò alcune <strong>configurazioni di base</strong> per i check di <a title="Nagios" href="http://www.nagios.org/" target="_blank">Nagios</a> e l&#8217;uso dell&#8217;addon <strong>NRPE</strong> per check locali su sistemi remoti.</p>
<h3>La struttura</h3>
<p>In questa guida prenderò in considerazione la struttura qui si seguito che permette di illustrare vari tipi di configurazione:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-860" title="Schema Nagios" src="http://www.tommyblue.it/wp-content/uploads/2010/02/schema-nagios.jpg" alt="" width="450" height="454" /></p>
<p>Una panoramica sugli host e i servizi:</p>
<ul>
<li>Host A, server Linux con:
<ul>
<li>Server HTTP Apache</li>
<li>VMWare Server con una macchina virtuale E con un server Zimbra</li>
</ul>
</li>
<li>Host B, server Linux con:
<ul>
<li>Server HTTP Apache</li>
<li>Server MySQL</li>
</ul>
</li>
</ul>
<p>Quindi E dipende da C che a sua volta dipende da A. Invece D dipende da B.<br />
Entrambi i server Apache rispondono sulle porte 80 e 443, l&#8217;interfaccia di amministrazione di VMWare Server risponde sulla porta 8333 (con SSL).<br />
La macchina virtuale Zimbra fornisce i servizi SMTP, POP3 e le interfaccie di webmail e amministrazione (porta 7071).<br />
Infine nella macchina B il server MySQL risponde solo sull&#8217;interfaccia locale, non è quindi possibile accedervi dall&#8217;esterno.</p>
<p><span id="more-853"></span>Negli esempi successivi gli elementi <strong>A</strong>, <strong>C</strong> ed <strong>E</strong> saranno del cliente <em>Company A</em> (dominio <em>company-a.com</em>) e <strong>B</strong> e <strong>D</strong> saranno del cliente <em>Company B</em> con dominio <em>company-b.com</em>.<br />
I nomi host saranno i seguenti:</p>
<ul>
<li><em>A =&gt; web.company-a.com<br />
</em></li>
<li><em>C (macchina virtuale) =&gt; mail.company-a.com<br />
</em></li>
<li><em>B =&gt; web.company-b.com</em></li>
</ul>
<p>Per un maggior dettaglio nella spiegazione delle singole configurazioni tenete sempre sott&#8217;occhio la guida ufficiale alla pagina <a href="http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html" target="_blank"><strong>Object Definitions</strong></a>.</p>
<h3>Organizzazione dei file</h3>
<p>Una volta installato Nagios seguendo la <a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/">prima parte della guida</a>, troverete tutte le configurazioni in <em>/usr/local/nagios/etc</em>. Il file che <em>comanda</em> è <em>nagios.cfg</em> il quale poi richiama tutti gli altri. È quindi possibile, e consigliabile, creare una gerarchia di file che possa poi più facilmente permettere di gestire tutte le configurazioni (senza <em>perdersi</em> per strada i vari pezzi).<br />
Nel file <em>nagios.cfg</em> ci sono due direttive inerenti questo aspetto e sono <em>cfg_file</em> e <em>cfg_dir</em>. La prima indica direttamente un file da cui leggere ulteriori configurazioni, la seconda indica intere directory da cui saranno inclusi tutti i file che terminano con <em>.cfg</em>. Io consiglio di intervenire usando questa seconda direttiva, le cartelle che ho creato sono:</p>
<pre>cfg_dir=/usr/local/nagios/etc/personalized_objects
cfg_dir=/usr/local/nagios/etc/servers
cfg_dir=/usr/local/nagios/etc/groups</pre>
<p>Oltre alle due cartelle con le configurazioni dei server e dei gruppi, ho aggiunto una cartella in cui inserirò i <em>template</em> personalizzati, ad esempio con <em>timeperiods</em> o <em>contact groups</em> diversi da quelli standard.</p>
<h3>Gruppi di host e servizi</h3>
<p>È possibile definire dei gruppi di host (ad esempio a seconda dell&#8217;azienda di appartenenza o del tipo di hardware) e dei gruppi di servizi (server di posta, server web, ecc.). Personalmente inserisco queste configurazioni nella cartella <em>groups</em>.</p>
<p>Esempi di configurazione sono i seguenti:</p>
<pre>define hostgroup{
    hostgroup_name     companyA-servers
    alias              Company A Servers
    members            mail.company-a.com,web.company-a.com
}
define hostgroup{
    hostgroup_name     companyB-servers
    alias              Company B Servers
    members            web.company-b.com
}
define servicegroup{
    servicegroup_name  web-servers
    alias              Web Servers
    members            web.company-a.com,HTTP,web.company-b.com,HTTP
}</pre>
<p>In entrambi i casi gli host indicati in <em>members</em> devono ricalcare il nome con cui quegli host sono definiti (attributo <em>host_name</em>). Nel caso dei servizi, oltre al nome dell&#8217;host, deve essere indicato il nome del servizio (anche in questo caso deve essere uguale a quello inserito in <em>service_description</em>).</p>
<h3>Definizione degli host</h3>
<p>Iniziamo con la configurazione dei server. I file <em>web.company-a.com.cfg</em>, <em>web.company-b.com.cfg</em> e <em>mail.company-a.com.cfg</em> verranno creati nella cartella <em>servers</em>. Non c&#8217;è molto da spiegare, inserisco dei commenti direttamente nelle configurazioni:</p>
<p><em><strong>web.company-a.com.cfg</strong></em></p>
<pre>define host {
    use             linux-server   ;   Template da cui ereditare
    host_name       web.company-a.com   ;   L'host name è ciò che viene usato per identificare l'host negli altri file
    alias           CompanyA Web Server
    address         1.2.3.4
    hostgroups      comapanyA-servers   ;   Come in hostgroup, tale configurazione può essere alternativa o in aggiunta
}</pre>
<p><em><strong>web.company-b.com.cfg</strong></em></p>
<pre>define host {
    use             linux-server
    host_name       web.company-b.com
    alias           CompanyB Web Server
    address         1.2.3.5
    hostgroups      comapanyB-servers
}</pre>
<p><em><strong>mail.company-a.com.cfg</strong></em></p>
<pre>define host {
    use             linux-server
    host_name       mail.company-a.com
    alias           CompanyA Web Server
    address         1.2.3.6
    hostgroups      comapanyA-servers
    parents         web.company-a.com   ;   L'host da cui questo host dipende
}</pre>
<h3>Definizione dei servizi</h3>
<p>La definizione dei servizi è direttamente collegata ai plugin, ovvero usano questi ultimi per effettuare i check. In verità il valore dell&#8217;attributo <em>check_command</em>, anche se in genere ricalca il nome del plugin (i plugin sono nella cartella <em>libexec</em>), non lo indica direttamente ma ha una corrispondenza nel valore dell&#8217;attributo <em>command_name</em> nella definizione di un comando (file <em>etc/objects/commands.cfg</em>).</p>
<p><em><strong>mail.company-a.com.cfg</strong></em></p>
<pre>define service {
 use                     generic-service
 host_name               mail.company-a.com
 service_description     SMTP
 check_command           check_smtp!-t 5
}
define service {
 use                     generic-service
 host_name               mail.company-a.com
 service_description     IMAP
 check_command           check_imap!-t 5
}
define service {
 use                     generic-service
 host_name               mail.company-a.com
 service_description     POP3
 check_command           check_pop!-t 5
}</pre>
<p>Nella direttiva <em>check_command</em> viene indicato il tipo di comando da eseguire. Dopo il punto esclamativo vengono indicati gli argomenti. Se date uno sguardo a <em>etc/objects/commands.cfg</em> vedrete che gli argomenti vengono passati al plugin con <em>$ARG1$, $ARG2$, ecc</em>. In alcuni è presente soltanto un argomento, quindi nella definizione del servizio, dopo il punto esclamativo, devono essere indicati tutti gli argomenti (tipo <em>./check_dummy -t pippo -x pluto</em>) mentre in altri comandi sono presenti più argomenti, spesso associati ad una specifica opzione (tipo <em>./check_dummy -t </em><em>$ARG1$</em><em> -x </em><em>$ARG2$</em>). Nella definizione del servizio, più argomenti possono essere indicati con più punti esclamativi (tipo <em>check_dummy!pippo!pluto</em>). Per avere più informazioni su un plugin lanciatelo con <em>libexec/check_dummy &#8211;help</em>.</p>
<p>Un esempio di check un po&#8217; più complesso può essere, ad esempio, quello necessario per controllare se l&#8217;interfaccia di amministrazione di Zimbra sta girando correttamente (HTTPS sulla porta 7071):</p>
<p><em><strong>mail.company-a.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       mail.comapany-a.com
 service_description             ZimbraAdmin
 check_command                   check_http!"-H mail.company-a.com -p 7071 -w 5 -c 15 --ssl"
}</pre>
<p>Com&#8217;è facile intuire, con <em>check_http</em> è possibile quindi monitorare ogni singolo sito presente su un server web.</p>
<p>Ecco gli altri file necessari per la nostra configurazione:</p>
<p><em><strong>web.company-a.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       web.company-a.com
 service_description             HTTP
 check_command                   check_http   ;   Semplice check sulla porta 80
}</pre>
<pre>define service{
 use                             generic-service
 host_name                       web.company-a.com
 service_description             VMWareAdmin
 check_command                   check_http!"-H web.company-a.com -p 8333 -w 5 -c 15 --ssl"
}</pre>
<p><em><strong>web.company-b.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       web.company-b.com
 service_description             HTTP
 check_command                   check_http
}</pre>
<h3>NRPE</h3>
<p>L&#8217;ultima cosa che rimane da controllare è lo stato del server MySQL. Dato che il servizio risponde soltanto sull&#8217;interfaccia locale non è possibile controllarne direttamente lo stato dal server Nagios. L&#8217;addon<em> NRPE </em>fa proprio questo: installato sulla macchina da controllare, esegue dei check locali quando interrogato da Nagios.Il plugin da usare sul server è <em>check_nrpe</em> e l&#8217;argomento da passargli è il nome del check definito nel client, il quale a sua volta dovrà associare questo nome ad un check locale (quindi sul client dobbiamo installare i plugin).</p>
<p>Su entrambe le macchine va compilato  l&#8217;addon:</p>
<pre>tar xzf nrpe-2.12.tar.gz
cd nrpe-2.12/
./configure --enable-ssl
make all</pre>
<p>A questo punto l&#8217;installazione tra host e client differisce. Per l&#8217;installazione nel client dei plugin seguite la <a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/" target="_blank">prima parte della guida</a>.</p>
<p><strong>Host</strong></p>
<pre>make install-plugin</pre>
<p>e quindi bisogna creare il template del comando:</p>
<p><em><strong>commands.cfg</strong></em></p>
<pre>define command {
 command_name    check_nrpe
 command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}</pre>
<p><strong>Client</strong></p>
<p>Se non è installato, installate <em>xinetd</em>:</p>
<pre>apt-get install xinetd</pre>
<p>Installate quindi il demone</p>
<pre>make install-daemon
make install-daemon-config
make install-xinetd</pre>
<p>Aggiungete NRPE al file <em>/etc/services</em>:</p>
<pre>nrpe 5666/tcp # NRPE</pre>
<p>Aggiungete l&#8217;ip del server Nagios al file <em>/etc/xinetd.d/nrpe</em> (in questo caso un fittizio <em>4.3.2.1</em>):</p>
<pre>only_from = 127.0.0.1 4.3.2.1</pre>
<p>Infine riavviate il server xinetd e controllate che NRPE sia in ascolto:</p>
<pre>~# /etc/init.d/xinetd restart
~# netstat -at | grep nrpe
tcp        0      0 *:nrpe                  *:*                     LISTEN</pre>
<p>A questo punto si può testare il servizio in locale con:</p>
<pre>~# /usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.12</pre>
<p><strong>Controllare MySQL</strong></p>
<p>Arriviamo al nostro obiettivo: controllare che il server MySQL stia correttamente girando. Creiamo un utente MySQL non privilegiato:</p>
<pre>mysql&gt; CREATE USER 'nagiosCheck'@'localhost' IDENTIFIED BY 'some_pass';</pre>
<p>Il check, lanciato da linea di comando, sarà il seguente:</p>
<pre>~# /usr/local/nagios/libexec/check_mysql -u nagiosCheck -p some_pass
Uptime: 1061012  Threads: 2  Questions: 192277  Slow queries: 0  Opens: 198  Flush tables: 1  Open tables: 64  Queries per second avg: 0.181</pre>
<p>Inseriamo quindi tale check in <em>/usr/local/nagios/etc/nrpe.cfg</em>:</p>
<pre>command[check_mysql]=/usr/local/nagios/libexec/check_mysql -u nagiosCheck -p some_pass</pre>
<p>Da notare che nel server Nagios il nome dell&#8217;argomento da passare a <em>check_nrpe </em>sarà <em>check_mysql</em> come definito tra le parentesi quadre.<br />
A questo punto dal server Nagios si può testare il check remoto:</p>
<pre>~# /usr/local/nagios/libexec/check_nrpe -H tomcat.mydomain.com -c check_mysql
Uptime: 1061534  Threads: 2  Questions: 192280  Slow queries: 0  Opens: 198  Flush tables: 1  Open tables: 64  Queries per second avg: 0.181</pre>
<p>Se è tutto ok non resta che inserirlo tra i servizi dell&#8217;host <strong>B</strong>:</p>
<p><em><strong>web.company-b.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       web.company-b.com
 service_description             MySQL
 check_command                   check_nrpe!check_mysql
}</pre>
<p>E questo conclude la configurazione della nostra rete di test. Nella prossima <em>puntata</em> spiegherò come configurare dei server <em>slave</em> per effettuare check passivi, necessari, ad esempio, in configurazioni di rete complesse in cui il server <em>master</em> non può direttamente raggiungere gli host da controllare (se l&#8217;host da controllare è all&#8217;interno di una LAN, per dirne una).</p>
<p><a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/"><strong>Leggi la prima parte della guida</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Costruirsi un sistema di monitoraggio &#8220;casalingo&#8221; con Nagios &#8211; parte 1</title>
		<link>http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/</link>
		<comments>http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 19:49:08 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ALIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Debian Voyage]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=812</guid>
		<description><![CDATA[Costruzione di un sistema di monitoraggio a basso costo con una scheda embedded x86, Debian Voyage e Nagios]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-813" title="Embedded PC" src="http://www.tommyblue.it/wp-content/uploads/2010/02/embedded.jpg" alt="" width="300" height="254" />Se, come me, avete vari server a giro per il mondo a cui fare da baby-sitter, probabilmente avrete sentito la necessità di avere tutto sotto controllo e di scoprire (e magari risolvere) i problemi non appena si presentano.</p>
<p>Dopo aver configurato sistemi di monitoraggio per alcune P.A. e aziende, mi sono deciso a farlo anche per i miei server e descriverò in queste pagine ciò che ho fatto o sto ancora facendo.</p>
<p>Dividerò questa guida in più parti, per renderla più leggibile e per poter facilmente aggiungere nuove parti via via che incremento le funzionalità del sistema.</p>
<p>Questa prima parte descrive l&#8217;<strong>hardware</strong> scelto, l&#8217;<strong>installazione del sistema operativo</strong> e l&#8217;<strong>installazione base di <a title="Nagios" href="http://www.nagios.org/" target="_blank">Nagios</a></strong>.<br />
<span id="more-812"></span></p>
<h3>Hardware</h3>
<p>La scelta dell&#8217;hardware è caduta su un <em>embedded</em> acquistato (per circa 80€) su <a title="PC Engines" href="http://www.pcengines.ch" target="_blank">pcengines.ch</a> ampiamente in grado di fornire la <strong>potenza</strong> necessaria allo scopo e con <strong>consumi</strong> estremamente limitati.</p>
<p>Nello specifico ecco le caratteristiche principali:</p>
<div id="_mcePaste">
<ul>
<li><strong>CPU</strong>: 500 MHz AMD Geode LX800</li>
<li><strong>DRAM</strong>: 256 MB DDR DRAM</li>
<li><strong>Storage</strong>: CompactFlash socket</li>
<li><strong>Power</strong>: DC jack or passive POE, min. 7V to max. 20V</li>
<li><strong>Expansion</strong>: 2 miniPCI slots, dual USB port</li>
<li><strong>Connectivity</strong>: 2 Ethernet channels (Via VT6105M 10/100)</li>
</ul>
</div>
<p>Oltre alla scheda ho acquistato anche il case (damn! non avevano quello rosa shocking!) e l&#8217;alimentatore.</p>
<p>Costo complessivo <strong>101,31€</strong> così distribuiti:</p>
<ul>
<li><strong>Scheda</strong>: 72,23 €</li>
<li><strong>Case</strong>: 6,63 €</li>
<li><strong>Alimentatore</strong>: 4,05 €</li>
<li><strong>Spedizione</strong>: 18,40 €</li>
</ul>
<p>A questo è necessario aggiungere una memoria <strong>CompactFlash</strong> (io ne ho usata una da 2GB), un <strong>lettore/scrittore di tali memorie</strong> e un <strong>adattatore seriale&lt;=&gt;USB</strong> (o soltanto un cavo seriale se avete una porta adatta). Attenzione al cavo seriale che deve essere RS-232 altrimenti la connessione non funziona.</p>
<h3>Sistema operativo</h3>
<p>Il sistema operativo scelto è <a title="Debian Voyage" href="http://linux.voyage.hk/" target="_blank">Debian Voyage</a>, una versione di Debian ottimizzata per le piattaforme <strong>embedded x86</strong>. La sua installazione sulla CompactFlash è estremamente semplice e veloce (per i dettagli vi rimando alla <a title="Wiki di Debian Voyage" href="http://wiki.voyage.hk/dokuwiki/doku.php?id=installation" target="_blank">pagina wiki dedicata</a>).<br />
Una volta installato si può montare la memoria nella mainboard e agganciare il pc via seriale. Per visualizzare la console remota si può usare il software <strong>screen</strong>:</p>
<pre>screen /dev/ttyUSB0 38400</pre>
<p>Si può quindi alimentare la scheda e osservare il boot. Per accedere la prima volta a voyager usare l&#8217;utente <em>root </em>con password <em>voyage</em>.<br />
Consiglio di configurare subito la rete con un ip statico (usate <em>/etc/network/interfaces</em>) e installare <em>openssh-server</em> che permetterà di lavorare in remoto con la console preferita.</p>
<p>Per prepararsi all&#8217;installazione di Nagios dobbiamo fare un po&#8217; di cose:</p>
<pre>apt-get install locales dialog build-essential apache2 libapache2-mod-php5 mailx postfix
addgroup --system nagios
adduser --system --no-create-home --home /usr/local/nagios --ingroup nagios --disabled-password nagios
addgroup --system nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd www-data</pre>
<p>Configuriamo <a title="Postfix" href="http://www.postfix.org" target="_blank">Postfix</a> con i parametri corretti per la nostra connessione e inseriamo in <em>/etc/aliases</em> l&#8217;alias per l&#8217;utente root:</p>
<pre>postmaster: root
nagios: root
root: io@mio-dominio.com</pre>
<p>e aggiorniamo:</p>
<pre>newaliases
</pre>
<p>Anzichè <a title="Apache" href="http://www.apache.org" target="_blank">Apache</a> (un po&#8217; oneroso in termini di memoria consumata) volevo usare <a title="Nginx" href="http://nginx.org/" target="_blank">Nginx</a> ma per configurarlo per fornire pagine <a title="PHP" href="http://www.php.net" target="_blank">PHP</a> è necessario lavorarci un po&#8217;, quindi lascio questa configurazione per il futuro (considererò anche l&#8217;eventuale uso di <a title="Lighttpd" href="http://www.lighttpd.net/" target="_blank">Lighttpd</a>).</p>
<h3>Nagios</h3>
<p>Si può quindi iniziare a installare il software di monitoraggio, ovviamente <a title="Nagios" href="http://www.nagios.org/" target="_blank">Nagios</a>. Per alcuni check potrebbero essere necessari alcuni pacchetti, eccone alcuni tra i più comuni:</p>
<pre>apt-get install libgd2-xpm libgd2-xpm-dev libpng3 libpng3-dev libjpeg62 libjpeg-dev zlib1g zlib1g-dev libnet-snmp-perl snmp libssl-dev libpq-dev libmysqlclient15-dev smbclient qstat fping libradiusclient-ng-dev libldap2-dev</pre>
<p>Scarichiamo <a title="Download Nagios Core" href="http://www.nagios.org/download/core/" target="_blank">Nagios Core</a> in <em>/usr/src</em> e compiliamolo:</p>
<pre>tar xzf nagios-3.2.0.tar.gz
cd nagios-3.2.0/
./configure --prefix=/usr/local/nagios --with-command-group=nagcmd --with-httpd-conf=/etc/apache2/conf.d/
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf</pre>
<p>Per ulteriori informazioni seguite la <a title="Guida a Nagios" href="http://nagios.sourceforge.net/docs/3_0/quickstart.html" target="_blank">guida ufficiale</a>.<br />
Compiliamo e installiamo anche i plugin, scaricati da <a title="Download Nagios Plugins" href="http://www.nagios.org/download/plugins/" target="_blank">qui</a>:</p>
<pre>tar xzf nagios-plugin-1.4.14.tar.gz
cd nagios-plugin-1.4.14
./configure  --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
make
make install</pre>
<p>Creiamo adesso la password per l&#8217;accesso a Nagios:</p>
<pre>htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin</pre>
<p>Se cambiate il nome utente sostituite tutte le occorrenze di <em>nagiosadmin</em> col nuovo utente nel file <em>/usr/local/nagios/etc/cgi.cfg</em>.<br />
Aggiungiamo Nagios all&#8217;avvio del sistema:</p>
<pre>update-rc.d nagios defaults</pre>
<p>e iniziamo la configurazione. Una volta terminato, prima di lanciare o riavviare Nagios, possiamo verificare la correttezza della configurazione con:</p>
<pre>/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
</pre>
<p>La prima parte della guida termina qui, nella prossima vedremo come configurare i check di base e i controlli remoti con <a title="Nagios NRPE" href="http://www.nagios.org/download/addons/" target="_blank">Nagios NRPE</a>.</p>
<p><a href="http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/"><strong>Leggi la seconda parte della guida</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Mailserver with OpenLDAP, Postfix, Dovecot, Horde from source on Debian Etch</title>
		<link>http://www.tommyblue.it/2008/10/06/mailserver-with-openldap-postfix-dovecot-horde-from-source-on-debian-etch/</link>
		<comments>http://www.tommyblue.it/2008/10/06/mailserver-with-openldap-postfix-dovecot-horde-from-source-on-debian-etch/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 20:37:14 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Software Libero]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian etch]]></category>
		<category><![CDATA[dovecot]]></category>
		<category><![CDATA[horde]]></category>
		<category><![CDATA[imap]]></category>
		<category><![CDATA[imp]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[openldap]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[pop]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=241</guid>
		<description><![CDATA[During this howto i&#8217;ll setup a mail server with LDAP users, Postfix virtual transport and POP/IMAP access (with SSL). I&#8217;ll moreover setup Apache2 with PHP support, Horde webmail, vacation messages and user quotas. Every program will be compiled into /usr/src and installed into /usr/local/program_name. The mailboxes (in Maildir format) will be stored into /mail/uid/ Debian [...]]]></description>
			<content:encoded><![CDATA[<p>During this howto i&#8217;ll setup a mail server with LDAP users, Postfix virtual transport and POP/IMAP access (with SSL). I&#8217;ll moreover setup Apache2 with PHP support, Horde webmail, vacation messages and user quotas.<br />
Every program will be compiled into <em>/usr/src</em> and installed into <em>/usr/local/<strong>program_name</strong></em>. The mailboxes (in Maildir format) will be stored into <em>/mail/<strong>uid</strong>/</em></p>
<h4>Debian Etch installation</h4>
<p>Let&#8217;s start installing Debian Etch from businesscard and unchecking all the default packages (Desktop environment and Base system). After the reboot install some basic package:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install build-essential vim openssh-server psmisc autoconf file</div></div>
<p>OpenSSH is just an optional server, but i&#8217;m working on a VMWare virtual machine and an ssh console is more comfortable than the VMWare console :)<br />
<span id="more-241"></span></p>
<h4>Softwares</h4>
<p>Now download all the needed packages into <em>/usr/src</em>:</p>
<ul>
<li>OpenSSL 0.9.8i</li>
<li>BerkeleyDB 4.6.21 (<strong>version 4.7 is unsupported from OpenLDAP</strong>)</li>
<li>OpenLDAP 2.4.11</li>
<li>Apache 2.2.9</li>
<li>IMAP 2007b</li>
<li>PHP 5.2.6</li>
<li>Postfix 2.5 Patchlevel 5</li>
<li>Dovecot 1.1.3</li>
</ul>
<h4>OpenSSL</h4>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ cd /usr/src/openssl<br />
~$ ./config --openssldir=/usr/local/openssl --prefix=/usr/local/openssl<br />
~$ make<br />
~# make install</div></div>
<h4>BerkeleyDB</h4>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ cd /usr/src/db/build_unix<br />
~$ ../dist/configure --prefix=/usr/local/BerkeleyDB<br />
~$ make<br />
~# make install</div></div>
<h4>OpenLDAP</h4>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~# ln -s /usr/local/BerkeleyDB/include/db.h /usr/include/<br />
~$ CPPFLAGS=&quot;-I/usr/local/BerkeleyDB/include/&quot; LDFLAGS=&quot;-L/usr/local/lib -L/usr/local/BerkeleyDB/lib -R/usr/local/BerkeleyDB/lib&quot; LD_LIBRARY_PATH=&quot;/usr/src/db-4.6.21.NC/build_unix/.libs/&quot; ./configure --prefix=/usr/local/openldap --enable-crypt<br />
~$ make depend<br />
~$ make<br />
~$ make test<br />
~# make install</div></div>
<p>For this howto i&#8217;ll use <strong>dc=example,dc=com</strong>. Edit <em>/usr/local/openldap/etc/openldap/slapd.conf</em> including some schemas and setting the password for <strong>cn=Manager,dc=example,dc=com</strong></p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">include &nbsp; &nbsp; &nbsp; &nbsp; /usr/local/openldap/etc/openldap/schema/cosine.schema<br />
include &nbsp; &nbsp; &nbsp; &nbsp; /usr/local/openldap/etc/openldap/schema/nis.schema<br />
include &nbsp; &nbsp; &nbsp; &nbsp; /usr/local/openldap/etc/openldap/schema/inetorgperson.schema</div></div>
<p>Rename <em>/usr/local/openldap/var/openldap-data/DB_CONFIG.example</em> to <em>/usr/local/openldap/var/openldap-data/DB_CONFIG</em> and type:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/usr/local/openldap/libexec/slapd</div></div>
<p>to start the server.</p>
<p>Then create an ldif file (<strong>base.ldif</strong>) for the initial user:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dn: dc=example,dc=com<br />
&nbsp; &nbsp; &nbsp; objectclass: dcObject<br />
&nbsp; &nbsp; &nbsp; objectclass: organization<br />
&nbsp; &nbsp; &nbsp; o: example<br />
&nbsp; &nbsp; &nbsp; dc: example<br />
<br />
&nbsp; &nbsp; &nbsp; dn: cn=Manager,dc=example,dc=com<br />
&nbsp; &nbsp; &nbsp; objectclass: organizationalRole<br />
&nbsp; &nbsp; &nbsp; cn: Manager</div></div>
<p>and add it to the database:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/usr/local/openldap/bin/ldapadd -x -D &quot;cn=Manager,dc=example,dc=com&quot; -W -f base.ldif</div></div>
<p>Now let&#8217;s create some users, i&#8217;ll use these objects:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">objectClass: inetOrgPerson<br />
&nbsp;objectClass: top<br />
&nbsp;objectClass: posixAccount<br />
&nbsp;objectClass: shadowAccount</div></div>
<p>An example:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dn: cn=tommaso,ou=utenti,dc=example,dc=com<br />
cn: Tommaso<br />
gidNumber: 10001<br />
homeDirectory: /mail/tommaso<br />
sn: Visconti<br />
uid: tommaso<br />
uidNumber: 10001<br />
objectClass: inetOrgPerson<br />
objectClass: posixAccount<br />
objectClass: shadowAccount<br />
objectClass: top<br />
loginShell: /bin/bash<br />
givenName: Tommaso<br />
mail: tommaso@example.com<br />
shadowWarning: 7<br />
shadowMax: 99999<br />
shadowLastChange: 14121<br />
labeledURI: pippo<br />
employeeType: active<br />
userPassword: {CRYPT}cfBmIgztxLBh6</div></div>
<p>If you want to set these users as system users install <strong>libnss-ldap</strong></p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install libnss-ldap</div></div>
<p>and edit <em>/etc/nsswitch.conf</em></p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">passwd: compat ldap<br />
group: &nbsp;compat ldap<br />
shadow: compat ldap</div></div>
<p>and create the group:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">groupadd -g 10001 users</div></div>
<p>You can verify with:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">getent passwd</div></div>
<h4>Apache</h4>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ cd /usr/src/apache2<br />
<br />
<br />
~$ ./configure --prefix=/usr/local/apache2 --enable-so --with-ssl=/usr/local/openssl/ --enable-ssl<br />
~$ make<br />
~# make install</div></div>
<p>Edit <em>/usr/local/apache2/conf/apache.conf</em> and launch with:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/usr/local/apache2/bin/apachectl -k start</div></div>
<h4>IMAP</h4>
<p>The IMAP library is needed from PHP to send email from the webmail.</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ wget ftp://ftp.cac.washington.edu/imap/imap.tar.Z<br />
~$ cd /usr/src<br />
~$ tar xvzf imap.tar.Z<br />
~$ cd imap-2007b<br />
~$ make slx SSLTYPE=none<br />
~$ mkdir -p /usr/local/imap/lib<br />
~$ mkdir /usr/local/imap/include<br />
~$ cp c-client/*.h /usr/local/imap/include/<br />
~$ cp c-client/*.c /usr/local/imap/lib/<br />
~$ cp c-client/c-client.a /usr/local/imap/lib/libc-client.a</div></div>
<h4>PHP</h4>
<p>First, download and unzip the mysql client libraries, then:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ apt-get install libjpeg-dev libpng-dev libxml2-dev libmcrypt-dev libmagic1<br />
~$ cd /usr/src/php<br />
~$ ./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-gettext --with-~$ mcrypt --with-iconv --enable-mbstring=all --enable-mbregex --with-gd --with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-mime-magic=/usr/share/file/magic.mime --with-sqlite --with-ldap=/usr/local/openldap/ --with-imap=/usr/local/imap --with-mysql=/usr/src/mysql-5.0.67-linux-i686/ --with-mysqli=/usr/src/mysql-5.0.67-linux-i686/bin/mysql_config<br />
~$ make<br />
~$ make install</div></div>
<p>Edit <strong>apache.conf</strong> adding <strong>index.php</strong> to the default pages; if not present add this too:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;lt;filesmatch \.php$&amp;gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; SetHandler application/x-httpd-php<br />
&amp;lt;/filesmatch&amp;gt;</div></div>
<h4>Postfix</h4>
<p>Create <strong>/etc/ld.so.conf.d/my_libraries.conf</strong>:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/usr/local/openssl/lib<br />
/usr/local/BerkeleyDB/lib<br />
/usr/local/openldap/lib</div></div>
<p>and launch <strong>ldconfig</strong>!</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~# ln -s /usr/local/BerkeleyDB/lib/libdb.so /usr/lib<br />
~# addgroup --system postfix<br />
~# adduser --system -ingroup postfix --home /mail --no-create-home --disabled-password postfix<br />
~# addgroup --system postdrop<br />
~# addgroup --gid 800 maildeliver<br />
~# adduser --system --uid 800 --gid 800 --home /mail --disabled-password --no-create-home maildeliver<br />
~$ export LD_LIBRARY_PATH=&quot;/usr/local/openldap/lib:/usr/local/BerkeleyDB/lib/&quot;<br />
~$ make makefiles CCARGS='-DDEF_CONFIG_DIR=\&quot;/usr/local/postfix/etc\&quot; -DDEF_COMMAND_DIR=\&quot;/usr/local/postfix/sbin\&quot; -DDEF_DAEMON_DIR=\&quot;/usr/local/postfix/libexec\&quot; -DDEF_MANPAGE_DIR=\&quot;/usr/local/postfix/man\&quot; -DDEF_SENDMAIL_PATH=\&quot;/usr/local/postfix/bin/sendmail\&quot; -DDEF_MAILQ_PATH=\&quot;/usr/local/postfix/bin/mailq\&quot; -DDEF_DATA_DIR=\&quot;/usr/local/postfix/lib\&quot; -DHAS_DB -I/usr/local/BerkeleyDB/include -DHAS_LDAP -I/usr/local/openldap/include' AUXLIBS='-llber -L/usr/local/BerkeleyDB/include/ -ldb -lldap -L/usr/local/openldap/lib'<br />
~$ make<br />
~# make install<br />
~# ln -s /usr/local/postfix/etc/aliases /etc/<br />
~# /usr/local/postfix/sbin/postfix -c /usr/local/postfix/etc/ set-permissions<br />
~# chown -R postfix /usr/local/postfix/lib</div></div>
<p>The gid and user 800 will be used for the virtual transport.</p>
<p>This is <strong>main.cf</strong>:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">queue_directory = /usr/local/postfix-2.5.5/spool<br />
command_directory = /usr/local/postfix-2.5.5/sbin<br />
daemon_directory = /usr/local/postfix-2.5.5/libexec<br />
data_directory = /usr/local/postfix-2.5.5/lib<br />
mail_owner = postfix<br />
debug_peer_level = 2<br />
debugger_command =<br />
&nbsp; &nbsp; &nbsp;PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin<br />
&nbsp; &nbsp; &nbsp;ddd $daemon_directory/$process_name $process_id &amp; sleep 5<br />
sendmail_path = /usr/local/postfix-2.5.5/sbin/sendmail<br />
newaliases_path = /usr/local/postfix-2.5.5/bin/newaliases<br />
mailq_path = /usr/local/postfix-2.5.5/bin/mailq<br />
setgid_group = postdrop<br />
html_directory = no<br />
manpage_directory = /usr/local/postfix-2.5.5/man<br />
readme_directory = no<br />
smtpd_banner = Benvenuti ai puri di cuore<br />
biff = no<br />
append_dot_mydomain = no<br />
myhostname = mail.example.com<br />
alias_maps = hash:/etc/aliases<br />
alias_database = hash:/etc/aliases<br />
myorigin = /etc/mailname<br />
mydestination = localhost<br />
relayhost = <br />
mynetworks = 127.0.0.0/8 192.168.0.0/24<br />
mailbox_size_limit = 0<br />
recipient_delimiter = +<br />
inet_interfaces = all<br />
home_mailbox = Maildir/<br />
virtual_transport = virtual<br />
virtual_uid_maps = static:800<br />
virtual_gid_maps = static:800<br />
virtual_mailbox_base = /mail<br />
virtual_mailbox_maps = ldap:/usr/local/postfix-2.5.5/etc/ldap-accounts.cf<br />
virtual_mailbox_domains = example.com<br />
virtual_alias_maps = hash:/etc/aliases<br />
relay_domains = localhost</div></div>
<p><strong>ldap-accounts.cf</strong>:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server_host = localhost<br />
search_base = ou=utenti,dc=example,dc=com<br />
query_filter = mail=%s<br />
result_attribute = uid<br />
version = 3<br />
bind = yes<br />
bind_dn = cn=Manager,dc=example,dc=com<br />
bind_pw = pippo</div></div>
<p>Remember to create an user for bindings and edit Postfix and Dovecot configurations to use it.<br />
To verify the ldap file use postmap:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ postmap -q tommaso.visconti@example ldap:/usr/local/postfix/etc/ldap-aliases.cf <br />
tommaso</div></div>
<p>Start postfix with:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~# /usr/local/postfix/sbin/postfix start</div></div>
<h4>Dovecot</h4>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ cd /usr/src/dovecot<br />
~$ LDFLAGS=&quot;-L/usr/local/openldap/lib -L/usr/local/openssl/lib&quot; CPPFLAGS=&quot;-I/usr/local/openldap/include -I/usr/local/openssl/include/&quot; ./configure --prefix=/usr/local/dovecot --with-ldap=yes --with-ssl=openssl<br />
~$ make<br />
~# make install<br />
~# adduser --system -ingroup mail --home /usr/local/dovecot/lib --no-create-home --shell /bin/false --disabled-password dovecot</div></div>
<p>This is <strong>dovecot.conf</strong>:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">protocols = &nbsp;imap imaps pop3 pop3s<br />
mail_uid = 800<br />
mail_gid = 800<br />
listen = *<br />
disable_plaintext_auth = no<br />
shutdown_clients = yes<br />
log_path = /var/log/dovecot.log <br />
info_log_path = /var/log/mail.log<br />
log_timestamp = &quot;%Y-%m-%d %H:%M:%S &quot;<br />
syslog_facility = mail<br />
ssl_listen = *<br />
ssl_disable = no<br />
ssl_cert_file = /etc/ssl/certs/dovecot.pem<br />
ssl_key_file = /etc/ssl/private/dovecot.pem<br />
login_chroot = yes<br />
login_greeting = Welcome to my mail server.<br />
login_log_format_elements = user=&lt; %u&gt; method=%m rip=%r lip=%l %c<br />
login_log_format = %$: %s<br />
mail_location = maildir:/mail/%n <br />
mail_full_filesystem_access = no<br />
mail_debug = no<br />
first_valid_uid = 800<br />
last_valid_uid = 800<br />
first_valid_gid = 800<br />
last_valid_gid = 800<br />
protocol imap {<br />
}<br />
protocol pop3 {<br />
&nbsp; pop3_uidl_format = %08Xu%08Xv<br />
}<br />
auth_verbose = no<br />
auth_debug = no<br />
auth_debug_passwords = no<br />
auth default {<br />
&nbsp; mechanisms = PLAIN LOGIN<br />
&nbsp; passdb ldap {<br />
&nbsp; &nbsp; args = /usr/local/Dovecot-1.1.3/etc/dovecot-ldap.conf <br />
&nbsp; }<br />
&nbsp; userdb ldap {<br />
&nbsp; &nbsp; # Path for LDAP configuration file, see /etc/dovecot/dovecot-ldap.conf for example<br />
&nbsp; &nbsp; args = /usr/local/Dovecot-1.1.3/etc/dovecot-ldap.conf <br />
&nbsp; }<br />
&nbsp; user = mail_deliver<br />
}<br />
dict {<br />
}<br />
plugin {<br />
}</div></div>
<p>and <strong>dovecot-ldap.conf</strong>:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">hosts = localhost<br />
dn = cn=Manager,dc=example,dc=come<br />
dnpass = pippo<br />
ldap_version = 3<br />
base = ou=utenti, dc=example, dc=com<br />
deref = never<br />
scope = subtree<br />
user_attrs = homeDirectory=home<br />
user_filter = (&amp;(employeeType=active)(mail=%u))<br />
pass_attrs = mail=user@domain,userPassword=password<br />
pass_filter = (&amp;(employeeType=active)(mail=%u))<br />
default_pass_scheme = CRYPT</div></div>
<p>Start dovecot with <strong>/usr/local/dovecot/sbin/dovecot</strong></p>
<h4>Webmail</h4>
<p>I suggest <a href="http://www.horde.org/">Horde Framework</a> or <a href="http://roundcube.net/">Roundcube</a></p>
<h4>Webography</h4>
<ul>
<li><a href="http://www.openssl.org/">OpenSSL</a></li>
<li><a href="http://www.oracle.com/technology/products/berkeley-db/index.html">BerkeleyDB</a></li>
<li><a href="http://www.openldap.org">OpenLDAP</a></li>
<li><a href="http://www.apache.org">Apache</a></li>
<li><a href="ftp://ftp.cac.washington.edu/imap/">IMAP</a></li>
<li><a href="http://www.php.net">PHP</a></li>
<li><a href="http://phpldapadmin.sourceforge.net/">PHPLdapAdmin</a></li>
<li><a href="http://www.postfix.org">Postfix</a></li>
<li><a href="http://www.dovecot.org">Dovecot</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2008/10/06/mailserver-with-openldap-postfix-dovecot-horde-from-source-on-debian-etch/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Passenger AKA mod_rails, ovvero rails su apache</title>
		<link>http://www.tommyblue.it/2008/04/20/passenger-aka-mod_rails-ovvero-rails-su-apache/</link>
		<comments>http://www.tommyblue.it/2008/04/20/passenger-aka-mod_rails-ovvero-rails-su-apache/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 21:18:25 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Software Libero]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=143</guid>
		<description><![CDATA[Finalmente sta diventando semplice usare Ruby On Rails con Apache! Non che Mongrel non funzioni, ma non e&#8217; proprio, diciamo, user friendly&#8230; Il software in questione si chiama Passenger, ovvero mod_rails. I passaggi per l&#8217;installazione sono solo due: ~# gem install passenger ~# passenger-install-apache2-module In coda al secondo comando verranno mostrate le indicazioni per concludere [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.tommyblue.it/wp-content/uploads/2008/04/site_body_eyecatcher_bg.png" alt="" title="site_body_eyecatcher_bg" class="alignleft size-full wp-image-144" />Finalmente sta diventando semplice usare Ruby On Rails con Apache! Non che Mongrel non funzioni, ma non e&#8217; proprio, diciamo, <em>user friendly</em>&#8230;<br />
Il software in questione si chiama <a href="http://www.modrails.com/"><strong>Passenger</strong></a>, ovvero <strong>mod_rails</strong>.</p>
<p>I passaggi per l&#8217;installazione sono solo due:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~# gem install passenger<br />
~# passenger-install-apache2-module</div></div>
<p>In coda al secondo comando verranno mostrate le indicazioni per concludere l&#8217;installazione, a quel punto basta fare il reload di Apache et voila&#8217;, <strong>mod_rails</strong>!</p>
<p>P.S. In coda aggiungo che, curiosamente, qualcuno si e&#8217; dimenticato di pagare per il dominio <strong>rubyonrails.org</strong> (mi perdonerete se non aggiungo il link) tanto che adesso al suo posto si trova uno dei soliti siti spam del menga&#8230;</p>
<p><strong>AGGIORNAMENTO</strong><br />
Inserito Passenger proprio ieri in <strong>Gentoo ~x86</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2008/04/20/passenger-aka-mod_rails-ovvero-rails-su-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scansione antivirus on-the-fly attraverso il proxy</title>
		<link>http://www.tommyblue.it/2006/05/07/scansione-antivirus-on-the-fly-attraverso-il-proxy/</link>
		<comments>http://www.tommyblue.it/2006/05/07/scansione-antivirus-on-the-fly-attraverso-il-proxy/#comments</comments>
		<pubDate>Sun, 07 May 2006 09:06:27 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[antivirus]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[clamav]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=412</guid>
		<description><![CDATA[Introduzione Lo scopo della guida è configurare la scansione antivirus dei dati passanti per il proxy web. Gli strumenti saranno il proxy Squid, il redirector SquidGuard e l&#8217;antivirus Clamav. Ad essi si aggiunge Apache2, a cui si appoggia lo script in Perl Viralator, che permette tutto il giochetto. Infine useremo una semplice regola di iptables. [...]]]></description>
			<content:encoded><![CDATA[<div>
<h2>Introduzione</h2>
<p>Lo scopo della guida è configurare la scansione antivirus dei dati passanti per il proxy web.<br />
Gli strumenti saranno il proxy Squid, il redirector SquidGuard e l&#8217;antivirus Clamav. Ad essi si aggiunge Apache2, a cui si appoggia lo script in Perl Viralator, che permette tutto il giochetto. Infine useremo una semplice regola di iptables.</p>
<h2>Installazione degli strumenti necessari</h2>
<p>Con Debian i pacchetti da installare sono: <strong>clamav-base clamav squid squidguard apache2</strong>.</p>
<h2>Configurazione</h2>
<h3>Apache2</h3>
<p>Apache deve gestire la scansione dei files da parte di Clamav attraverso lo script di Viralator.<br />
L&#8217;unica modifica che ho apportato nel file di configurazione di default è stata il cambiamento del path degli script cgi a <strong>/var/www/cgi-bin</strong> in cui metterò poi lo script di Viralator.</p>
<h3>Clamav</h3>
<p>Clamav non necessita di alcuna configurazione post-installazione.<br />
Potete provare la sua funzionalità con:</p>
<pre>truelite-server:~# clamscan /*
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
/bin/bash: OK
/bin/cat: OK
/bin/chgrp: OK
/bin/chmod: OK
/bin/chown: OK
[...]</pre>
<p>Non preoccupatevi dei messaggi minatori, vi avvertono solo che non avete l&#8217;ultima versione del programma (se, come me, usate Debian Sarge&#8230;)<br />
Una cosa molto utile è impostare l&#8217;auto aggiornamento del database antivirus. Il metodo che ho ritenuto più giusto in fase di installazione è &#8220;a mano&#8221;, altrimenti potete usare il demone, che però girerà di continuo sul pc (utile per i server).<br />
Per aggiornare a mano l&#8217;antivirus il comando è semplicemente:</p>
<pre>macondo:~# freshclam
ClamAV update process started at Wed Nov  2 16:09:56 2005
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.84 Recommended version: 0.87
DON'T PANIC! Read http://www.clamav.net/faq.html
main.cvd is up to date (version: 34, sigs: 39625, f-level: 5, builder: tkojm)
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Current functionality level = 4, recommended = 5
DON'T PANIC! Read http://www.clamav.net/faq.html
daily.cvd is up to date (version: 1158, sigs: 1300, f-level: 6, builder: diego)
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Current functionality level = 4, recommended = 6
DON'T PANIC! Read http://www.clamav.net/faq.html</pre>
<p>Anche qui niente panico, gli WARNING sono dovuti alla versione un po&#8217; obsoleta del pacchetto.</p>
<h3>SquidGuard</h3>
<p>Il file di configurazione di SquidGuard è <strong>/etc/squid/squidGuard.conf</strong>.<br />
La configurazione che vi propongo fa sì che la scansione avvenga solo su alcuni tipi di file.<br />
Ecco come:</p>
<pre>macondo:~# mkdir -p /etc/squid/squidGuard/db/deny
macondo:~# vi /etc/squid/squidGuard/db/deny/files</pre>
<p>Ecco il contenuto del file <strong>files</strong>:</p>
<pre>(\.exe$|\.com$|\.bat$|\.zip$|\.tgz$|\.gz$|\.bz2$)</pre>
<p>Aggiungete tutte le estensioni di cui volete effettuare la scansione.<br />
A questo punto modificate il file <strong>/etc/squid/squidGuard.conf</strong>:</p>
<pre>dbhome /etc/squid/squidGuard/db
logdir /var/log/squid

dest files {
        expressionlist deny/files
}

acl {
        default {
                pass !files all
                redirect

http://[PROXY]/cgi-bin/viralator.cgi?url=%u

        }
}</pre>
<p>Al posto di [PROXY] dovete mettere l&#8217;IP o l&#8217;hostname del proxy che provvederà a lanciare lo script viralator.cgi</p>
<h3>Squid</h3>
<p>Il file di configurazione di Squid è <strong>/etc/squid/squid.conf</strong>, il contenuto è questo:</p>
<pre>#
# Redirect verso SquidGuard
#

redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 10

#
# Proxy trasparente
#

httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off

#
# Resto della configurazione
#

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 256 MB
maximum_object_size 204800 KB
maximum_object_size_in_memory 32 KB
cache_dir ufs /var/spool/squid  1000 16 256
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl Safe_ports port 80          # http
acl Safe_ports port 20          # ftp
acl Safe_ports port 21          # ftp
acl Safe_ports port 22          # ssh
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 110         # pop3
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Safe_ports port 631         # cups
acl Safe_ports port 873         # rsync
acl Safe_ports port 901         # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#
# ATTENZIONE: Modificare con l'ip della propria rete
#

acl our_networks src 192.168.10.0/255.255.255.0
http_access allow our_networks
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
coredump_dir /var/spool/squid
extension_methods REPORT MERGE MKACTIVITY CHECKOUT</pre>
<h3>Viralator</h3>
<p>A questo punto potete scaricare il pacchetto di Viralator da <a href="http://viralator.sourceforge.net/" target="_blank">http://viralator.sourceforge.net/</a> e scompattarlo.<br />
Ai file scaricati sostituite <a href="http://www.lilik.it/%7Etommyblue/modules/appunti/files/viralator.tar.bz2">questi</a> file che ho modificato per correggere alcuni errori (i file derivano dalla <strong>versione 0.9.4</strong>).</p>
<p>Quindi copiate il file <strong>viralator.cgi</strong> in <strong>/var/www/cgi-bin</strong> (o comunque nel path per gli script cgi che avete impostato in Apache 2) e la cartella <strong>etc/viralator</strong> in <strong>/etc/viralator</strong>.</p>
<pre>default_language -&gt; italian.txt
servername -&gt; [nome del server]
antivirus -&gt; CLAMAV
virusscanner -&gt; clamscan
scannerpath -&gt; /usr/bin
viruscmd -&gt; --verbose --stdout
alert -&gt; FOUND
scannersummary -&gt; true
downloads -&gt; /var/www/downloads
downloadsdir -&gt; /downloads
popupfast -&gt; false
popupback -&gt; true
popupwidth -&gt; 600
popupheight -&gt; 400
filechmod -&gt; 644
secret -&gt; [psw]
BAR -&gt; img/bar.png
PROGRESS -&gt; img/progress.png</pre>
<p>Da notare la cartella <strong>/var/www/downloads</strong> per il download temporaneo. Create questa cartella e datele i giusti permessi affinchè Viralator (quindi Apache) possa scriverci:</p>
<pre>macondo:~# mkdir /var/www/downloads
macondo:~# chown www-data.www-data /var/www/downloads
macondo:~# chmod 775 /var/www/downloads</pre>
<p>Tale cartella dovrà essere raggiungibile via browser col path <strong>/downloads</strong>.<br />
Controllate anche che i percorsi dei file di Clamav siano corretti e modificate anche <strong>[nome del server]</strong> e <strong>[psw]</strong>.<br />
Infine copiate i file <strong>bar.png</strong> e <strong>progress.png</strong> dalla cartella in cui avete scompattato Viralator ad una posizione raggiungibile dal browser.</p>
<h2>IpTables</h2>
<p>Eccoci alla fine, come preannunciato abbiamo bisogno solo di una semplice regola di IpTables. Il suo scopo è quello di creare un cosiddetto <strong>Proxy trasparente</strong>. Ovvero le richieste degli utenti saranno automaticamente girate verso la porta 3128 (Squid) senza che essi debbano configurare l&#8217;uso del proxy nel loro pc o browser.<br />
La regola è la seguente:</p>
<pre>macondo:~# iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.0/24 -d ! 192.168.1.0/24 --dport 80 -j REDIRECT --to-port 3128</pre>
<p>In questo esempio la rete è 192.168.1.0/24, il proxy sarà in ascolto sull&#8217;interfaccia eth0 e la redirezione avverrà solo sui pacchetti la cui provenienza sia la rete e la loro destinazione invece non lo sia.</p>
<h2>Riavvio e Test</h2>
<p>Riavviate Apache e Squid, quindi potete provare la funzionalità del marchingegno tentando di scaricare qualche file la cui estensione sia tra quelle che abbiamo impostato in <strong>/etc/squid/squidGuard/db/deny/files</strong>.<br />
Come potrete vedere sarà effettuata la scansione sul file e solo dopo vi sarà permesso di salvarlo sul vostro pc.<br />
Sul sito di Viralator è anche possibile scaricare un falso virus come test, provate anche questo.</p>
<h2>Errori comuni</h2>
<h3>Il file viene scaricato anche se infetto</h3>
<p>Se Viralator non trova l&#8217;antivirus Clamav si comporta in maniera un po&#8217; particolare, ovvero permette il download senza effettuare la scansione.<br />
Fate quindi attenzione che nel file <strong>/etc/viralator/viralator.conf</strong> sia il path che il nome dell&#8217;eseguibile siano corretti.<br />
Ad esempio nel file di configurazione originale viene cercato l&#8217;eseguibile clamdscan in /usr/local/bin. in Debian il file è clamscan e si trova il /usr/bin.</p>
<h3>&#8220;You cannot download from this site! The given url is not valid. Please contact your system administrator for details.&#8221;</h3>
<p>Le pagine indirizzate al vostro server proxy non devono essere girate dalla porta 80 alla 3128, state quindi attenti che nel comando di iptables l&#8217;opzione <strong>-d ! 192.168.1.0/24</strong> sia corretta e l&#8217;ip della rete sia quello corretto.</p>
<h3>FAQ</h3>
<p>Per qualunque altra domanda guardate le FAQ nel sito di Viralator <a href="http://viralator.sourceforge.net/" target="_blank">http://viralator.sourceforge.net/</a></p>
<h2>Un&#8217;alternativa: SCAVR</h2>
<p>Un analogo risultato dovrebbe essere ottenuto con SCAVR (Squid ClamAV Redirector, un progetto che non sembra essere molto maturo).<br />
Gli strumenti necessari sono: <strong>Python, PyClamav, Clamav, Squid e SCAVR</strong>.</p>
<h3>Python e PyClamav</h3>
<p>In Debian dovreste aver già installato Python, altrimenti potete installalo insieme agli strumenti necessari alla compilazione dei nuovi moduli con:</p>
<pre>macondo:~# apt-get install python2.3-setuptools</pre>
<p>Serve anche il pacchetto di sviluppo di Clamav:</p>
<pre>macondo:~# apt-get install libclamav-dev</pre>
<p>A questo punto scaricare PyClamav e scompattatelo (il pacchetto Debian in testing e unstable non funziona sulla versione stabile per alcune dipendenze mancate).<br />
Entrate quindi nella cartella, compilate e installate il modulo <strong>pyclamav</strong>:</p>
<pre>macondo:~# python setup.py build
running build
running build_ext
building 'pyclamav' extension
creating build
creating build/temp.linux-i686-2.3
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I/usr/include/python2.3 -c pyclamav.c -o build/temp.linux-i686-2.3/pyclamav.o
creating build/lib.linux-i686-2.3
gcc -pthread -shared build/temp.linux-i686-2.3/pyclamav.o -lclamav -o build/lib.linux-i686-2.3/pyclamav.so

macondo:~# python setup.py install
running install
running build
running build_ext
running install_lib
copying build/lib.linux-i686-2.3/pyclamav.so -&gt; /usr/lib/python2.3/site-packages</pre>
<p>A questo punto <a href="http://www.jackal-net.at/tiki-list_file_gallery.php?galleryId=3" target="_blank">scaricate il pacchetto di SCAVR</a> e sscompattatelo. Quindi spostate il file di configurazione nella cartella <strong>/etc/squid</strong> e lo script in una cartella di binari (es. <strong>/usr/local/bin</strong>).<br />
Assicuratevi che lo script abbia i giusti permessi:</p>
<pre>macondo:~# chmod +x /usr/local/bin/SquidClamAV_Redirector.py</pre>
<p>Bene, bisogna modificare il file di configurazione <strong>/etc/squid/SquidClamAV_Redirector.conf</strong> secondo le proprie esigenze.</p>
<p>Adesso si può provare il funzionamento provando a lanciare lo sript:</p>
<pre>macondo:~# /usr/local/bin/SquidClamAV_Redirector.py -c /etc/squid/SquidClamAV_Redirector.conf
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
[Ctrl-D per uscire]</pre>
<p>Se non ricevete errori lo script sta funzionando.</p>
<p>Per finire non resta che configurare <strong>/etc/squid/squid.conf</strong> per la redirezione verso SCAVR, aggiungendo le righe seguenti:</p>
<pre>redirect_program /usr/local/bin/SquidClamAV_Redirector.py -c /etc/squid/SquidClamAV_Redirector.conf
redirect_children 5</pre>
<p>Finora non sono riuscito a farelo funzionare correttamente: lo script analizza effettivamente solo i file specificati ma, anche se contengono virus, vengono poi fatti scaricare sul client.</p>
<h2>Risorse</h2>
<p><a href="http://viralator.sourceforge.net/" target="_blank">Viralator</a><br />
<a href="http://www.clamav.net/" target="_blank">Clamav</a><br />
<a href="http://www.squid-cache.org/" target="_blank">Squid</a><br />
<a href="http://www.squidguard.org/" target="_blank">SquidGuard</a><br />
<a href="http://xael.org/norman/python/pyclamav/index.html" target="_blank">PyClamav</a><br />
<a href="http://www.jackal-net.at/tiki-read_article.php?articleId=1" target="_blank">SCAVR</a><br />
<a href="http://www.apache.org/" target="_blank">Apache</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2006/05/07/scansione-antivirus-on-the-fly-attraverso-il-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache2 in SSL</title>
		<link>http://www.tommyblue.it/2006/05/07/apache2-in-ssl/</link>
		<comments>http://www.tommyblue.it/2006/05/07/apache2-in-ssl/#comments</comments>
		<pubDate>Sun, 07 May 2006 08:42:27 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Software Libero]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=394</guid>
		<description><![CDATA[Creazione del certificato macondo:~# rm -rf /root/CertAuth macondo:~# mkdir /root/CertAuth macondo:~# chmod 700 /root/CertAuth macondo:~# cd /root/CertAuth macondo:~/CertAuth# /usr/lib/ssl/misc/CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key ...............++++++ ..............................................................++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass [...]]]></description>
			<content:encoded><![CDATA[<div>
<h2>Creazione del certificato</h2>
<pre>macondo:~# rm -rf /root/CertAuth
macondo:~# mkdir /root/CertAuth
macondo:~# chmod 700 /root/CertAuth
macondo:~# cd /root/CertAuth</pre>
<pre>macondo:~/CertAuth# /usr/lib/ssl/misc/CA.pl -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
...............++++++
..............................................................++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Italia
Locality Name (eg, city) []:Firenze
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tommyblue.it
Organizational Unit Name (eg, section) []:Tommyblue.it
Common Name (eg, YOUR name) []:Tommyblue
Email Address []:info@tommyblue.it</pre>
<pre>macondo:~/CertAuth# /usr/lib/ssl/misc/CA.pl -newreq
Generating a 1024 bit RSA private key
..................++++++
...++++++
writing new private key to 'newreq.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Italia
Locality Name (eg, city) []:Firenze
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tommyblue.it
Organizational Unit Name (eg, section) []:Tommyblue.it
Common Name (eg, YOUR name) []:Tommyblue
Email Address []:info@tommyblue.it

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Request (and private key) is in newreq.pem</pre>
<pre>macondo:~/CertAuth# /usr/lib/ssl/misc/CA.pl -sign
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            9b:49:17:c6:49:1a:09:7a
        Validity
            Not Before: Oct 25 17:01:48 2005 GMT
            Not After : Oct 25 17:01:48 2006 GMT
        Subject:
            countryName               = IT
            stateOrProvinceName       = Italia
            localityName              = Firenze
            organizationName          = Tommyblue.it
            organizationalUnitName    = Tommyblue.it
            commonName                = Tommyblue
            emailAddress              = info@tommyblue.it
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                FF:E0:BB:B6:A4:03:B7:8D:8F:32:51:3D:1D:A8:E9:84:5B:7C:4B:BA
            X509v3 Authority Key Identifier:
                keyid:6A:E5:B3:7D:68:BF:19:6F:E5:3D:5A:7D:23:90:3E:03:00:2A:41:23
                DirName:/C=IT/ST=Italia/L=Firenze/O=Tommyblue.it/OU=Tommyblue.it/CN=Tommyblue/emailAddress=info@tommyblue.it
                serial:9B:49:17:C6:49:1A:09:79

Certificate is to be certified until Oct 25 17:01:48 2006 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Signed certificate is in newcert.pem</pre>
<pre>macondo:~/CertAuth# openssl rsa &lt; newreq.pem &gt; newkey.pem
Enter pass phrase:
writing RSA key</pre>
<pre>macondo:~/CertAuth# cp /root/CertAuth/demoCA/cacert.pem /etc/ssl/certs/cacert.pem
macondo:~/CertAuth# cp /root/CertAuth/newcert.pem /etc/ssl/certs/ldapcert.pem
macondo:~/CertAuth# cp /root/CertAuth/newkey.pem /etc/ssl/certs/ldapkey.pem
macondo:~/CertAuth# chmod 600 /root/CertAuth/newkey.pem</pre>
<h2>Configurazione di Apache2</h2>
<p>Cominciamo aprendo, oltre alla porta 80, anche la porta 443</p>
<pre>macondo:~# echo -e "Listen 80\nListen 443" &gt; /etc/apache2/ports.conf</pre>
<p>Quindi attiviamo i moduli ssl necessari:</p>
<pre>macondo:~# ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
macondo:~# ln -s /etc/apache2/mods-available/load.conf /etc/apache2/mods-enabled/ssl.load</pre>
<p>Se adesso vogliamo che il nostro server sia raggiungibile sia in http che in https dobbiamo modificare il file <strong>/etc/apache2/sites-available/default</strong>:</p>
<pre>NameVirtualHost *</pre>
<p>diventa</p>
<pre>NameVirtualHost *:80
NameVirtualHost *:443</pre>
<p>La parte successiva (tra <strong>&lt;VirtualHost *&gt;</strong> e <strong>&lt;/VirtualHost&gt;</strong>) deve essere replicata, sostituendo <strong>&lt;VirtualHost *&gt;</strong> con <strong>&lt;VirtualHost *:80&gt;</strong> in un caso e <strong>&lt;VirtualHost *:443&gt;</strong> nell&#8217;altro.  Infine inserite le righe seguenti in <strong>&lt;VirtualHost *:443&gt;</strong></p>
<pre> &lt;VirtualHost *:443&gt;
   &lt;IfModule mod_ssl.c&gt;
    SSLEngine on
    SSLCACertificateFile        /etc/ssl/certs/cacert.pem
    SSLCertificateFile          /etc/ssl/certs/ldapcert.pem
    SSLCertificateKeyFile       /etc/ssl/certs/ldapkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
   &lt;/IfModule&gt;
...
...
...</pre>
<p>Se non lo fosse attiviamo il file appena modificato creando un link simbolico:</p>
<pre>macondo:~# ln -s /etc/apache2/sites-available/default /etc/apache2/sites-enabled/000-default</pre>
<p>Infine riavviamo Apache2:</p>
<pre>macondo:~# /etc/init.d/apache2 restart</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2006/05/07/apache2-in-ssl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

