Wie blockiere ich mit Linux IPTables Torrents oder P2P-Protokolle?

17

In unserer Einrichtung hatten wir über 300 Computer mit dem Internet an verschiedene LANs angeschlossen. Hierzu gehören Officies LAN und das Internet-Labor für Studenten. Und wir wollen Torrents oder irgendwelche P2P-Protokolle kontrollieren. Die bisherige Lösung für unser Problem ist KerioWinRoute 6.5.x, die am meisten zufriedenstellt.

Das Problem ist, dass wir mit Webmin Platform auf Ubuntu 8.04 LTS migriert haben.

Nathaniel Varona
quelle

Antworten:

14

Portbasiertes P2P-Blocking ist kaum eine 100% ige Lösung. Was Sie möglicherweise berücksichtigen möchten, ist die L7-Filterung (Layer 7-Filterung). Grundsätzlich hat Linux eine Implementierung, die Regex-basierte Übereinstimmungen für alle Pakete ausführt, um zu entscheiden, was gut und was schlecht ist.

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

Dies kann Ihnen helfen, alle möglichen Dinge zu blockieren, einschließlich Skype.

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

Bitte beachten Sie: Der Regex-Abgleich zum Überprüfen und Filtern von Paketen ist ressourcenintensiv, wodurch jedes System für DDOS-Angriffe anfälliger wird. Die bevorzugte Methode wäre, das Protokoll innerhalb von iptables anzuvisieren.

Karolis T.
quelle
11

Die einzige geeignete technische Lösung besteht darin, dass der gesamte Datenverkehr einen Proxy durchläuft, der den SSL-Datenverkehr im laufenden Betrieb entschlüsselt, und dann Layer 7-Filterung auf den durchlaufenden Datenverkehr anwendet.

Solche Produkte sind ziemlich teuer, da in der Regel ein großes Team von Ingenieuren dahintersteht, die die Regeln für die Klassifizierung der Pakete aktualisieren.

Sie können sich etwas mit iptables-Modulen helfen, die wie oben erwähnt ipp2p- oder l7-Filter sush, aber keinen verschlüsselten Datenverkehr abfangen.

In jedem Fall ist Technologie sehr selten die Lösung für soziale Probleme, und der Missbrauch von Unternehmens- / öffentlichen Netzwerken für P2P ist ein soziales Problem. Versuchen Sie, mit Ihren Benutzern zu sprechen, und fordern Sie Ihre Organisation auf, geeignete Richtlinien zu erstellen und diese mit Sanktionen durchzusetzen. Dies funktioniert meiner Erfahrung nach viel besser als ein ständiges Wettrüsten mit Ihren Benutzern.

Aleksandar Ivanisevic
quelle
Wie entschlüsseln Proxy-Server SSL im laufenden Betrieb?
David Pashley
Achten Sie darauf, dass die Verwendung von SSL-Proxy in einigen Ländern verboten ist
Radius
David Pashley, sie schickten dort das Zertifikat anstelle des Standortes eins. Damit sie jetzt die privaten, dann leiten sie die Anfrage an die wahre Seite weiter.
Radius
1
Ein weiterer Schritt dabei ist die Verwendung von Gruppenrichtlinien zum Übertragen eines vertrauenswürdigen Stammzertifikats für den SSL-Proxy, damit vertrauenswürdige Zertifikate gefälscht werden können.
Zan Lynx
1
Das ist nur eine wirklich hässliche Lösung ... Sprechen Sie mit Ihren Benutzern ...
Antoine Benkemoun
2

Es wird empfohlen, gängige Tracker-Ports wie die folgenden zu blockieren: 6881-6889 2710 6969

Dies hilft jedoch nicht bei Trackern, die an 80 Ports gebunden sind (z. B. tpb.tracker.thepiratebay.org). Also alles blocken, aber 80.443,22 würde nicht helfen.

ipp2p ist die beste Lösung, die ich kenne. Siehe Abschnitt Dokumentation / Verwendung

Über L7-Filter. Im Kommentar von bittorrent.pat heißt es:

Dieses Muster wurde getestet und es wird angenommen, dass es gut funktioniert. Es funktioniert jedoch nicht mit verschlüsselten Bittorrent-Streams, da es unmöglich ist, (gut) verschlüsselte Daten abzugleichen.

In BSD-Systemen kann pf Aktionen anwenden, die von der Anzahl der Zustände oder Verbindungen pro Sekunde abhängen, sodass Sie bittotentartigen Verkehr kennzeichnen können, da er schnell Verbindungen erzeugt. Lesen Sie das Handbuch zu iptables, vielleicht kann es das auch.

SaveTheRbtz
quelle
1

Es gibt ein Modul namens IPP2P, das P2P-Protokolle erkennen und blockieren kann: http://www.ipp2p.org/

Radius
quelle
1
Diese Website existiert nicht mehr.
Achilles
1

Die einfache Lösung besteht darin, alle ausgehenden Ports außer denjenigen zu blockieren, die Sie zulassen möchten.

Alternativ können Sie eine Liste der Ports finden, die wahrscheinlich für allgemeine P2P-Anwendungen verwendet werden, und diese blockieren. Bittorrent lässt in der Regel nur eine sehr begrenzte Menge an Downloads zu, wenn Sie nicht auch hochladen. Stellen Sie daher sicher, dass Sie keine eingehenden Verbindungen akzeptieren.

Möglicherweise ist es hilfreich, eine Art IP-Kontoführung auf Ihrem Router basierend auf dem verwendeten TCP-Port einzurichten und dann herauszufinden, welcher Port am häufigsten verwendet wird. IPTraf ist ein nützliches Werkzeug, um dies zu überprüfen.

Ich sollte Sie warnen, dass Sie niemals alles aufhalten werden. Leute sind genial und werden einen Weg finden, um jede Einschränkung zu umgehen, die Sie eingeführt haben. Die meisten Firewalls werden den Gelegenheitsbenutzer jedoch stoppen, was möglicherweise ausreicht.

David Pashley
quelle
1

Sie können P2P nicht vollständig blockieren - es sei denn, Sie erlauben nur die "guten" TCP-Ports 80, 443, 22 ... Und selbst das reicht normalerweise für Computer-orientierte Typen mit VPNs und ähnlichen Dingen.

Grawity
quelle
P2P funktioniert mit http und https-Ports ohne Probleme und viel Konfiguration
Kazimieras Aliulis
leise.lt nannte es genau. In den letzten Jahren bewegen sich immer mehr p2p-Apps entweder in Richtung Port 80 (häufig verschlüsselt) oder durchsuchen Ports nach offenen Ports. Application Layer Snooping (eine spezielle Form der Deep Packet Inspection) wird direkt genutzt, aber nicht unbedingt, wenn der Datenverkehr getunnelt wird.
Scott Pack
1
@packs: Immer mehr BitTorrent-Clients bieten vollständige Verschlüsselung und sogar Tarnung wie andere Protokolle, da ISPs die Paketprüfung durchführen.
Zan Lynx
@grawity - Genau, aber sie müssten ein ziemlich fortgeschrittener Benutzer sein und wissen, wie man VPN + -Proxy einsetzt, und diese Art von Leuten sind wahrscheinlich schlau genug, um Torrent bei der Arbeit nicht zu stören.
Djangofan
@packs - Ja, ISPs haben auf jeden Fall eine Paketinspektion, aber wenn sie die uTorrent-Verschlüsselung aktiviert haben, können Sie den Datenverkehr nur feststellen, wenn eine große Anzahl von Verbindungen offen ist.
Nach
1

BitTorrent und die meisten P2P-Tage sind ziemlich ausweichend. Anstatt den Datenverkehr zu blockieren, sollten Sie die QOS-Regeln verwenden, um Clients mit hohem Bandbreitenverbrauch zu hungern, oder den P2P-Datenverkehr im Laufe der Zeit langsam auf Null drosseln. Es wird das Protokoll nicht blockieren, aber es wird p2p'ers davon abhalten, dass es so langsam ist, dass es sich nicht lohnt, es zu tun.

Denken Sie daran, nicht jeder Stromverkehr ist schlecht, ein Teil davon ist gut! :-)

Der Unix-Hausmeister
quelle
1

Verwenden Sie diese iptables-Weiterleitungsregeln, um Bit-Torrent-Seeding und Peer-Discovery zu beenden. Sie haben für mich gearbeitet.

#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

Regeln in Aktion, Zähler inkrementieren schön getroffen.

# 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
Giancarlo D
quelle
Danke für das Teilen. Wie funktioniert die Filterung? Wenn die Zeichenfolge BitTorrentin der URL gefunden wird, wird sie gelöscht. Dies dient nur dazu, das Herunterladen der ursprünglichen Torrent-Datei zu verhindern. Sobald die Torrent-Datei jedoch bereits heruntergeladen wurde, wird der BitTorrent-Verkehr nicht mehr blockiert.
Houman
0

Mit gängigen SSL-Tunnelprogrammen wie Ultrasurf können Benutzer Ihre Firewalls problemlos umgehen. Um verschlüsselten Bittornet-Verkehr zu blockieren, benötigen Sie ein spezielles UTM-Gerät, das verschlüsselte Tunnel über http (s) prüfen und blockieren kann. Ich kenne nur einen, der das kann - Astaro, aber es sollte mehr geben.

Taras Chuhay
quelle
0

Wie bereits erwähnt, können Sie ip2p verwenden. Es wird die Dinge jedoch nicht vollständig blockieren. Idealerweise sollten Sie jeden Port, den Sie nicht speziell verwenden, mit einer Brandmauer versehen und ip2p verwenden. Keine perfekte Lösung, aber das Beste, was Sie wahrscheinlich bekommen werden.

Cian
quelle
0

Sie können keine direkte Portblockierung verwenden. Es gibt ein paar Alternativen. Der Layer7-Filter ist langsam, unzuverlässig und meines Wissens nicht mehr gewartet.

IPP2P ist in Ordnung, wurde jedoch von OpenDPI abgelöst, das nun vom Sponsor ipoque (der PACE, ein kommerzielles Äquivalent, verkauft) eingestellt wurde. http://www.ntop.org/products/ ndpi /

Am einfachsten und effektivsten ist eine Erweiterung von David Pashleys Vorschlag. Blockieren Sie alle Ports und lassen Sie nur das zu, was Sie benötigen - und erweitern Sie dies, indem Sie die von Ihnen benötigten Dienste - z. B. mit einem Webproxy und möglicherweise einem internen Mailserver, der Port25 zulässt, jedoch nur mit dem internen Server kommunizieren. Auf diese Weise können Sie Clients einrichten, die überhaupt keine offenen Ports in der Firewall benötigen. Dies sollte funktionieren, kann aber allmählich zu Bruch gehen, wenn Sie komplexe und / oder schlecht geschriebene Apps verwenden müssen, auf die Sie direkten Zugriff benötigen.

Tom Newton
quelle
0

Nachfolgend sind meine Iptables-Regeln aufgeführt. Das wirkt wie ein Zauber. Ich habe einen transparenten https-Intercept-Proxy erstellt und den gesamten Datenverkehr über diesen Proxy-Server gesendet.

Mit diesen iptables-Regeln kann ich das Netzwerk steuern.

  • 2086, 2087, 2095 Ports sind offen, da wir WHM-Cpanel und Cpanel-Webmail verwenden.
  • 8080 für zusätzlichen Webserver.
  • 192.168.2.0 ist das lokale Netzwerk.

IPTables-Regel:

#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
Dinoosh
quelle