<?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>Idea Factory &#187; iptables</title>
	<atom:link href="http://ideafactory.it/category/iptables/feed" rel="self" type="application/rss+xml" />
	<link>http://ideafactory.it</link>
	<description>c&#039;e&#039; solo un modo di fare le cose: farle bene</description>
	<lastBuildDate>Thu, 01 Jul 2010 15:06:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Limitare il numero di connessioni in ingresso</title>
		<link>http://ideafactory.it/iptables/limitare-il-numero-di-connessioni-in-ingresso.html</link>
		<comments>http://ideafactory.it/iptables/limitare-il-numero-di-connessioni-in-ingresso.html#comments</comments>
		<pubDate>Wed, 30 Dec 2009 10:06:21 +0000</pubDate>
		<dc:creator>Gianluca</dc:creator>
				<category><![CDATA[iptables]]></category>

		<guid isPermaLink="false">http://www.ideafactory.it/?p=260</guid>
		<description><![CDATA[Il vostro adorato server vuole andare in ferie? Troppe richieste in arrivo? Bene limitiamole con iptables: iptables -N rate-limit iptables -A rate-limit -p tcp -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 3 -j RETURN iptables -A rate-limit -j DROP iptables -I INPUT 1 -p tcp --dport 80 -j rate-limit Cosa fa tutto ciò? [...]]]></description>
			<content:encoded><![CDATA[<p>Il vostro adorato server vuole andare in ferie? Troppe richieste in arrivo? Bene limitiamole con <a href="http://www.ideafactory.it/category/iptables" onclick="pageTracker._trackPageview('/outgoing/www.ideafactory.it/category/iptables?referer=');"><strong>iptables</strong></a>:<br />
<code><br />
iptables -N rate-limit<br />
iptables -A rate-limit -p tcp -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 3 -j RETURN<br />
iptables -A rate-limit -j DROP<br />
iptables -I INPUT 1 -p tcp --dport 80 -j rate-limit<br />
</code><br />
Cosa fa tutto ciò? Vediamolo in dettaglio&#8230;</p>
<p>Con &#8220;<em>iptables -N rate-limit</em>&#8220;, viene creata una nuova catena nella tabella di default che è quella &#8220;<em>filter</em>&#8220;.</p>
<p>Attraverso il connection tracking (modulo <em>conntrack</em>), diciamo a netfilter di limitare il numero di connessioni della catena &#8220;<em>rate-limit</em>&#8221; a 3 al minuto e il parametro &#8220;<em>&#8211;limit-burst</em>&#8221; indica il massimo burst (raffica) prima che il limite  li respinga.</p>
<p>Il 4 comando è autoesplicativo: quello che arriva alla catena &#8220;<em>rate-limit</em>&#8221; va cestinato!</p>
<p>L&#8217;ultima riga fa in modo che tutto ciò che sia diretto alla porta 80 (web) vada a finire nella catena &#8220;<em>rate-limit</em>&#8221; così è possibile controllare il numero di connessioni in entrata e se necessario respingerne alcune.</p>
<p>Ovviamente il mio è solo un esempio che può essere personalizzato in base alle proprie esigenze.</p>
<p>Buon<a href="http://www.ideafactory.it/category/iptables" onclick="pageTracker._trackPageview('/outgoing/www.ideafactory.it/category/iptables?referer=');"> <strong>iptables</strong></a> e felice anno nuovo!:)</p>
]]></content:encoded>
			<wfw:commentRss>http://ideafactory.it/iptables/limitare-il-numero-di-connessioni-in-ingresso.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iptables ed ulogd: logging avanzato su MySQL</title>
		<link>http://ideafactory.it/debian/iptables-ed-ulogd-logging-avanzato-su-mysql.html</link>
		<comments>http://ideafactory.it/debian/iptables-ed-ulogd-logging-avanzato-su-mysql.html#comments</comments>
		<pubDate>Fri, 10 Jul 2009 10:12:15 +0000</pubDate>
		<dc:creator>Gianluca</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.ideafactory.it/?p=250</guid>
		<description><![CDATA[Di solito viene usato il target LOG per impostare la scrittura dei log su file quando facciamo delle regole con iptables. Ma è comodo avere un file (a volte mastodontico) da anzalizzare? Meglio avere i dati in un database MySQL e lavorarci sopra attraverso tool appositi. Ci viene in aiuto ULOG, un tool che lavora [...]]]></description>
			<content:encoded><![CDATA[<p>Di solito viene usato il target LOG per impostare la scrittura dei log su file quando facciamo delle regole con iptables. Ma è comodo avere un file (a volte mastodontico) da anzalizzare? Meglio avere i dati in un database MySQL e lavorarci sopra attraverso tool appositi.</p>
<p>Ci viene in aiuto ULOG, un tool che lavora in userspace e permette   quindi,   tramite un   programma   in   continuo   ascolto,   di   gestire   tali   informazioni nella maniera più disparata.</p>
<p>Procediamo con l&#8217;installazione dei pacchetti necessari:</p>
<p><code>apt-get install ulogd ulogd-mysql</code></p>
<p>Adesso va creato il database con gli opportuni privilegi. Tralascio questa fase perché è banale, specie con phpMyAdmin.<br />
Le struttura della tabella è scritta nel file <em>/usr/share/doc/ulogd-mysql/mysql.table</em>, quindi lo carichiamo nel database appena creato con:</p>
<p><code>mysql -u &lt;utente&gt; -p &lt;nome_db&gt; &lt; /usr/share/doc/ulogd-mysql/mysql.table</code></p>
<p>Procediamo con la configurazione di ULOG editando il file <em>/etc/ulogd.conf</em>.</p>
<p>Nella sezione plugins va decommentato:</p>
<p><code>plugin="/usr/lib/ulogd/ulogd_MYSQL.so"</code></p>
<p>visto che i dati andranno sul un db MySQL.</p>
<p>Impostiamo l&#8217;account per l&#8217;accesso al database:</p>
<p><code>[MYSQL]<br />
table="ulog"<br />
pass="&lt;password&gt;"<br />
user="&lt;user&gt;"<br />
db="&lt;database&gt;"<br />
host="localhost"</code></p>
<p>Bene, riavviamo ULOG:<br />
<code><br />
/etc/init.d/ulogd restart</code></p>
<p>Proviamo il tutto impostando una regola di iptables con il target ULOG:<br />
<code><br />
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -o eth0 -j ULOG</code></p>
<p>In breve: tutto quello che proviene dalla classe lan 192.168.1.0/24 ed esce dall&#8217;interfaccia eth0 (verso Internet) e quindi viene nattato, lo registriamo su MySQL. Ovviamente possiamo impostare qualsiasi regola di firewall con target ULOG per testarne il funzionamento.</p>
<p>MySQL ha qualche record in più? Bene, abbiamo finito.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideafactory.it/debian/iptables-ed-ulogd-logging-avanzato-su-mysql.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iproute: load balance verso 2 gateway</title>
		<link>http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html</link>
		<comments>http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html#comments</comments>
		<pubDate>Thu, 27 Mar 2008 11:59:06 +0000</pubDate>
		<dc:creator>Gianluca</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[Linux Advanced Routing]]></category>
		<category><![CDATA[load balance]]></category>
		<category><![CDATA[shaping]]></category>
		<category><![CDATA[Traffic Control]]></category>

		<guid isPermaLink="false">http://www.ideafactory.it/2008/03/27/iproute-load-balance-verso-2-gateway/</guid>
		<description><![CDATA[Spesso Linux viene usato come router e quelli che definiscono tale soluzione &#8220;casalinga&#8221; si sbagliano di grosso perché grazie alla potenzilità di netfilter e di iproute linux si trasforma un un avanzatissimo router dalle mille funzionalità. In questo articolo descriverò com&#8217;è possibile dividire il traffico proveniente dalla vostra LAN verso due gateway di due provider [...]]]></description>
			<content:encoded><![CDATA[<p>Spesso Linux viene usato come router e quelli che definiscono tale soluzione &#8220;casalinga&#8221; si sbagliano di grosso perché grazie alla potenzilità di <em>netfilter</em> e di<em> iproute</em> linux si trasforma un un avanzatissimo router dalle mille funzionalità.</p>
<p>In questo articolo descriverò com&#8217;è possibile dividire il traffico proveniente dalla vostra LAN verso due gateway di due provider distinti in modo tale da velocizzare il download dei client.</p>
<p>Schemattizzando la rete, dovremmo avere questo:</p>
<p align="center"><img src="http://192.168.1.7/blog/wp-content/uploads/2008/03/lb.png" alt="Load balance" border="1" height="183" width="484" /></p>
<p><span id="more-60"></span>Premesso che:</p>
<ul>
<li>la Linux box è gia configurata a fare il masquerading  della LAN</li>
<li>le interfacce LAN, Provider 1 e Provider 2 sono gia configurate e funzionanti</li>
<li>tutto funziona correttamente verso il gateway di default</li>
</ul>
<p>Sarà necessario installare <em>iproute</em>:</p>
<p><code><br />
apt-get install iproute<br />
</code></p>
<p>Adesso aggiungiamo le due nuove tabelle di routing nel file <em>/etc/iproute2/rt_tables</em>:</p>
<p><code><br />
255     local<br />
254     main<br />
253     default<br />
#Righe aggiunte<br />
252     ngi<br />
251     fastweb<br />
#Fine<br />
0       unspec<br />
</code><br />
Come potete vedere, ho aggiunto due tabelle che si chiamano <em>ngi</em> e <em>fastweb</em> così non ho difficoltà a ricordare i provider che utilizzo.</p>
<p>Una volta salavato il file sarà necessario creare questo script:<br />
<code><br />
#!/bin/bash<br />
### VARIABILI DA SETTARE<br />
#Interfaccia LAN<br />
IF0="eth0";<br />
# Network dell'interfaccia LAN<br />
P0_NET="";<br />
# Interfaccia provider 1<br />
IF1="eth1";<br />
# IP dell'interfaccia associata al provider 1<br />
IP1="";<br />
# Gateway del provider 1<br />
P1="";<br />
# Network del provider 1<br />
P1_NET="";<br />
# Tabella di routing provider 1<br />
T1="fastweb";<br />
# Interfaccia provider 2<br />
IF2="eth2";<br />
# IP dell'interfaccia associata al provider 2<br />
IP2="";<br />
# Gateway del provider 2<br />
P2="";<br />
# Network del provider 2<br />
P2_NET="";<br />
# Tabella di routing provider 2<br />
T2="ngi";<br />
## FINE VARIABILI DA SETTARE<br />
# Attivazione ip_forward e rp_filter...<br />
echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br />
echo 0 &gt; /proc/sys/net/ipv4/conf/eth0/rp_filter<br />
echo 0 &gt; /proc/sys/net/ipv4/conf/eth1/rp_filter<br />
echo 0 &gt; /proc/sys/net/ipv4/conf/eth2/rp_filter<br />
ip route add $P1_NET dev $IF1 src $IP1 table $T1<br />
ip route add default via $P1 table $T1<br />
ip route add $P2_NET dev $IF2 src $IP2 table $T2<br />
ip route add default via $P2 table $T2<br />
ip rule add from $IP1 table $T1<br />
ip rule add from $IP2 table $T2<br />
ip route add $P0_NET dev $IF0 table $T1<br />
ip route add $P2_NET dev $IF2 table $T1<br />
ip route add 127.0.0.0/8 dev lo table $T1<br />
ip route add $P0_NET dev $IF0 table $T2<br />
ip route add $P1_NET dev $IF1 table $T2<br />
ip route add 127.0.0.0/8 dev lo table $T2<br />
# Rimuovo il gateway di default<br />
route del default<br />
# Load balance tra le connessioni<br />
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1<br />
</code></p>
<p>Salvate lo script settando le variabili con le impostazioni attinenti la vostra rete ed assegnate i permessi di esecuzione:</p>
<p><code><br />
chmod +x nome_script<br />
</code></p>
<p>Eseguite lo script e le vostre richieste verso Internet saranno bilanciate verso i due gateway e quindi, specie nei software p2p avrete degli ottimi benefici.</p>
<p>Se si ha la necessità di raggiungere un determinato host attraverso uno specifico provider potete usare il <em>marking</em> dei pacchetti, quindi vanno aggiunte allo script visto sopra queste due righe:<br />
<code><br />
ip rule add fwmark 1 lookup fastweb<br />
ip rule add fwmark 2 lookup ngi<br />
</code></p>
<p>Nel mio caso, ho assegnato il mark 1 alla tabella di routing chiamata <em>fastweb</em> e 2 a quella chiamata <em>ngi</em>.</p>
<p>Configurato il routing è necessario <em>markare</em> i pacchetti tramite <em>iptables</em>:<br />
<code><br />
# Vincoliamo le richieste verso Google ad essere instradate tramite Fastweb:<br />
iptables -t mangle -I INPUT -i eth0 -d www.google.com -j MARK --set-mark 1<br />
# Mentre le richieste verso IdeaFactory transiteranno per NGI:<br />
iptables -t mangle -I INPUT -i eth0 -d www.ideafactory.it -j MARK --set-mark 2<br />
</code></p>
<p>Come potete vedere, le regole di firewall sono inserite nella tabella <em>mangle</em> di <em>INPUT</em> perché è la prima che viene presa in considerazione all&#8217;arrivo di un pacchetto e quindi precedente al routing.</p>
<p>Spero di aver reso la vostra connessione più veloce&#8230;spendendo due abbonamenti ad Internet!</p>
]]></content:encoded>
			<wfw:commentRss>http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Stop p2p: un gateway Debian con layer 7</title>
		<link>http://ideafactory.it/debian/stop-p2p-un-gateway-debian-con-layer-7.html</link>
		<comments>http://ideafactory.it/debian/stop-p2p-un-gateway-debian-con-layer-7.html#comments</comments>
		<pubDate>Tue, 04 Sep 2007 11:46:30 +0000</pubDate>
		<dc:creator>Gianluca</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[p2p]]></category>

		<guid isPermaLink="false">http://www.ideafactory.it/2007/09/04/stop-p2p-un-gateway-debian-con-layer-7/</guid>
		<description><![CDATA[Per bloccare il peer to peer ci sono due strade differenti: bloccare tutto e concedere l&#8217;accesso a pochi servizi scelti (http, smtp, pop3 etc) far passare tutto ciò che non è p2p La soluzione più rapida e meno onerosa in termini di risorse è la prima. Purtroppo però ci sono servizi che si basano su [...]]]></description>
			<content:encoded><![CDATA[<p>Per bloccare il peer to peer ci sono due strade differenti:</p>
<ol>
<li>bloccare tutto e concedere l&#8217;accesso a pochi servizi scelti (http, smtp, pop3 etc)</li>
<li>far passare tutto ciò che non è p2p</li>
</ol>
<p>La soluzione più rapida e meno onerosa in termini di risorse è la prima.</p>
<p>Purtroppo però ci sono servizi che si basano su porte non standard che devono essere accessibili e quindi, sarebbe un impresa non da poco aggiungere le porte suddette alla nostra white list.</p>
<p>Esistono però soluzioni software in grado di riconoscere traffico p2p ed eventualmente bloccarlo.</p>
<p>La più valida da me provota è <a href="http://l7-filter.sourceforge.net/" onclick="pageTracker._trackPageview('/outgoing/l7-filter.sourceforge.net/?referer=');">l7-filter</a>.</p>
<p><span id="more-26"></span>Dalla home page di <a href="http://l7-filter.sourceforge.net/" onclick="pageTracker._trackPageview('/outgoing/l7-filter.sourceforge.net/?referer=');">l7-filter</a> troviamo la documentazione necessaria per l&#8217;avvenura che può essere affrontata in due modi:</p>
<ol>
<li><a href="http://l7-filter.sourceforge.net/HOWTO-userspace" onclick="pageTracker._trackPageview('/outgoing/l7-filter.sourceforge.net/HOWTO-userspace?referer=');">user space</a></li>
<li><a href="http://l7-filter.sourceforge.net/HOWTO-kernel" onclick="pageTracker._trackPageview('/outgoing/l7-filter.sourceforge.net/HOWTO-kernel?referer=');">kernel space</a></li>
</ol>
<p>Per pigrizia avevo provato a percorrere la prima strada ma, con un numero considerevole di connessioni e quindi di pacchetti da processare, si è rivelata un arma a doppio taglio: funziona bene fin quando si satura la coda e poi droppa tutti i pacchetti.</p>
<p>Per un uso casalingo dovrebbe andare bene, quindi vediamo come fare.</p>
<p>Ovviamente la distribuzione utilizzata e Debian in versione Etch.</p>
<p><strong>L 7 &#8211; user space </strong></p>
<p>Per usare il firewall di levello 7 in user space è necessario scaricare due pacchetti:</p>
<ol>
<li>l7-filter-userspace</li>
<li>l7-protocols</li>
</ol>
<p>Io li ho sistemati in <em>/usr/src/</em> e decompressi con:<br />
<code><br />
tar xvzf l7-filter-userspace-v0.4.tar.gz<br />
tar xvzf l7-protocols-2007-07-27.tar.gz<br />
</code><br />
Per compilare correttamente il pacchetto l7-filter-userspace è necessario installare alcune cosette:<br />
<code><br />
apt-get install libnfnetlink-dev libnfnetlink1 libnetfilter-queue-dev libnetfilter-queue1 libnetfilter-conntrack-dev libnetfilter-conntrack1 libnetfilter-conntrack1-dbg<br />
</code><br />
Adesso siamo a posto.<br />
Basta entrare nella directory <em>l7-filter-userspace-v0.4</em> e dare i soliti comandi per la compilazione:</p>
<p><code><br />
./configure<br />
make<br />
make install<br />
</code></p>
<p>Se tutto è andato liscio possiamo copiare il binario (l7-filter) sotto <em>/usr/local/bin</em> per averlo nel path ed occuparci di l7-protocols.<br />
Andiamo nella directory <em>l7-protocols-2007-07-27</em>, che contiene i pattern per riconoscere il traffico nel livello 7.<br />
Adesso basta dare un semplice:<br />
<code><br />
make install<br />
</code><br />
Ed i files verranno copiati dentro <em>/etc/l7-protocols/</em>.<br />
Il funzionamento di l7-filter in user space si base sull&#8217;utilizzo di questo modulo:<br />
<code><br />
ip_conntrack_netlink<br />
</code><br />
Che va caricato prima di utilizzare il programma.<br />
Quel modulo permette di interagire in user space con il kernel e quindi di gestire il traffico processato da netfilter.<br />
Utilizzando un file di configurazione saremo in grado di markare i <a href="http://l7-filter.sourceforge.net/protocols" onclick="pageTracker._trackPageview('/outgoing/l7-filter.sourceforge.net/protocols?referer=');">pacchetti sospetti</a> e successivamente di dropparli.</p>
<p>Il file, che ho posizionato sotto <em>/etc/l7-protocols/</em> e chiamato <em>l7-filter.conf</em> contiene questo:<br />
<code><br />
ares            9<br />
bittorrent      9<br />
gnucleuslan     9<br />
gnutella        9<br />
mute            9<br />
openft          9<br />
thecircle       9<br />
100bao          9<br />
applejuice      9<br />
directconnect   9<br />
edonkey         9<br />
fasttrack       9<br />
goboogy         9<br />
hotline         9<br />
imesh           9<br />
kugoo           9<br />
napster         9<br />
poco            9<br />
soribada        9<br />
soulseek        9<br />
tesla           9<br />
xunlei          9<br />
</code><br />
E&#8217; semplicemente la lista dei protocolli p2p riconosciuti da layer 7 con a fianco il numero (nel mio caso 9) con cui verranno marchiati quando riconosciuti.<br />
Fatto ciò è necessario mettere in ascolto l7-userspace:</p>
<p><code><br />
iptables -t mangle -A FORWARD -j QUEUE<br />
iptables -t filter -A FORWARD -m mark --mark 9 -j DROP<br />
l7-filter -f /etc/l7-protocols/l7-filter.conf &amp;<br />
</code></p>
<p>Come ho gia detto in precedenza è necessario caricare il modulo <em>ip_conntrack_netlink</em> prima di eseguire l7-filter.</p>
<p>I comandi sopra descritti non fanno altro che vincolare il traffico che entra nella catena di <em>FORWARD</em> della tabella <em>mangle</em> in una coda (<em>QUEUE</em>) sulla quale l7-filter marcherà adeguatamente i pacchetti in base al file di configurazione.<br />
<a href="http://l7-filter.sourceforge.net/PacketFlow.png" rel="lightbox[26]" onclick="pageTracker._trackPageview('/outgoing/l7-filter.sourceforge.net/PacketFlow.png?referer=');"> Nel percorso di un pacchetto all&#8217;interno di netfilter</a>, la coppia mangle-FORWARD viene prima di filter-FORWARD e quindi è proprio in quest&#8217;ultima che impartiremo la regola di DROP dei pacchetti con mark 9 cioè quelli riconosciuti da l7 come p2p.</p>
<p>In alternativa a  <em>QUEUE</em>, il traffico può essere dirottato su <em>NFQUEUE</em> e quindi gli step da fare variano (di poco):</p>
<p><code><br />
iptables -t mangle -A FORWARD -j NFQUEUE --queue-num 3<br />
iptables -t filter -A FORWARD -m mark --mark 9 -j DROP<br />
l7-filter -f /etc/l7-protocols/l7-filter.conf -q 3&amp;<br />
</code></p>
<p>E&#8217; cambiato solo che il traffico viene portato nella coda numero 3 (&#8211;queue-num 3) e l7-filter è in ascolto su di essa (-q 3), il risultato è uguale.</p>
<p>Come ho detto all&#8217;inizio, questa soluzione è veloce ma ha qualche limitazione sul numero di connessioni gestibili tantè che nel <em>dmesg</em> mi ritrovavo messaggi come questo:</p>
<p><code><br />
ip_queue: full at 1024 entries, dropping packets(s). Dropped: 111717<br />
</code></p>
<p>e i client non navigavano più.<br />
Cercando con Google ho visto che il numero di entries non è aumentabile tramite il filesystem <em>/proc</em>, ma è una variabile dichiarata all&#8217;interno del sorgente, quindi andrebbe modificata e poi ricompilato il kernel.<br />
Ho deciso quindi di ricompilare il kernel, non per modificare quella variabile ma bensì per applicare la patch di l7.</p>
<p><strong>L7 &#8211; kernel space </strong></p>
<p>Per rimpilare il kernel abbiamo bisogno del sorgente:<br />
<code><br />
apt-get install linux-source-2.6.18<br />
</code></p>
<p>e di altri arnesi:</p>
<p><code><br />
apt-get install bzip2 gzip unzip libncurses5-dev kernel-package<br />
</code></p>
<p>Installato il necessario andiamo sotto <em>/usr/src/</em> per decomprimere i sorgenti:</p>
<p><code><br />
tar xvjf linux-source-2.6.18.tar.bz2<br />
</code><br />
Creiamo un link simbolico:<br />
<code><br />
ln -s linux-source-2.6.18 linux<br />
</code><br />
Visto che il kernel scaricato è della stessa versione di quello utilizzato, consiglio di copiare il file di configurazione in uso nella directory dei sorgenti:<br />
<code><br />
cp /boot/config-2.6.18-5-amd64 linux/.config<br />
</code><br />
Così abbiamo, inizialmente, l&#8217;identica configurazione.<br />
Adesso dal sito di <a href="http://l7-filter.sourceforge.net/HOWTO-kernel" onclick="pageTracker._trackPageview('/outgoing/l7-filter.sourceforge.net/HOWTO-kernel?referer=');">l7</a> è necessario scaricare il pacchetto netfilter-layer7.<br />
Supponendo che l&#8217;abbiamo scaricato e decompresso sotto <em>/usr/src/</em>, entriamo nella directory del kernel <em>/usr/src/linux/</em> ed applichiamo la patch appropriata:</p>
<p><code><br />
patch -p1 &lt; ../netfilter-layer7-v2.13/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch<br />
</code></p>
<p>Se tutto fila liscio, con <em>make menuconfig</em> andiamo ad abiliatare la nuova feature sotto:<br />
<code><br />
Networking ---&gt;<br />
Networking options ---&gt;<br />
[*] Network packet filtering (replaces ipchains) ---&gt;<br />
Core Netfilter Configuration ---&gt; Netfilter Xtables support (required for ip_tables)<br />
</code><br />
Chiamata <em>Layer 7 match support</em>.<br />
Visto che ci siamo possiamo togliere quello che non serve dal kernel per renderlo più appropriato all&#8217;uso che se ne farà, ma ciò è a dir poco facoltativo.<br />
Salvata la configurazione ed usciti dal menù del kernel, ricompiliamo:<br />
<code><br />
make-kpkg --append-to-version=-layer7 --revision=1 -initrd kernel_image<br />
</code><br />
Finito tutto sarà sufficiente spostarci sotto <em>/usr/src/</em> ed installare il .deb appena creato.<br />
Adesso bisogna incrociare le dita e riavviare.</p>
<p>Bene, adesso applichiamo la patch ad iptables.<br />
Io son pigro ed ho preso i sorgenti del pacchetto Debian senza quindi scaricare niente da <a href="http://www.netfilter.org/projects/iptables/" onclick="pageTracker._trackPageview('/outgoing/www.netfilter.org/projects/iptables/?referer=');">netfilter</a>:</p>
<p><code><br />
apt-get source iptables<br />
</code></p>
<p>Adesso abbiamo i sorgenti sotto <em>iptables-1.3.6.0debian1/iptables</em>, quindi creiamo un link simbolico:</p>
<p><code><br />
ln -s iptables-1.3.6.0debian1/iptables iptables-1.3.6<br />
</code></p>
<p>Entriamo nella directory appena creata ed applichiamo la patch:<br />
<code><br />
patch -p1 &lt; ../netfilter-layer7-v2.13/iptables-for-kernel-pre2.6.20-layer7-2.13.patch<br />
chmod +x extensions/.layer7-test<br />
</code></p>
<p>Per compilare <em>iptables</em> è necessaria una libreria:</p>
<p><code><br />
apt-get install libselinux1-dev<br />
</code></p>
<p>Fatto ciò creiamo un link simbolico tra la directory dove attualmente sono contenuti moduli di iptables e <em>/usr/local/lib</em>, che è la directory dove dovrebbero trovarsi i moduli secondo il <em>Makefile</em>:</p>
<p><code><br />
ln -s /lib/iptables/ /usr/local/lib/iptables<br />
</code><br />
Adesso compiliamo <em>iptables</em>:<br />
<code><br />
cd /usr/src/iptables-1.3.6<br />
make KERNEL_DIR=/usr/src/linux<br />
make install KERNEL_DIR=/usr/src/linux<br />
</code></p>
<p>Se tutto è andato a buon fiine dovremmo avere sotto <em>/usr/local/sbin/</em> i binari del nuovo <em>iptables</em> che è identico a quello pacchettizzato Debian ma con il modulo <em>layer 7</em>.</p>
<p>Anche in questo caso è necessario avere il pacchetto <em>l7-protocols-2007-07-27</em> installato.<br />
Come fare l&#8217;abbiamo visto prima.</p>
<p>A questo punto siamo pronti per usare layer7 in kernel-space:<br />
<code><br />
modprobe ipt_layer7<br />
iptables -A FORWARD -m layer7 --l7proto ares -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto gnucleuslan -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto gnutella -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto mute -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto openft -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto thecircle -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto 100bao -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto applejuice -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto directconnect -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto edonkey -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto fasttrack -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto goboogy -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto hotline -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto imesh -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto kugoo -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto napster -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto poco -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto soribada -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto soulseek -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto tesla -j DROP<br />
iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP<br />
</code><br />
Con le istruzioni sopra riportare abbiamo bloccato tutti i protocolli p2p conosciuti (gli stessi inseriti nel file necessario all&#8217;utilizzo di layer 7 in user space).<br />
Il p2p è bloccato e speriamo non tutta la navigazione&#8230;</p>
<p>Fatemi sapere se riscontrate problemi.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideafactory.it/debian/stop-p2p-un-gateway-debian-con-layer-7.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
