Usando Linux IPTables, Come bloccare i torrent o qualsiasi protocollo P2P?


17

Nella nostra istituzione avevamo collegato oltre 300 computer a diverse LAN con Internet. Sono inclusi qui Uffici LAN e Internet Laboratory per studenti. E vogliamo controllare i torrent o eventuali protocolli P2P. La soluzione precedente al nostro problema è KerioWinRoute 6.5.x, che soddisfa di più.

Il problema è che siamo passati a Ubuntu 8.04 LTS usando la piattaforma Webmin.

Risposte:


14

Il blocco P2P basato sulle porte non è certo una soluzione al 100%. Quello che potresti voler considerare è chiamato filtro L7 (filtro di livello 7). Fondamentalmente, Linux ha un'implementazione che esegue la corrispondenza basata su regex su tutti i pacchetti per decidere cosa è buono e cosa è cattivo.

http://l7-filter.sourceforge.net/

Questo può aiutarti a bloccare tutti i tipi di cose, incluso skype.

http://l7-filter.sourceforge.net/protocols

Nota: la corrispondenza di Regex per ispezionare e filtrare i pacchetti richiede molte risorse, rendendo qualsiasi sistema molto più vulnerabile agli attacchi DDOS, il metodo preferito sarebbe indirizzare il protocollo all'interno di iptables.


11

L'unica soluzione tecnica adeguata consiste nel far passare tutto il traffico attraverso un proxy che decodificherà il traffico SSL al volo e quindi applicherà il filtro di livello 7 sul traffico in transito.

Tali prodotti sono piuttosto costosi in quanto di solito c'è un grande team di ingegneri dietro di loro che aggiorna le regole necessarie per classificare i pacchetti.

Puoi aiutarti in qualche modo con i moduli iptables sush come ipp2p o l7-filter precedentemente menzionati, ma non cattureranno il traffico crittografato.

In ogni caso, la tecnologia è molto raramente la soluzione per problemi sociali e l'uso improprio di reti aziendali / pubbliche / qualunque sia la rete per p2p è un problema sociale. Prova a parlare con i tuoi utenti, fai in modo che la tua organizzazione crei politiche appropriate e applicale con sanzioni. Questo nella mia esperienza funziona molto meglio di una costante corsa agli armamenti tecnologici con i tuoi utenti.


In che modo i server proxy decodificano SSL al volo?
David Pashley,

Fai attenzione che l'uso di Proxy SSL è vietato in alcuni contesti
raggio

David Pashley, hanno inviato lì il certificato anziché quello del sito. In modo che ora siano privati, quindi inoltrano la richiesta al sito vero.
raggio

1
Un altro passo in questo consiste nell'utilizzare Criteri di gruppo per inviare un certificato radice attendibile per il proxy SSL in modo che possa creare certificati attendibili.
Zan Lynx,

1
È solo una brutta soluzione ... Parla con i tuoi utenti ...
Antoine Benkemoun,

2

È buona norma bloccare le porte del tracker comuni come: 6881-6889 2710 6969

ma questo non aiuterà contro i tracker associati a 80 porte (ad es. tpb.tracker.thepiratebay.org). Quindi bloccare tutto, ma 80.443,22 non sarebbe d'aiuto.

ipp2p è la migliore soluzione che conosco. Vedi la documentazione / sezione d'uso

Informazioni sul filtro l7. Nel commento bittorrent.pat dice:

Questo modello è stato testato e si ritiene che funzioni bene. Tuttavia, non funzionerà su stream bittorrent che sono crittografati, poiché è impossibile abbinare (ben) dati crittografati.

Nei sistemi BSD pf può applicare azioni a seconda del numero di stati o connessioni al secondo, in modo da poter taggare il traffico bittotent, perché genera rapidamente connessioni. Leggi il manuale di iptables, potrebbe anche essere in grado di farlo.



1

La soluzione semplice è bloccare tutte le porte in uscita tranne quelle che si desidera consentire.

In alternativa, puoi trovare un elenco delle porte che potrebbero essere utilizzate per le comuni applicazioni P2P e bloccarle. Bittorrent tende a consentire una quantità molto limitata di download solo se non stai caricando, quindi dovresti anche assicurarti di non accettare alcuna connessione in entrata.

Potrebbe essere utile impostare una sorta di account IP sul router in base alla porta TCP utilizzata, quindi scoprire quale porta è la più utilizzata. IPTraf è uno strumento utile per verificarlo.

Dovrei avvertirti che non fermerai mai tutto; le persone sono ingegnose e troveranno un modo per aggirare qualsiasi restrizione tu abbia posto in essere. Tuttavia, la maggior parte dei firewall blocca l'utente occasionale, il che potrebbe essere sufficiente.


1

Non puoi bloccare completamente il P2P - a meno che tu non consenta solo le "buone" porte TCP 80, 443, 22 ... E anche questo è di solito sufficiente per i tipi di computer che hanno VPN e cose simili.


p2p funziona utilizzando le porte http e https senza problemi e molta configurazione
Kazimieras Aliulis,

softly.lt lo chiamava esattamente. Negli ultimi anni, sempre più app p2p si stanno spostando verso la porta 80 (spesso crittografata) o eseguiranno la scansione delle porte alla ricerca di una aperta. Lo snooping a livello di applicazione (una forma specifica di ispezione profonda dei pacchetti) catturerà l'uso diretto, ma non necessariamente se il traffico viene tunnelato.
Scott Pack,

1
@packs: Sempre più client BitTorrent offrono la crittografia completa e persino il camuffamento come altri protocolli a causa degli ISP che eseguono l'ispezione dei pacchetti.
Zan Lynx,

@grawity - Esatto, ma avrebbero bisogno di essere un utente piuttosto avanzato, sapendo come fare VPN + proxy, e quei tipi di persone sono probabilmente abbastanza intelligenti da non fare Torrent al lavoro.
Djangofan,

@packs - sì, gli ISP hanno sicuramente un insetto di pacchetti, ma se hanno abilitato la crittografia uTorrent, non sarai in grado di dire quale sia il traffico se non che hanno un gran numero di connessioni aperte. Per quanto ne sanno, potresti giocare a Diablo 3.
djangofan il

1

bittorrent e la maggior parte dei p2p oggi è abbastanza evasivo. Invece di bloccare il traffico, utilizzare le regole QOS per far morire di fame i client che utilizzano una grande quantità di larghezza di banda o rallentare lentamente il traffico p2p a zero per un periodo di tempo. Non bloccherà il protocollo ma scoraggerà i p2p che è così lento che non vale la pena farlo.

Ricorda che non tutto il traffico torrent è male, in parte buono! :-)


1

Utilizzare queste regole di inoltro di iptables per eliminare il seeding torrent bit e il rilevamento peer. Hanno lavorato per me.

#Block Torrent
iptables -A FORWARD -m string --algo bm --string "BitTorrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "BitTorrent protocol" -j DROP
iptables -A FORWARD -m string --algo bm --string "peer_id=" -j DROP
iptables -A FORWARD -m string --algo bm --string ".torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce.php?passkey=" -j DROP
iptables -A FORWARD -m string --algo bm --string "torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce" -j DROP
iptables -A FORWARD -m string --algo bm --string "info_hash" -j DROP

Regole in azione, hit counter incrementando bene.

# iptables -vL -n

Chain FORWARD (policy ACCEPT 16403 packets, 6709K bytes)
 pkts bytes target     prot opt in     out     source               destination
    8   928 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent protocol" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "peer_id=" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  ".torrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce.php?passkey=" ALGO name bm TO 65535
  582 52262 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "torrent" ALGO name bm TO 65535
   10  1370 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce" ALGO name bm TO 65535
   31  4150 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "info_hash" ALGO name bm TO 65535

Grazie per la condivisione. Come funziona il filtro? Se la stringa BitTorrentviene trovata nell'URL, verrà eliminata? Questo serve solo per impedire il download del file torrent iniziale, ma una volta che il file torrent è già scaricato, questo non bloccherà il traffico bittorrent, giusto?
Houman,

0

I programmi di tunneling SSL popolari come Ultrasurf possono consentire agli utenti di aggirare facilmente i firewall. Per bloccare il traffico bittornet crittografato è necessario un dispositivo UTM specializzato in grado di ispezionare e bloccare tunnel crittografati che vanno su http (s). Conosco solo uno che è in grado di farlo: Astaro, ma dovrebbe essercene di più.


0

Puoi usare ip2p, come menzionato in precedenza. Tuttavia, non bloccherà completamente le cose. Idealmente, dovresti installare il firewall su tutte le porte che non usi specificamente e utilizzando ip2p. Non è una soluzione perfetta, ma il meglio che probabilmente otterrai.


0

Non è possibile utilizzare il blocco diretto delle porte. Ci sono alcune alternative. Il filtro Layer7 è lento, inaffidabile e, per quanto ne so, non viene più mantenuto.

IPP2P è ok ma è stato sostituito da OpenDPI, che ora è stato sospeso dallo sponsor ipoque (che vende PACE, un equivalente commerciale) nDPI sembra essere la conclusione logica di questo piccolo percorso: http://www.ntop.org/products/ NDPI /

Più semplice e abbastanza efficace è un'estensione del suggerimento di David Pashley. Blocca tutte le porte e consenti solo ciò di cui hai bisogno - ed estendi questo tramite il proxy di quei servizi di cui hai bisogno - ad esempio con un proxy web e forse un server di posta interno a cui è consentita la porta25, ma i client parlano solo con il server interno. In questo modo è possibile avere client che non necessitano affatto di porte aperte sul firewall. Questo dovrebbe funzionare ma può iniziare a ridursi se è necessario utilizzare app complesse e / o scritte male che necessitano di accesso diretto.


0

Di seguito sono riportate le mie regole per iptables. Funziona come un fascino. Ho creato un proxy di intercettazione trasparente https e ho inviato tutto il traffico attraverso quel server proxy.

Usando queste regole di iptables, posso controllare la rete.

  • Le porte 2086, 2087, 2095 sono aperte perché utilizziamo la posta web WHM cpanel e cpanel web.
  • 8080 per server Web aggiuntivo.
  • 192.168.2.0 è la rete locale.

Regola IPTables:

#Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*nat
:PREROUTING ACCEPT [470:38063]
:POSTROUTING ACCEPT [9:651]
:OUTPUT ACCEPT [1456:91962]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:3127
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3127
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
# Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*filter
:INPUT ACCEPT [2106:729397]
:FORWARD ACCEPT [94:13475]
:OUTPUT ACCEPT [3252:998944]
-A INPUT -p tcp -m tcp --dport 3127 -j ACCEPT
-A FORWARD -m string --string "BitTorrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "BitTorrent protocol" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "peer_id=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string ".torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce.php?passkey=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "info_hash" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "get_peers" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce_peer" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "find_node" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 8080 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2086 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2087 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2095 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 192.168.2.0/24 -p udp -m udp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.