<?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>Mia mamma usa Linux! &#187; Marco Bonetti</title>
	<atom:link href="http://www.miamammausalinux.org/author/mbonetti/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miamammausalinux.org</link>
	<description>Perché niente è impossibile da capire... Se lo spieghi bene !</description>
	<lastBuildDate>Mon, 02 Jan 2012 11:31:44 +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>Tor: introduzione all&#8217;onion routing</title>
		<link>http://www.miamammausalinux.org/2010/03/tor-introduzione-onion-routing/</link>
		<comments>http://www.miamammausalinux.org/2010/03/tor-introduzione-onion-routing/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 13:45:33 +0000</pubDate>
		<dc:creator>Marco Bonetti</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Tor]]></category>
		<category><![CDATA[Analisi traffico]]></category>
		<category><![CDATA[Censura]]></category>
		<category><![CDATA[Onion Routing]]></category>
		<category><![CDATA[Privacy]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=903</guid>
		<description><![CDATA[The Onion Router (comunemente chiamato Tor) è un software che implementa la tecnica omonima dell&#8217;onion routing per contrastare quella forma di censura chiamata analisi del traffico. Per capire il funzionamento e l&#8217;utilizzo di Tor, dobbiamo essere sicuri di conoscere quale problema vuole risolvere. Cosa è, quindi, l&#8217;analisi del traffico? Con analisi del traffico si definisce [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/tor.png" alt="Tor" title="Tor" width="100" height="64" class="size-full wp-image-927" /></p>
<p>The Onion Router (comunemente chiamato Tor) è un software che implementa la tecnica omonima dell&#8217;onion routing per contrastare quella forma di censura chiamata analisi del traffico.<br />
Per capire il funzionamento e l&#8217;utilizzo di Tor, dobbiamo essere sicuri di conoscere quale problema vuole risolvere. Cosa è, quindi, l&#8217;analisi del traffico?</p>
<p>Con analisi del traffico si definisce una tecnica censoria basata sull&#8217;analisi passiva del traffico prodotto da una macchina o da un gruppo di esse. Ispezionando i pacchetti che escono da una rete, un attaccante è in grado di inferire un sacco di informazioni riguardanti l&#8217;origine di quei pacchetti. Pensate a una mail: un attaccante che ne intercetta il contenuto è in grado di sapere chi sia il mittente, a quale indirizzo sta scrivendo e cosa gli vuole comunicare. Quando questo concetto viene spostato a livello di traffico di rete lo scenario non cambia: un attaccante che intercetta un qualsiasi traffico di rete è in grado di inferire, dall&#8217;header dei pacchetti, chi li ha inviati, chi li riceverà e, guardando il body, cosa si vogliono comunicare.<br />
Una prima soluzione a questo tipo di problemi è quello di impiegare la crittografia, sfortunatamente, in entrambi gli scenari descritti in precedenza, la crittografia stessa non è in grado di fermare l&#8217;analisi del traffico ma solo di impedire la lettura dei contenuti del corpo del messaggio: per come deve funzionare la comunicazione su Internet, le informazioni dell&#8217;header sono in chiaro e disponibili a chiunque riesca a leggerne il contenuto.<br />
Questo problema è stato affrontato da tempo, con soluzioni più o meno efficaci: all&#8217;inizio degli anni 80 David Chaum propose le Mix Networks, una serie di proxy server da utilizzarsi in cascata. In questo modo un attaccante doveva ispezionare il traffico in più punti (all&#8217;uscita di ogni proxy, per la precisione) per poter inferire qualcosa di utile sul mittente del pacchetto che usciva dall&#8217;ultimo nodo della catena. L&#8217;idea di Chaum, benchè non utilizzata, è stato il seme che ha lanciato la ricerca sull&#8217;onion routing, letteralmente routing a cipolla.<br />
La ricerca sull&#8217;onion routing è stata portata avanti nel corso degli anni 90 dallo United States Naval Research Laboratory che ha poi passato il lavoro alla Electronic Frountier Foundation e, Venerdì 13 Agosto 2004 al 13th USENIX Security Symposium, Tor è stato presentato al pubblico. Da li in poi lo sviluppo del programma è andato in crescendo, gli sviluppatori hanno salutato la EFF che ha dato casa alle prime versioni del programma e, al giorno d&#8217;oggi, Tor è un prodotto dell&#8217;ormai a se stante Tor Project.<br />
Ma non è solo con la storia che si impara come funziona un protocollo, quindi rimbocchiamoci le maniche e guardiamo da vicino come funziona un programma. Guardiamo la prima figura:</p>
<p><a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/htw1.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/htw1-300x191.png" alt="" width="300" height="191" class="alignnone size-medium wp-image-915" /></a></p>
<p>i nodi con un simbolo + verde sono relay della rete Tor, Jane e Bob sono dei server pubblicamente raggiungibili da Internet, Alice è la nostra protagonista e sta utilizzando Tor in modalità client. Dave è un particolare server pubblico chiamato &#8220;Tor directory server&#8221;, lui e i suoi simili forniscono la lista pubblica di relay Tor e la mantegono periodicamente aggiornata. Il primo passo compiuto dal client Tor di Alice è, appunto, quello di contattare un directory server per ottenere la lista dei nodi marchiati con un simbolo + verde.<br />
A questo punto Alice istruisce il proprio client di contattare il server Bob, per esempio perchè vuole visitare una pagina web ospitata li sopra, il nodo Tor di Alice si preoccupa di costruire una catena di nodi attraverso i quali invierà la richiesta, come mostrato nella seconda figura:</p>
<p><a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/roles1.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/roles1-300x191.png" alt="" width="300" height="191" class="alignnone size-medium wp-image-916" /></a></p>
<p>nella terminologia di Tor, i nodi prendono un particolare nome a seconda della loro posizione nella catena di comunicazione o circuito: il primo nodo si chiama Guard Node (nodo di guardia), il secondo Middleman Node (nodo intermediario) e il terzo Exit Node (nodo di uscita). La scelta dei nodi di una catena viene effettuata dal client di Alice in base alle informazioni ricevute dal directory server: ogni relay Tor quando si registra presso le directory invia il proprio indirizzo ip e una serie di caratteristiche. I nodi di uscita sono i più importanti: contattando loro personalmente le macchine esterne alla rete Tor devono dire esplicitamente di essere volenterosi e in grado di farlo. Parimenti, i nodi di guardia vincono questo status quando hanno servito la rete Tor per un lungo periodo: sono nodi fidati a cui possiamo affidare il primo passo per entrare nella rete. Tutti i rimanenti relay sono considerati nodi intermediari. Il perchè di queste scelte e di questa classificazione si può spiegare brevemente dicendo che sono il primo e l&#8217;ultimo nodo della catena che rappresentano un ottimo punto per attaccare il protocollo, purtroppo parlare di attacchi al protocollo Tor meriterebbe una serie di articoli a se stante, quindi per questa introduzione ci limitiamo a una seppur stringata spiegazione.<br />
Un altro punto importante è osservare il colore delle frecce: la comunicazione che avviene all&#8217;interno della rete Tor è completamente crittata, questo impedisce a un attaccante che riesca a intercettare uno qualsiasi di quei messaggi, di ricostruire tutto il flusso. Nella figura, l&#8217;ultimo collegamento (tra Exit e Bob) non è crittato ma questo dipende dal tipo di richiesta che ha effettuato Alice a monte del circuito: nel nostro esempio abbiamo ipotizzato una pagina web servita con HTTP, se Alice avesse usato HTTPS anche l&#8217;ultimo link sarebbe stato verde. Va ribadito, comunque, che l&#8217;ultima comunicazione è estranea alla trasmissione di informazioni all&#8217;interno del protocollo di Tor.<br />
Per capire come mai questo protocollo è resistente agli attacchi di analisi del traffico è utile analizzare cosa accade all&#8217;interno di un circuito:<br />
<a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/1.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/1-300x300.png" alt="" width="300" height="300" class="alignnone size-medium wp-image-917" /></a><br />
questo è il pacchetto che viene inviato da Alice a Guard, il contenuto della buccia rossa è protetto con le chiavi di Guard stesso, quindi solo lui può leggere cosa c&#8217;è scritto. Leggendo le istruzioni contenute in questo strato, Guard capisce che deve inviare il resto del contenuto a Middleman:<br />
<a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/2.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/2-300x300.png" alt="" width="300" height="300" class="alignnone size-medium wp-image-918" /></a><br />
questo è il contenuto visto da Middleman: come nel caso precedente la buccia di colore verde è leggibile solo dal destinatario. In questo strato Middleman legge che deve spedire il resto del contenuto ad Exit. Come potete notare, già a questo livello è sparita ogni indicazione riguardante Alice.<br />
 <a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/3.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/3-300x300.png" alt="" width="300" height="300" class="alignnone size-medium wp-image-919" /></a><br />
Questo è l&#8217;ultimo passaggio: Exit riceve da Middleman quello che rimane della cipolla, legge il contenuto decifrabile solo da lui e scopre che deve fare richiesta, secondo l&#8217;esempio che ci sta accompagnando per tutto l&#8217;articolo, di una pagina web presso il server Bob.<br />
Una volta che Bob ha trasmesso il contenuto necessario ad Exit questo impacchetterà tutto e spedirà a Middleman il quale, vedendo che gli sta arrivando una risposta da Exit, passerà a Guard e questi chiuderà il circuito inviando la risposta ad Alice.<br />
In questo modo il protocollo è in gradi di sconfiggere l&#8217;analisi del traffico: l&#8217;utilizzo della crittografia e del &#8220;remixaggio&#8221; dei pacchetti impedisce a un attaccante che osserva il traffico prodotto da uno qualsiasi dei nodi di correlarne il contenuto e il mittente. Inoltre, per prevenire che uno dei nodi del circuito possa leggere arbitrariamente il contenuto delle risposte, la comunicazione viene protetta con una chiave di sessione, che viene modificata frequentemente, apribile solo da Alice.</p>
<p>Per il momento questo è tutto: spero di aver stuzzicato il vostro interesse in questa tecnologia, l&#8217;installazione e l&#8217;utilizzo di questo programma sono sicuramente materiale per un prossimo articolo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2010/03/tor-introduzione-onion-routing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un calendario personale con Apache</title>
		<link>http://www.miamammausalinux.org/2009/10/un-calendario-personale-con-apache/</link>
		<comments>http://www.miamammausalinux.org/2009/10/un-calendario-personale-con-apache/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 13:50:19 +0000</pubDate>
		<dc:creator>Marco Bonetti</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Calendario]]></category>
		<category><![CDATA[Calendario personale]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=835</guid>
		<description><![CDATA[Avete mai desiderato un comodo calendario personale sempre online da usare quando e come volete senza bisogno di far sapere ai vari google di turno cosa dovete fare il giovedì pomeriggio? La soluzione è piuttosto semplice e alla portata di chiunque abbia un server apache2 a disposizione. Installazione, configurazione ed utilizzo Ma andiamo con ordine! [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/10/CalendarServer.png" alt="Calendar Server" /><br />
Avete mai desiderato un comodo calendario personale sempre online da usare quando e come volete senza bisogno di far sapere ai vari google di turno cosa dovete fare il giovedì pomeriggio? <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
La soluzione è piuttosto semplice e alla portata di chiunque abbia un server apache2 a disposizione.</p>
<p><strong>Installazione, configurazione ed utilizzo</strong></p>
<p>Ma andiamo con ordine! Se non avete già installato questo web server, fatelo ora, usando il metodo più appropriato per la vostra distribuzione linux preferita. A questo punto dovete editare il file di configurazione di default che può essere apache2.conf oppure httpd.conf e assicurarsi che siano abilitati seguenti moduli:</p>
<ul>
<li>mod_authn_file</li>
<li>mod_authz_user</li>
<li>mod_auth_basic</li>
<li>mod_auth_digest</li>
<li>mod_dav_fs</li>
</ul>
<p>I primi moduli sono necessari per regolare l&#8217;accesso alle risorse di apache, l&#8217;ultimo è quello che gestirà tutto il calendario.<br />
Bene, ora modificate la configurazione del modulo dav_fs inserendo le segenti voci:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">DavLockDB</span> <span style="color: #7f007f;">&quot;/usr/var/DavLock&quot;</span>
&lt;<span style="color: #000000; font-weight:bold;">Directory</span> <span style="color: #7f007f;">&quot;/srv/httpd/htdocs/calendars&quot;</span>&gt;
    <span style="color: #00007f;">Dav</span> <span style="color: #0000ff;">On</span>
&nbsp;
    <span style="color: #00007f;">Order</span> <span style="color: #00007f;">Allow</span>,<span style="color: #00007f;">Deny</span>
    <span style="color: #00007f;">Allow</span> from <span style="color: #0000ff;">all</span>
&nbsp;
    <span style="color: #00007f;">AuthType</span> Digest
    <span style="color: #00007f;">AuthName</span> calendars
&nbsp;
    <span style="color: #00007f;">AuthUserFile</span> <span style="color: #7f007f;">&quot;/usr/user.passwd&quot;</span>
    <span style="color: #00007f;">AuthDigestProvider</span> file
&nbsp;
    &lt;<span style="color: #000000; font-weight:bold;">LimitExcept</span> OPTIONS&gt;
        <span style="color: #00007f;">require</span> <span style="color: #00007f;">user</span> nomeutente
    &lt;/<span style="color: #000000; font-weight:bold;">LimitExcept</span>&gt;
&lt;/<span style="color: #000000; font-weight:bold;">Directory</span>&gt;</pre></div></div>

<p>La creazione del file <em>/usr/user.passwd</em> si effettua attraverso il seguente, semplice comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ htdigest -c &quot;/usr/user.passwd&quot; calendars nomeutente</pre></div></div>

<p>Ovviamente per le direttive siete liberissimi di scegliere i percorsi che più vi aggradano.<br />
Vediamo cosa vogliono dire le varie opzioni:</p>
<ul>
<li><em>DavLockDB</em> serve per specificare quale file apache userà come file di lock per impedire rovinose scritture simultanee sui file gestiti via dav_fs</li>
<li><em>Dav On</em> usato all&#8217;interno di un tag Directory abilita la gestione di quella cartella tramite il modulo dav_fs</li>
<li>Seguono le direttive standard per gestire l&#8217;autenticazione degli utenti tramite file di password</li>
<li>Infine con la direttiva <em>LimitExcept</em> si definisce il livello di accesso alle risorse</li>
</ul>
<p>Questa ultima direttiva è decisamente importante: il modulo dav_fs permette di eseguire degli upload di file sul proprio web server e sicuramente non vogliamo che tale comportamento sia aperto e disponibile a qualsiasi utente di internet!<br />
Così come è scritta, la direttiva richiede un accesso autenticato sia per la modifica dei calendari che per la loro lettura, se volessimo rilassare i permessi, possiamo usare <em>LimitExcept GET OPTIONS</em>: in questo modo è possibile a utenti non autenticati di visionare i file salvati in /calendars ma, francamente, sconsiglio di eseguire questo tipo di rilassamento.<br />
Bene, il server è pronto! Aprite la vostra applicazione di calendaring preferita, potete create un nuovo calendario all&#8217;indirizzo <em>http://server/calendars/calendario.ics</em> e usarlo per la gestione dei vostri appuntamenti.</p>
<p><strong>Possibili miglioramenti</strong></p>
<p>Prima di concludere, lascio qualche considerazione per possibili migliorie:</p>
<ul>
<li>L&#8217;acesso protetto da password serve per controllare chi può accedere alle risorse e chi no, ma senza un adeguato supporto crittografigo risulta quasi inutile: vi consiglio di combinare questa configurazione con il supporto di apache per https o di modificare la regola <em>Allow from</em> per restringere l&#8217;accesso alle risorse solo da connessioni sicure come tunnel ssh o vpn</li>
<li>L&#8217;architettura presentata è pensata per un calendar server casalingo, tuttavia scala bene se vogliamo tenere directory separate tra più utenti: basta replicare il blocco di direttive <em>Directory</em> per ogni utenza che si vuole aggiungere adattandola, ovviamente, al nuovo username. I problemi nascono quando si vogliono condividere i calendari in sola lettura:
<ul>
<li>Una prima soluzione, semplice, consiste nel mettersi d&#8217;accordo sull&#8217;accesso alle risorse: gli stessi client permettono di scegliere se impotare i calendari in sola lettura o meno.</li>
<li>Una seconda soluzione, più complessa, prevede l&#8217;utilizzo di più direttive <em>Limit</em> al posto di una <em>LimitExcept</em>, in questo modo potremmo usare, per esempio, <em>Limit GET OPTIONS</em> su <em>valid_users</em> per permettere la sola lettura agli utenti autenticati e <em>Limit PUT</em> al proprietario del calendario per permettere solo a lui la modifica dei contenuti. Tale strada, però, può essere potenzialmente pericolosa in caso di utilizzo di metodi http sconosciuti, per maggiori informazioni vi rimando alla <a href="http://httpd.apache.org/docs/2.2/mod/core.html#limit">documentazione ufficiale delle due direttive</a></li>
</ul>
</li>
<li>In questo articolo abbiamo usato il modulo dav_fs solo per gestire un file .ics ma in realtà abbiamo configurato un vero e proprio storage personale sul vostro server apache: potete prendere un qualsiasi client dav e caricare file sotto la cartella /calendars</li>
</ul>
<p><strong>Conclusioni</strong></p>
<p>Questo è tutto! Come avete potuto notare la creazione di un server per un calendario remoto personale non è poi tanto difficile, per quanto riguarda invece gli ambienti enterprise questa soluzione potrebbe essere un po troppo stretta ma in questo caso si possono applicare le altre idee proposte oppure sposarsi su programmi dedicati come la suite <a href="http://www.zimbra.com/">Zimbra</a> oppure il <a href="http://trac.calendarserver.org/">Calendar Server</a> di Apple.</p>
<p>Alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/10/un-calendario-personale-con-apache/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Approx: Risparmiare banda con i proxy apt</title>
		<link>http://www.miamammausalinux.org/2009/05/approx-risparmiare-banda-con-i-proxy-apt/</link>
		<comments>http://www.miamammausalinux.org/2009/05/approx-risparmiare-banda-con-i-proxy-apt/#comments</comments>
		<pubDate>Fri, 15 May 2009 15:39:45 +0000</pubDate>
		<dc:creator>Marco Bonetti</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[dpkg]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Approx]]></category>
		<category><![CDATA[Apt Proxy]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=629</guid>
		<description><![CDATA[Debian e le distribuzioni da lei derivate, utilizzano l&#8217;accoppiata apt-get e dpkg per installare e mantenere aggiornati i programmi. Mentre dpkg si preoccupa di lavorare esclusivamente in locale, scompattanto i pacchetti ed assicurandosi che la loro installazione sia portata a buon fine, è apt-get il vero cavallo da lavoro: si preoccupa di mantenere aggiornati gli [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux.png" alt="linux" width="85" height="100" class="alignnone size-full wp-image-292" /></p>
<p>Debian e le distribuzioni da lei derivate, utilizzano l&#8217;accoppiata apt-get e dpkg per installare e mantenere aggiornati i programmi. Mentre dpkg si preoccupa di lavorare esclusivamente in locale, scompattanto i pacchetti ed assicurandosi che la loro installazione sia portata a buon fine, è apt-get il vero cavallo da lavoro: si preoccupa di mantenere aggiornati gli indici per il reperimento dei pacchetti, calcola e risolve le dipendenze al momento dell&#8217;installazione di un nuovo programma e si preoccupa di scaricare il deb dai repository remoti.<br />
Quest&#8217;ultima azione, il download, può incidere notevolmente sulle performance della rete, specialmente se si è scelto di installare diversi pacchetti (si pensi agli effetti di un <em>apt-get install ubuntu-desktop</em> sopra un Ubuntu base system) e se questa operazione viene effettuata da più di un computer della stessa rete.</p>
<p>Una prima soluzione potrebbe essere quella di tenere un repository locale e scaricare i pacchetti necessari da quel repository, sfortunamente questa soluzione richiede un notevole consumo di spazio ed ogni giorno è necessario scaricare gli aggiornamenti al repository anche se alcuni o tutti dei programmi scaricati non sono necessari.<br />
Per ovviare a questi effetti entrano in gioco i proxy apt: risolvono il problema di consumo di banda tenendo nella cache locale i pacchetti richiesti e sono meglio della presenza di un repository personale in quanto non si devono sprecare spazio e banda per avere tutti i pacchetti salvati nella cache in ogni momento.<br />
La soluzione più semplice per installare un proxy apt è quella di eleggere, se già presente, il proxy della rete a fare anche da proxy per i deb scaricati: da un lato si ha un immediato vantaggio di configurazione, con poche righe uno squid è in grado di tenere in cache pure i pacchetti dei programmi, dall&#8217;altro si hanno delle limitazioni sulla flessibilità di configurazione e sui protocolli supportati per il download dai repository.<br />
Per superare anche queste limitazioni è sufficiente utilizzare un programma dedicato al caching dei deb, quello storico è apt-proxy seguito, in ordine cronologico, da approx, apt-cacher e apt-cacher-ng. In questo articolo parleremo dell&#8217;utilizzo di approx perchè è il più vecchio proxy apt funzionante, in quanto il povero apt-proxy mostra i segni dell&#8217;età non risultando affatto scalabile su larga scala.<br />
Il comportamento dei proxy apt è molto semplice: vengono configurati per fornire la cache di alcuni repository, quando un client li contatta e richiede un pacchetto, i proxy controllano la presenza del pacchetto nella loro cache, se questo manca verrà scaricato dal repository e passato al client altrimenti verrà servita la copia locale, risultando così estremamente veloce e risparmiando un download extra inutile. L&#8217;installazione di approx è immediata:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@proxy:~# apt-get install approx</pre></div></div>

<p>una volta finito il processo, si deve editare il file <em>/etc/default/approx</em> solamente nel caso sia necessario fornire al nostro proxy apt&#8230; un proxy per uscire! Per esempio:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Default settings for approx, included by the /etc/init.d/approx shell script</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Uncomment and edit this definition to have approx use a proxy server</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">http_proxy</span>=il-mio-proxy:porta</pre></div></div>

<p>A questo punto si può procedere alla vera configurazione di approx, il file <em>/etc/approx/approx.conf</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Here are some examples of remote repository mappings.</span>
<span style="color: #666666; font-style: italic;"># See http://www.debian.org/mirror/list for mirror sites.</span>
&nbsp;
debian          http:<span style="color: #000000; font-weight: bold;">//</span>mi.mirror.garr.it<span style="color: #000000; font-weight: bold;">/</span>mirrors<span style="color: #000000; font-weight: bold;">/</span>debian
security        http:<span style="color: #000000; font-weight: bold;">//</span>security.debian.org<span style="color: #000000; font-weight: bold;">/</span>debian-security
volatile        http:<span style="color: #000000; font-weight: bold;">//</span>volatile.debian.org<span style="color: #000000; font-weight: bold;">/</span>debian-volatile
&nbsp;
<span style="color: #666666; font-style: italic;"># The following are the default parameter values, so there is</span>
<span style="color: #666666; font-style: italic;"># no need to uncomment them unless you want a different value.</span>
<span style="color: #666666; font-style: italic;"># See approx.conf(5) for details.</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#$interface      any</span>
<span style="color: #007800;">$port</span>          <span style="color: #000000;">80</span>
<span style="color: #666666; font-style: italic;">#$max_wait      10</span>
<span style="color: #666666; font-style: italic;">#$max_rate      unlimited</span>
<span style="color: #666666; font-style: italic;">#$user          approx</span>
<span style="color: #666666; font-style: italic;">#$group         approx</span>
<span style="color: #666666; font-style: italic;">#$syslog         daemon</span>
<span style="color: #666666; font-style: italic;">#$pdiffs        true</span>
<span style="color: #666666; font-style: italic;">#$verbose        false</span>
<span style="color: #666666; font-style: italic;">#$debug         false</span></pre></div></div>

<p>La prima sezione specifica a quale nome faranno riferimento i repository proxati, la sintassi è molto semplice:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">nome_repo      url_repo</pre></div></div>

<p>così facendo, all&#8217;indirizzo <strong>http://proxy/nome_repo</strong> risponderà la cache di <strong>url_repo</strong> o, come accade nella prima riga del nostro file di configurazione, <strong>http://proxy/debian/</strong> è una cache per <strong>http://mi.mirror.garr.it/mirrors/debian</strong>.<br />
A questo punto basta modificare il <em>/etc/apt/sources.list</em> delle macchine della propria rete e del proxy stesso, utilizzando i nuovi url:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>proxy<span style="color: #000000; font-weight: bold;">/</span>debian<span style="color: #000000; font-weight: bold;">/</span>   lenny main contrib non-free
http:<span style="color: #000000; font-weight: bold;">//</span>proxy<span style="color: #000000; font-weight: bold;">/</span>security<span style="color: #000000; font-weight: bold;">/</span>   lenny<span style="color: #000000; font-weight: bold;">/</span>updates main contrib non-free
http:<span style="color: #000000; font-weight: bold;">//</span>proxy<span style="color: #000000; font-weight: bold;">/</span>volatile<span style="color: #000000; font-weight: bold;">/</span>   lenny<span style="color: #000000; font-weight: bold;">/</span>volatile main contrib non-free</pre></div></div>

<p>La seconda sezione, invece, si occupa della gestione delle opzioni di configurazione del comportamento di approx stesso, nel nostro esempio abbiamo configurato come porta di ascolto la 80, al contrario del default storico di apt-proxy: la 9999. Se non avessimo cambiato la configurazione, il proxy avrebbe comunque funzionato ma nei client si doveva configurare esplicitamente la porta di ascolto del server usando, per esempio, una riga come <strong>http://proxy:9999/debian/   lenny main contrib non-free</strong>.<br />
Il proxy è ora in piedi, sta venendo utilizzato dai client e possiamo anche dimenticarci della sua presenza! Se però vogliamo provare a verificare manualmente il suo comportamento, approx ci fornisce due ulteriori programmi che vengono usati esclusivamente da cron per mantenere in forma il proxy ma che il sistemista curioso può provare a lanciare manualmente.<br />
Il primo programma è <strong>update_approx</strong> che viene schedulato come giornaliero al momento dell&#8217;installazione, questo programma si preoccupa di aggiornare la lista e le versioni dei programmi reperibili dai repository remoti.<br />
Il secondo è <strong>gc_approx</strong>, il garbage collector: come dice il nome, questo programma si preoccupa di tenere pulita la cache di approx, eliminando i pacchetti superfli e non più disponibili dai repository remoti. Al momento dell&#8217;installazione questo programma viene schedulato come settimanale.<br />
Credo che valga veramente la pena installare approx o un altro proxy apt: il risparmio di banda è notevole già da quando si utilizzano solo due macchine e la vostra connessione vi ringrazierà <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/05/approx-risparmiare-banda-con-i-proxy-apt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Puppet: Automatizzazione dei task di amministrazione</title>
		<link>http://www.miamammausalinux.org/2009/01/puppet-automatizzazione-dei-task-di-amministrazione/</link>
		<comments>http://www.miamammausalinux.org/2009/01/puppet-automatizzazione-dei-task-di-amministrazione/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 15:47:42 +0000</pubDate>
		<dc:creator>Marco Bonetti</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Automatizzazione task]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=343</guid>
		<description><![CDATA[Puppet è una infrastruttura per l&#8217;automatizzazione della gestione e amministrazione di un parco macchine UNIX-like. Il framework è composto da un puppet master che è il server centrale incaricato di raccogliere tutte le azioni e i file di configurazione utilizzati e da svariati puppet, agenti che vengono installati sulle macchine che si vogliono controllare e [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/puppet.png" alt="puppet" width="151" height="44" class="alignnone size-full wp-image-357" /></p>
<p><a href="http://reductivelabs.com/trac/puppet/">Puppet</a> è una infrastruttura per l&#8217;automatizzazione della gestione e amministrazione di un parco macchine UNIX-like.<br />
Il framework è composto da un <em>puppet master</em> che è il server centrale incaricato di raccogliere tutte le azioni e i file di configurazione utilizzati e da svariati <em>puppet</em>, agenti che vengono installati sulle macchine che si vogliono controllare e periodicamente contattano il master per conoscere nuove configurazioni e controllare se il proprio stato è in linea con quanto richiesto dal server centrale. Per ultime ci sono le <em>recipe</em>, le ricette, file di testo che descrivono le azioni da intraprendere sui puppet e i file di configurazione da utilizzare.</p>
<p>Puppet è disponibile già pacchettizzato per la maggior parte delle distribuzioni Linux, vediamo come è possibile eseguire un setup di prova di un puppet master e di un singolo client su macchine Debian Etch. Prima di proseguire, però, una piccola nota: la versione inclusa in Etch è piuttosto vecchia e non implementa alcune feature interessanti, come la gestione delle ricette via moduli, presenti in versioni più recenti del programma. Se si vuole sperimentare con queste nuove caratteristiche è comunque sempre possibile installare senza problemi i pacchetti dal repository Testing, in quanto gli sviluppatori si assicurano che tali pacchetti siano sempre compatibili con la versione Stable della distribuzione.</p>
<p><strong>1. Il puppet master</strong><br />
Raggiungete la macchina prescelta come puppet master che chiameremo, senza troppa fantasia, master e installate i programmi necessari:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# apt-get install puppetmaster</pre></div></div>

<p>Questa operazione installerà anche le dipendenze, compreso il pacchetto per l&#8217;agent puppet.<br />
L&#8217;installazione terminerà con uno sconfortante errore: niente paura! Il master non è ancora stato configurato a dovere e gli script di init non sono in grado di avviarlo correttamente.<br />
Preoccupiamoci innanzitutto di permettere l&#8217;accesso ai file che verranno serviti dal nostro master, editate il file <em>/etc/puppet/fileserver.conf</em> e aggiungete una riga per permettere l&#8217;accesso alla sottorete 192.168.0.0/24 (per esempio):</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>files<span style="">&#93;</span></span>
  path /etc/puppet/files
  allow 192.168.0.0/<span style="">24</span></pre></div></div>

<p>A questo punto creiamo una configurazione iniziale, editate il file <em>/etc/puppet/manifests/site.pp</em> con il seguente contenuto:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Main puppet master configuration</span>
import <span style="color:#996600;">&quot;classes/*.pp&quot;</span>
&nbsp;
node default <span style="color:#006600; font-weight:bold;">&#123;</span>
  import sudo
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>La prima riga richiede l&#8217;inclusione dei file .pp (le ricette) presenti nella cartella classes, vedremo tra poco come crearli, le successive definiscono la configurazione di default da servire ai nodi e questa richiede l&#8217;implementazione della ricetta &#8220;sudo&#8221;.<br />
Vediamo, dunque, la nostra prima ricetta: &#8220;sudo&#8221;, questa ricetta si preoccupa di controllare che i permessi del file <em>/etc/sudoers</em> siano corretti. Creiamo la cartella per le ricette:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# mkdir /etc/puppet/manifests/classes</pre></div></div>

<p>Dopo di che scriviamo il file <em>/etc/puppet/manifests/classes/sudo.pp</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Testing class for sudoers permissions</span>
class <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
&nbsp;
        <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span> <span style="color: #ff0000;">&quot;/etc/sudoers&quot;</span>:
                owner =<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #ff0000;">&quot;root&quot;</span>,
                group =<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #ff0000;">&quot;root&quot;</span>,
                mode =<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000;">440</span>,
        <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>Il master è stato configurato correttamente, occupiamoci ora del client locale, editate <em>/etc/puppet/puppetd.conf</em> con i seguenti contenuti:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>puppetd<span style="">&#93;</span></span>
# Make sure all log messages are sent to the right directory
# This directory must be writable by the puppet user
<span style="color: #000099;">logdir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/log/puppet</span>
<span style="color: #000099;">vardir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/lib/puppet</span>
<span style="color: #000099;">rundir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/run</span>
<span style="color: #000099;">server</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">master</span></pre></div></div>

<p>Fatto! Master e puppet (locale) sono stati configurati correttamente, proviamo quindi la configurazione in locale, come prima azione simuliamo un guasto cambiando i permessi di sudoers:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# chmod 700 /etc/sudoers</pre></div></div>

<p>Ora, riavviamo i servizi del master e del puppet locale:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# /etc/init.d/puppetmaster restart
root@master:~# /etc/init.d/puppet restart</pre></div></div>

<p>Se ora controlliamo nuovamente sudoers dovremmo trovare i suoi permessi originali a 440 <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>2. I puppet</strong><br />
Un puppet master senza alcun puppet client non ha alcun senso di esistere, vediamo quindi come è possibile configurare un ipotetico client che ripsponda all&#8217;indirizzo puppet1 come client per il master configurato in precedenza. Il pacchetto necessario è puppet, quindi installiamolo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@puppet1:~# apt-get install puppet</pre></div></div>

<p>Ed editiamo il suo file di configurazione, <em>/etc/puppet/puppetd.conf</em>, usando lo stesso identico contenuto già riportato in precedenza:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>puppetd<span style="">&#93;</span></span>
# Make sure all log messages are sent to the right directory
# This directory must be writable by the puppet user
<span style="color: #000099;">logdir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/log/puppet</span>
<span style="color: #000099;">vardir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/lib/puppet</span>
<span style="color: #000099;">rundir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/run</span>
<span style="color: #000099;">server</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">master</span></pre></div></div>

<p>Il client è configurato e pronto a ricevere istruzioni. Prima di poter ricevere istruzioni, però, è necessario che il master conosca il client e lo autorizzi a ricevere le istruzioni registrate. Per fare ciò cominciamo ad avviare il client:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@puppet1:~# /etc/init.d/puppet restart</pre></div></div>

<p>Spostiamoci sul server e controlliamo la coda di richieste:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# puppetca --list</pre></div></div>

<p>Dovrebbe apparire il nome del client, nel nostro esempio è puppet1, firmiamo quindi il suo certificato e abilitiamolo a ricevere le configurazioni:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# puppetca --sign puppet1</pre></div></div>

<p>Fine! Master e puppet sono ora configurati correttamente, facciamo un ultima prova simulando lo stesso guasto provato in precedenza sul nostro client: alterate i permessi di <em>/etc/sudoers</em> nel client, dopo di che riavviate il servizio:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@puppet1:~# /etc/init.d/puppet restart</pre></div></div>

<p>E il file sudoers verrà corretto, di nuovo <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Puppet non si limita a sistemare permessi sui files ma si occupa anche di trasferire contenuti e assicurare l&#8217;installazione di pacchetti o l&#8217;esecuzione di comandi, il <a href="http://reductivelabs.com/trac/puppet/wiki/DocumentationStart">wiki</a> raccoglie documentazione in quantità per creare le proprie ricette ed è un ottimo punto di partenza per ottenere più informazioni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/01/puppet-automatizzazione-dei-task-di-amministrazione/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

