c'e' solo un modo di fare le cose: farle bene
Per bloccare il peer to peer ci sono due strade differenti:
La soluzione più rapida e meno onerosa in termini di risorse è la prima.
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.
Esistono però soluzioni software in grado di riconoscere traffico p2p ed eventualmente bloccarlo.
La più valida da me provota è l7-filter.
Dalla home page di l7-filter troviamo la documentazione necessaria per l’avvenura che può essere affrontata in due modi:
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.
Per un uso casalingo dovrebbe andare bene, quindi vediamo come fare.
Ovviamente la distribuzione utilizzata e Debian in versione Etch.
L 7 – user space
Per usare il firewall di levello 7 in user space è necessario scaricare due pacchetti:
Io li ho sistemati in /usr/src/ e decompressi con:
tar xvzf l7-filter-userspace-v0.4.tar.gz
tar xvzf l7-protocols-2007-07-27.tar.gz
Per compilare correttamente il pacchetto l7-filter-userspace è necessario installare alcune cosette:
apt-get install libnfnetlink-dev libnfnetlink1 libnetfilter-queue-dev libnetfilter-queue1 libnetfilter-conntrack-dev libnetfilter-conntrack1 libnetfilter-conntrack1-dbg
Adesso siamo a posto.
Basta entrare nella directory l7-filter-userspace-v0.4 e dare i soliti comandi per la compilazione:
./configure
make
make install
Se tutto è andato liscio possiamo copiare il binario (l7-filter) sotto /usr/local/bin per averlo nel path ed occuparci di l7-protocols.
Andiamo nella directory l7-protocols-2007-07-27, che contiene i pattern per riconoscere il traffico nel livello 7.
Adesso basta dare un semplice:
make install
Ed i files verranno copiati dentro /etc/l7-protocols/.
Il funzionamento di l7-filter in user space si base sull’utilizzo di questo modulo:
ip_conntrack_netlink
Che va caricato prima di utilizzare il programma.
Quel modulo permette di interagire in user space con il kernel e quindi di gestire il traffico processato da netfilter.
Utilizzando un file di configurazione saremo in grado di markare i pacchetti sospetti e successivamente di dropparli.
Il file, che ho posizionato sotto /etc/l7-protocols/ e chiamato l7-filter.conf contiene questo:
ares 9
bittorrent 9
gnucleuslan 9
gnutella 9
mute 9
openft 9
thecircle 9
100bao 9
applejuice 9
directconnect 9
edonkey 9
fasttrack 9
goboogy 9
hotline 9
imesh 9
kugoo 9
napster 9
poco 9
soribada 9
soulseek 9
tesla 9
xunlei 9
E’ 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.
Fatto ciò è necessario mettere in ascolto l7-userspace:
iptables -t mangle -A FORWARD -j QUEUE
iptables -t filter -A FORWARD -m mark --mark 9 -j DROP
l7-filter -f /etc/l7-protocols/l7-filter.conf &
Come ho gia detto in precedenza è necessario caricare il modulo ip_conntrack_netlink prima di eseguire l7-filter.
I comandi sopra descritti non fanno altro che vincolare il traffico che entra nella catena di FORWARD della tabella mangle in una coda (QUEUE) sulla quale l7-filter marcherà adeguatamente i pacchetti in base al file di configurazione.
Nel percorso di un pacchetto all’interno di netfilter, la coppia mangle-FORWARD viene prima di filter-FORWARD e quindi è proprio in quest’ultima che impartiremo la regola di DROP dei pacchetti con mark 9 cioè quelli riconosciuti da l7 come p2p.
In alternativa a QUEUE, il traffico può essere dirottato su NFQUEUE e quindi gli step da fare variano (di poco):
iptables -t mangle -A FORWARD -j NFQUEUE --queue-num 3
iptables -t filter -A FORWARD -m mark --mark 9 -j DROP
l7-filter -f /etc/l7-protocols/l7-filter.conf -q 3&
E’ cambiato solo che il traffico viene portato nella coda numero 3 (–queue-num 3) e l7-filter è in ascolto su di essa (-q 3), il risultato è uguale.
Come ho detto all’inizio, questa soluzione è veloce ma ha qualche limitazione sul numero di connessioni gestibili tantè che nel dmesg mi ritrovavo messaggi come questo:
ip_queue: full at 1024 entries, dropping packets(s). Dropped: 111717
e i client non navigavano più.
Cercando con Google ho visto che il numero di entries non è aumentabile tramite il filesystem /proc, ma è una variabile dichiarata all’interno del sorgente, quindi andrebbe modificata e poi ricompilato il kernel.
Ho deciso quindi di ricompilare il kernel, non per modificare quella variabile ma bensì per applicare la patch di l7.
L7 – kernel space
Per rimpilare il kernel abbiamo bisogno del sorgente:
apt-get install linux-source-2.6.18
e di altri arnesi:
apt-get install bzip2 gzip unzip libncurses5-dev kernel-package
Installato il necessario andiamo sotto /usr/src/ per decomprimere i sorgenti:
tar xvjf linux-source-2.6.18.tar.bz2
Creiamo un link simbolico:
ln -s linux-source-2.6.18 linux
Visto che il kernel scaricato è della stessa versione di quello utilizzato, consiglio di copiare il file di configurazione in uso nella directory dei sorgenti:
cp /boot/config-2.6.18-5-amd64 linux/.config
Così abbiamo, inizialmente, l’identica configurazione.
Adesso dal sito di l7 è necessario scaricare il pacchetto netfilter-layer7.
Supponendo che l’abbiamo scaricato e decompresso sotto /usr/src/, entriamo nella directory del kernel /usr/src/linux/ ed applichiamo la patch appropriata:
patch -p1 < ../netfilter-layer7-v2.13/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch
Se tutto fila liscio, con make menuconfig andiamo ad abiliatare la nuova feature sotto:
Networking --->
Networking options --->
[*] Network packet filtering (replaces ipchains) --->
Core Netfilter Configuration ---> Netfilter Xtables support (required for ip_tables)
Chiamata Layer 7 match support.
Visto che ci siamo possiamo togliere quello che non serve dal kernel per renderlo più appropriato all’uso che se ne farà, ma ciò è a dir poco facoltativo.
Salvata la configurazione ed usciti dal menù del kernel, ricompiliamo:
make-kpkg --append-to-version=-layer7 --revision=1 -initrd kernel_image
Finito tutto sarà sufficiente spostarci sotto /usr/src/ ed installare il .deb appena creato.
Adesso bisogna incrociare le dita e riavviare.
Bene, adesso applichiamo la patch ad iptables.
Io son pigro ed ho preso i sorgenti del pacchetto Debian senza quindi scaricare niente da netfilter:
apt-get source iptables
Adesso abbiamo i sorgenti sotto iptables-1.3.6.0debian1/iptables, quindi creiamo un link simbolico:
ln -s iptables-1.3.6.0debian1/iptables iptables-1.3.6
Entriamo nella directory appena creata ed applichiamo la patch:
patch -p1 < ../netfilter-layer7-v2.13/iptables-for-kernel-pre2.6.20-layer7-2.13.patch
chmod +x extensions/.layer7-test
Per compilare iptables è necessaria una libreria:
apt-get install libselinux1-dev
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:
ln -s /lib/iptables/ /usr/local/lib/iptables
Adesso compiliamo iptables:
cd /usr/src/iptables-1.3.6
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
Se tutto è andato a buon fiine dovremmo avere sotto /usr/local/sbin/ i binari del nuovo iptables che è identico a quello pacchettizzato Debian ma con il modulo layer 7.
Anche in questo caso è necessario avere il pacchetto l7-protocols-2007-07-27 installato.
Come fare l’abbiamo visto prima.
A questo punto siamo pronti per usare layer7 in kernel-space:
modprobe ipt_layer7
iptables -A FORWARD -m layer7 --l7proto ares -j DROP
iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP
iptables -A FORWARD -m layer7 --l7proto gnucleuslan -j DROP
iptables -A FORWARD -m layer7 --l7proto gnutella -j DROP
iptables -A FORWARD -m layer7 --l7proto mute -j DROP
iptables -A FORWARD -m layer7 --l7proto openft -j DROP
iptables -A FORWARD -m layer7 --l7proto thecircle -j DROP
iptables -A FORWARD -m layer7 --l7proto 100bao -j DROP
iptables -A FORWARD -m layer7 --l7proto applejuice -j DROP
iptables -A FORWARD -m layer7 --l7proto directconnect -j DROP
iptables -A FORWARD -m layer7 --l7proto edonkey -j DROP
iptables -A FORWARD -m layer7 --l7proto fasttrack -j DROP
iptables -A FORWARD -m layer7 --l7proto goboogy -j DROP
iptables -A FORWARD -m layer7 --l7proto hotline -j DROP
iptables -A FORWARD -m layer7 --l7proto imesh -j DROP
iptables -A FORWARD -m layer7 --l7proto kugoo -j DROP
iptables -A FORWARD -m layer7 --l7proto napster -j DROP
iptables -A FORWARD -m layer7 --l7proto poco -j DROP
iptables -A FORWARD -m layer7 --l7proto soribada -j DROP
iptables -A FORWARD -m layer7 --l7proto soulseek -j DROP
iptables -A FORWARD -m layer7 --l7proto tesla -j DROP
iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP
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…
Fatemi sapere se riscontrate problemi.
Gianluca dai che domani è sabato!
Gianluca si lo ammetto sono razzista, odio le ex.L'unica razza per cui nemmeno l'Onu muoverebbe un dito in caso di estinzione. Esseri spregevoli e abietti senza eguali.
Gianluca le belle donne sono invisibili,vedi solo la bella facciata,ti blocca la barriera della bellezza. Ammagliati dall'aspetto esteriore non arriviamo mai al mondo interiore e se mai accade uno dei due rimane deluso.
Powered by Lifestream.
| L | M | M | G | V | S | D |
|---|---|---|---|---|---|---|
| « lug | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||
7 Responses for "Stop p2p: un gateway Debian con layer 7"
Penso che un firewall dedicato sia sempre e comunque meglio, ciò non togliendo il fatto che possano lavorare insieme.
Questo per i seguenti motivi:
1) Completamente fanless (eviti inutili surriscaldamenti)
2) occupa meno spazio (altrimenti le virtualizzazioni non avrebbero tanto risalto!)
3) Consuma meno (e quando sei in clustering ti sfido con il contatore dell’enel da 3kW a tenere tutto!
4) Hai meno probabiltà di rotture (Fault-Tolerance)
Poi, sicuramente avere dispositivi unix-embedded di tipo computing porta numerosi benfici; forse il migliore la versatilità d’uso, ma a primo acchitto di direi “firewall hardware”…
Poi sempre in relazione degli scenari e del grado di sicurezza si vuole ottenere, nonchè forse il più importante degli aspetti da considerare: IL COSTO
Antonio forse hai ragione, ti dico forse perché quello che dici è vero ma siccome questo è un sito che parla prevalentemente di Linux, vengono trattati argomenti che mirano a fare una moltitudine di cose con quel sistema operativo.
Per la tua logica è sbagliato anche usare Asterisk su Linux a vantaggio di soluzioni PBX inscatolate…giusto?
L7-Filter si può usare con Shorewall?
Ciao!
Non ho mai usato Shorewall ma comunque sò che è una comoda interfaccia per gestire le regole di firewall di netfilter . Se Shorewall è così intelligente da vedere il modulo di layer7 penso proprio che dalla sua interfaccia puoi usare regole ad hoc di layer7 capaci di bloccare il p2p.
Purtroppo non sò aiutarti ulteriormente.
si si può usare con shorewall, in pratica ti fai uno script che appena partito il firewall,inserisce le regole di iptables come sono state scritte nella guida sopra.
Poi funziona tutto tranquillamente.
Certo non hai tutto nelle regole di Shorewall, ma funziona.
[...] Cosa mi consigliate? > > Grazie mille! > Ciao. > > Ho appena scritto questa guida: http://www.ideafactory.it/2007/09/04…n-con-layer-7/ Spero possa essere utile a chi come me deve bloccare (o almeno ci prova) il p2p. Gianluca — [...]
ciao Gianluca, ho problemi a re-introdurre layer7 con kernet 2.6.26 e iptables 1.4.3.x..
ovvero dopo il passaggio tra etch e lenny.. non avevo purgato il pacchetto iptables
Leave a reply