Old:Layer7 filter Kernel-space: droppare protocolli p2p con iptables: differenze tra le versioni

m
 
(10 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Old}}
{|style="border-radius: 0.5em;  width:250px; float:right; clear:both; margin-bottom:10px;  text-align:center; font-variant:small-caps; background:#f8fbfd;  border:1px solid #4e88d0; padding-bottom:5px"
|[[Image:Debian-swirl.png|33px|link=]]'''Versioni compatibili'''
|-
|Ubuntu Server 10.04 LTS
|}
== Testata su ==
== Testata su ==
* Ubuntu Server 10.04 LTS
* Ubuntu Server 10.04 LTS
Riga 10: Riga 15:
Avremo innanzi tutto bisogno di alcuni pacchetti di base per compilare e pacchettizzare un kernel:  
Avremo innanzi tutto bisogno di alcuni pacchetti di base per compilare e pacchettizzare un kernel:  
<pre>
<pre>
# apt-get install modutils kernel-package libncurses5-dev fakeroot
# apt-get install module-init-tools kernel-package libncurses5-dev fakeroot
Nota
Per la versione 2.6 del kernel il pacchetto modutils è stato sostituito da module-init-tools.
</pre>
</pre>
A questo punto è necessario installare il pacchetto Debian contenente i sorgenti del kernel. Per prima cosa, cerchiamo questo pacchetto:  
A questo punto è necessario installare il pacchetto Debian contenente i sorgenti del kernel. Per prima cosa, cerchiamo questo pacchetto:  
Riga 18: Riga 21:
$ apt-cache search linux-source | grep ^linux-source
$ apt-cache search linux-source | grep ^linux-source
linux-source-2.6.8 - Linux kernel source for version 2.6.8 with Debian patches
linux-source-2.6.8 - Linux kernel source for version 2.6.8 with Debian patches
Nota
Ogni versione di Debian (unstable, testing, stable) utilizza in genere una certa versione del kernel e specifiche
versioni di altri pacchetti ad esso correlati in modo tale che l'insieme sia il più possibile stabile. È quindi
altamente consigliato usare la versione dei sorgenti del kernel che troveremo nei repository della nostra versione
di Debian, a meno che non si sappia esattamente quello che si sta facendo.
</pre>
</pre>
Adesso installiamo il pacchetto dei sorgenti del kernel che intendiamo installare. Notare che i sorgenti del kernel forniti con Debian sono leggermente differenti da quelli del kernel vanilla rilasciato dal team di Linus Torvalds (maggiori informazioni qui). Nel seguito prenderemo come esempio la versione 2.6.8 del kernel, sostituitela con qualsiasi altra versione vogliate usare.  
{{Box|Nota|Ogni versione di Debian (unstable, testing, stable) utilizza in genere una certa versione del kernel e specifiche versioni di altri pacchetti ad esso correlati in modo tale che l'insieme sia il più possibile stabile. È quindi altamente consigliato usare la versione dei sorgenti del kernel che troveremo nei repository della nostra versione di Debian, a meno che non si sappia esattamente quello che si sta facendo.}}
 
Adesso installiamo il pacchetto dei sorgenti del kernel che intendiamo installare. Notare che i sorgenti del kernel forniti con Debian sono leggermente differenti da quelli del [[kernel vanilla]] rilasciato dal team di Linus Torvalds. Nel seguito prenderemo come esempio la versione 2.6.8 del kernel, sostituitela con qualsiasi altra versione vogliate usare.  
<pre>
<pre>
# apt-get install linux-source-2.6.8
# apt-get install linux-source-2.6.8
Nota
Prima della versione 2.6.12 del kernel Linux, i pacchetti sorgenti e binari Debian si chiamavano rispettivamente
kernel-source-x.x.x e kernel-image-x.x.x (invece dell'attuale denominazione linux-source-x.x.x e linux-image.x.x.x).
Questo perché è previsto l'inserimento di nuovi kernel (come GNU HURD e FreeBSD) all'interno di Debian.
</pre>
</pre>
Entriamo ora nella directory dei sorgenti del kernel:  
Entriamo ora nella directory dei sorgenti del kernel:  
<pre>
<pre>
$ cd /usr/src  
$ cd /usr/src  
</pre>
</pre>
Troveremo in questa directory (avendoli installati precedentemente) i sorgenti del kernel in un archivio tar.bz2:  
Troveremo in questa directory (avendoli installati precedentemente) i sorgenti del kernel in un archivio <code>.tar.bz2</code>:  
<pre>
<pre>
$ ls
$ ls
Riga 47: Riga 44:
$ tar xvjf linux-source-2.6.8.tar.bz2
$ tar xvjf linux-source-2.6.8.tar.bz2
</pre>
</pre>
A fine decompressione avremo una directory linux-source-2.6.8, creiamo un link simbolico Linux che punta ai sorgenti del kernel:  
A fine decompressione avremo una directory <code>linux-source-2.6.8</code>, creiamo un link simbolico Linux che punta ai sorgenti del kernel:  
<pre>
<pre>
$ ln -s /usr/src/linux-source-2.6.8 linux
$ ln -s /usr/src/linux-source-2.6.8 linux
</pre>
</pre>
Non è necessario creare questo link, ma è una usuale convenzione farlo anche perché risulta comodo per entrare  
Non è necessario creare questo link, ma è una usuale convenzione farlo anche perché risulta comodo per entrare nella directory dei sorgenti del kernel.  
nella directory dei sorgenti del kernel.  
Ora spostiamoci nella directory e puliamo i sorgenti del kernel:  
Ora spostiamoci nella directory e puliamo i sorgenti del kernel:  
<pre>
<pre>
Riga 59: Riga 55:
</pre>
</pre>
Questo passaggio è inutile se è la prima volta che compilate il kernel, ma dalla seconda volta in poi diviene necessario per eliminare i file generati dalle precedenti compilazioni che potrebbero creare conflitti.  
Questo passaggio è inutile se è la prima volta che compilate il kernel, ma dalla seconda volta in poi diviene necessario per eliminare i file generati dalle precedenti compilazioni che potrebbero creare conflitti.  
Ora, se avete installato un kernel precompilato che abbia la stessa versione del kernel che volete ricompilare potreste usare il suo file di configurazione come base di partenza per configurare il vostro kernel. A tal scopo basta copiare il file di configurazione che si trova in /boot (i file di configurazione dei kernel installati hanno come nome config seguito dalla versione del kernel) nella directory dei sorgenti:  
Ora, se avete installato un kernel precompilato che abbia la stessa versione del kernel che volete ricompilare potreste usare il suo file di configurazione come base di partenza per configurare il vostro kernel. A tal scopo basta copiare il file di configurazione che si trova in <code>/boot</code> (i file di configurazione dei kernel installati hanno come nome <code>config</code> seguito dalla versione del kernel) nella directory dei sorgenti:  
<pre>
<pre>
$ cp /boot/config-2.6.8 .config  
$ cp /boot/config-2.6.8 .config  
Riga 66: Riga 62:
=== Configurazione Kernel: make menuconfig ===  
=== Configurazione Kernel: make menuconfig ===  
Adesso dal sito di l7[http://l7-filter.sourceforge.net/HOWTO-kernel] è necessario scaricare il pacchetto netfilter-layer7 qui [http://sourceforge.net/projects/l7-filter/files/].
Adesso dal sito di l7[http://l7-filter.sourceforge.net/HOWTO-kernel] è necessario scaricare il pacchetto netfilter-layer7 qui [http://sourceforge.net/projects/l7-filter/files/].
Supponendo che l’abbiamo scaricato e decompresso sotto /usr/src/.  
Supponendo che l’abbiamo scaricato e decompresso sotto <code>/usr/src/</code>.  
Entriamo nella directory del kernel /usr/src/linux/ :
Entriamo nella directory del kernel <code>/usr/src/linux/</code> :
<pre>
<pre>
$ cd /usr/src/linux/
$ cd /usr/src/linux/
</pre>
</pre>
Applichiamo la patch appropriata:
Applichiamo la [[patch]] appropriata:
<pre>
<pre>
$ patch -p1 < ../netfilter-layer7-v2.22/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
$ patch -p1 < ../netfilter-layer7-v2.22/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
Riga 82: Riga 78:
</pre>
</pre>
Vi apparirà un'interfaccia testuale dalla quale sarà possibile configurare le opzioni del kernel. Questo è il passaggio più delicato, nonché il più lungo e difficile.  
Vi apparirà un'interfaccia testuale dalla quale sarà possibile configurare le opzioni del kernel. Questo è il passaggio più delicato, nonché il più lungo e difficile.  
Andiamo ad abilitare il modulo netfilter come sotto:
Andiamo ad abilitare il modulo <code>netfilter</code> come sotto:
<pre>
<pre>
Networking --->
Networking --->
Riga 91: Riga 87:
                                                     [*] Layer 7 debugging output     
                                                     [*] Layer 7 debugging output     
</pre>
</pre>
Abilitare il modulo Layer 7 match support come da esempio precedente [M] e [*]
Abilitare il modulo '''Layer 7 match support''' come da esempio precedente [M] e [*]
 
Una volta finita la configurazione, uscite e salvate i cambiamenti. A questo punto il file <code>/usr/src/linux/.config</code> conterrà la nostra configurazione del kernel.


{{Box|Nota|Se avete già ricompilato il vostro kernel e volete passare ad una versione più aggiornata, ma non troppo diversa (ad esempio: 2.6.8 --> 2.6.10), non conviene rifare tutta la configurazione da capo. D'altro canto non è neanche possibile usare il vecchio file di configurazione dato che nel nuovo kernel ci saranno voci in più e o in meno e sarebbe improponibile cercarle ad una ad una.<br/>
Basta allora copiare il vecchio file di configurazione nella directory dei sorgenti del nuovo kernel e lanciare il comando:
<pre>$ make oldconfig</pre>
in questo modo verranno fatte delle domande su come configurare le sole nuove voci presenti nel kernel. <br/>
Se i due kernel sono troppo diversi questo metodo non conviene più dato che bisogna rispondere ad uno ad uno a tutte le domande sulle voci diverse. Sicuramente non conviene usarlo per il passaggio 2.4 --> 2.6.<br/>
Un file <code>config</code> del vostro attuale kernel può essere trovato in <code>/boot</code> sotto il nome di <code>config-2.x.x</code>.}}


Una volta finita la configurazione, uscite e salvate i cambiamenti. A questo punto il file /usr/src/linux/.config conterrà la nostra configurazione del kernel.
<pre>
Nota
Se avete già ricompilato il vostro kernel e volete passare ad una versione più aggiornata, ma non troppo diversa
(ad esempio: 2.6.8 --> 2.6.10), non conviene rifare tutta la configurazione da capo. D'altro canto non è neanche
possibile usare il vecchio file di configurazione dato che nel nuovo kernel ci saranno voci in più e o in meno e
sarebbe improponibile cercarle ad una ad una.
Basta allora copiare il vecchio file di configurazione nella directory dei sorgenti del nuovo kernel e
lanciare il comando:
$ make oldconfig
in questo modo verranno fatte delle domande su come configurare le sole nuove voci presenti nel kernel.
Se i due kernel sono troppo diversi questo metodo non conviene più dato che bisogna rispondere ad uno
ad uno a tutte le domande sulle voci diverse. Sicuramente non conviene usarlo per il passaggio 2.4 --> 2.6.
Un file config del vostro attuale kernel può essere trovato in /boot sotto il nome di config-2.x.x.
</pre>
Salvata la configurazione ed usciti dal menù del kernel, ricompiliamo:
Salvata la configurazione ed usciti dal menù del kernel, ricompiliamo:
<pre>
<pre>
make-kpkg --append-to-version=-layer7 --revision=1 --initrd kernel_image
$ make-kpkg --append-to-version=-layer7 --revision=1 --initrd kernel_image
</pre>
</pre>
Nel caso di sistemi multiprocessore è possibile velocizzare la compilazione aggiungendo CONCURRENCY_LEVEL=n dove n corrisponde al numero di processi che il compilatore usa in parallelo (normalmente si usa un processo in più rispetto al numero di processori presenti). Per esempio se vogliamo compilare kernel su un PC dotato di un processore quadcore su può usare:  
Nel caso di sistemi multiprocessore è possibile velocizzare la compilazione aggiungendo '''CONCURRENCY_LEVEL=n''' dove n corrisponde al numero di processi che il compilatore usa in parallelo (normalmente si usa un processo in più rispetto al numero di processori presenti). Per esempio se vogliamo compilare kernel su un PC dotato di un processore quadcore si può usare:  
<pre>
<pre>
$ CONCURRENCY_LEVEL=5 make-kpkg --append-to-version=-layer7 --revision=1 --initrd kernel_image
$ CONCURRENCY_LEVEL=5 make-kpkg --append-to-version=-layer7 --revision=1 --initrd kernel_image
</pre>
</pre>
Finito tutto sarà sufficiente spostarci sotto /usr/src/ ed installare il .deb appena creato.
Finito tutto sarà sufficiente spostarci sotto <code>/usr/src/</code> ed installare il .deb appena creato.


== Configurazione di Grub ==
== Configurazione di Grub ==
Se il kernel richiede l’immagine ramdisk e questa non è stata né creata né configurato il menu.lst per utilizzarla, allora il kernel all’avvio andrà in panico (“Kernel panic – not syncing …..).
Se il kernel richiede l’immagine ramdisk e questa non è stata né creata né configurato il file <code>menu.lst</code> per utilizzarla, allora il kernel all’avvio andrà in panico (“Kernel panic – not syncing …..).<br/>
Per risolvere tale problema procedere come segue:
Per risolvere tale problema procedere come segue:
<pre>
<pre>
# ls /lib/modules (si vedrà il nome preciso del kernel da creare l’initrd.img)
# ls /lib/modules
# cd /boot  (ci spostiamo nel boot così alla creazione non dovremo spostare nulla)
</pre>
con cui si vedrà il nome preciso del kernel per creare l’initrd.img. Quindi ci spostiamo nella directory <code>/boot</code> così alla creazione non dovremo spostare nulla:
<pre>
# cd /boot 
</pre>
</pre>
Creare l'initrd.img:
Creare l'initrd.img:
<pre>
<pre>
# update-initramfs -c -k “kernel name” (così creiamo initrd.img del kernel ricompilato:
# update-initramfs -c -k “kernel name”
attenzione a inserire come kernel name quello corretto, ossia il kernel ricompilato e installato per ultimo.)
</pre>
</pre>
Attenzione a inserire come kernel name quello corretto, ossia il kernel ricompilato e installato per ultimo.
Aggiornare Grub (versione vecchia):
Aggiornare Grub (versione vecchia):
<pre>
<pre>
# vim /boot/grub/menu.lst
# vim /boot/grub/menu.lst
 
</pre>
E inseriremo la stringa initrd con la rispettiva path di dove abbiamo salvato l’initrd:
E inseriremo la stringa initrd con la rispettiva path di dove abbiamo salvato l’initrd:
 
<pre>
# title          Ubuntu 10.04 LTS, kernel 2.6.32.15+drm33.5-layer7
# title          Ubuntu 10.04 LTS, kernel 2.6.32.15+drm33.5-layer7
   root            (hd0,1)
   root            (hd0,1)
Riga 152: Riga 144:
== Compilazione Iptables ==
== Compilazione Iptables ==


Bene, adesso applichiamo la patch ad iptables.
Bene, adesso applichiamo la patch ad iptables.<br/>
Io son pigro ed ho preso i sorgenti del pacchetto Debian senza quindi scaricare niente da netfilter:
Io son pigro ed ho preso i sorgenti del pacchetto Debian senza quindi scaricare niente da netfilter:
<pre>
<pre>
Riga 158: Riga 150:
$ apt-get source iptables
$ apt-get source iptables
</pre>
</pre>
Adesso abbiamo i sorgenti sotto iptables-{version}/, quindi creiamo un link simbolico:
Adesso abbiamo i sorgenti sotto <code>iptables-{version}/</code>, quindi creiamo un link simbolico:
<pre>
<pre>
$ ln -s iptables-{version}/ iptables
$ ln -s iptables-{version}/ iptables
n.b. {version} è da sostituire con la versione del vostro iptables che trovate nella cartella dove avete eseguito source
</pre>
Copiamo I seguenti files:
dove ''{version}'' è da sostituire con la versione del vostro iptables che trovate nella cartella dove avete eseguito scaricato i sorgenti.
 
Copiamo i seguenti file (i comandi sono da scrivere in una sola riga):
$ cp /usr/src/netfilter-layer7-v2.22/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/
<pre>
libxt_layer7.man /usr/src/iptables/extensions  
$ cp /usr/src/netfilter-layer7-v2.22/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward
$ cp /usr/src/netfilter-layer7-v2.22/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/
/libxt_layer7.man /usr/src/iptables/extensions  
libxt_layer7.c /usr/src/iptables/extensions  
$ cp /usr/src/netfilter-layer7-v2.22/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward
(sono da scrivere in una sola riga)
/libxt_layer7.c /usr/src/iptables/extensions  
</pre>
</pre>
Per compilare iptables è necessaria una libreria:
Per compilare iptables è necessaria una libreria:
Riga 174: Riga 166:
$ apt-get install libselinux1-dev
$ apt-get install libselinux1-dev
</pre>
</pre>
Fatto ciò creiamo un link simbolico tra la directory dove attualmente sono contenuti moduli di iptables e /usr/local/lib, che è la directory dove dovrebbero trovarsi i moduli secondo il Makefile:
Fatto ciò creiamo un link simbolico tra la directory dove attualmente sono contenuti moduli di iptables e <code>/usr/local/lib</code>, che è la directory dove dovrebbero trovarsi i moduli secondo il <code>Makefile</code>:
<pre>
<pre>
$ ln -s /lib/xtables/ /usr/lib/xtables
$ ln -s /lib/xtables/ /usr/local/lib/xtables
 
</pre>
Adesso compiliamo iptables:
Adesso compiliamo iptables:
 
<pre>
$ cd /usr/src/iptables
$ cd /usr/src/iptables
$ ./configure --with-ksource=/usr/src/linux
$ ./configure --with-ksource=/usr/src/linux
Riga 185: Riga 177:
$ make install
$ make install
</pre>
</pre>
Se tutto è andato a buon fine dovremmo avere sotto /sbin/ i binari del nuovo iptables che è identico a quello pacchettizzato Debian ma con il modulo layer 7.
Se tutto è andato a buon fine dovremmo avere sotto <code>/sbin/</code> i binari del nuovo iptables che è identico a quello pacchettizzato Debian ma con il modulo layer 7.
 
== Configurazione Iptables con layer 7 ==
== Configurazione Iptables con layer 7 ==
Anche in questo caso è necessario avere il pacchetto l7-protocols installato.
Anche in questo caso è necessario avere il pacchetto l7-protocols installato.
Riga 191: Riga 184:
$ apt-get install l7-protocols
$ apt-get install l7-protocols
</pre>
</pre>
 
Ora dobbiamo caricare i moduli all'avvio;per far ciò è necessario scrivere il file <code>/etc/modules</code> inserendo queste due stringhe:
<pre>
<pre>
Per far ciò è necessario scrivere il file /etc/modules  inserendo queste due stringhe:
ip_conntrack_netlink
ip_conntrack_netlink
ipt_layer7
ipt_layer7
</pre>
oppure:
<pre>
nf_conntrack_netlink
xt_layer7
</pre>
</pre>
A questo punto siamo pronti per usare iptables in layer7 filter kernel-space:
A questo punto siamo pronti per usare iptables in layer7 filter kernel-space:
Riga 235: Riga 232:
<pre>
<pre>
$ reboot now
$ reboot now
</pre>
Testate il modulo layer7:
<pre>
# iptables -m layer7 --help
</pre>
</pre>
Con le istruzioni sopra riportare abbiamo bloccato tutti i protocolli p2p conosciuti (gli stessi inseriti nel file necessario all’utilizzo di layer 7 in user space).
Con le istruzioni sopra riportare abbiamo bloccato tutti i protocolli p2p conosciuti (gli stessi inseriti nel file necessario all’utilizzo di layer 7 in user space).
Il p2p è bloccato e speriamo non tutta la navigazione…
Il p2p è bloccato e speriamo non tutta la navigazione…
<br/>
<br/>
----
: [[Utente:Gigipin|Gigipin]]
: [[Contatto: luigi.pintaldi@gmail.com]]
[[Categoria:Firewall]]
3 581

contributi