Utilisation de Linux IPTables, comment bloquer les torrents ou tout protocole P2P?


17

Dans notre établissement, nous avions connecté plus de 300 ordinateurs à différents LAN avec Internet. Inclus ici sont Officies LAN et Internet Laboratory pour les étudiants. Et nous voulons contrôler les torrents ou tout protocole P2P. La solution précédente à notre problème est KerioWinRoute 6.5.x, qui satisfait le plus.

Le problème est que nous avons migré vers Ubuntu 8.04 LTS à l'aide de la plateforme Webmin.

Réponses:


14

Le blocage P2P basé sur les ports n'est guère une solution à 100%. Ce que vous voudrez peut-être considérer est le filtrage L7 (filtrage de couche 7). Fondamentalement, Linux a une implémentation qui fait une correspondance basée sur des expressions rationnelles sur tous les paquets pour décider ce qui est bon et ce qui est mauvais.

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

Cela peut vous aider à bloquer toutes sortes de choses, y compris Skype.

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

Remarque: la correspondance Regex pour inspecter et filtrer les paquets nécessite beaucoup de ressources, ce qui rend tout système beaucoup plus vulnérable aux attaques DDOS, la méthode préférée serait de cibler le protocole dans iptables.


11

La seule solution technique appropriée consiste à faire passer tout le trafic par un proxy qui déchiffrera le trafic SSL à la volée, puis appliquera un filtrage de couche 7 sur le trafic passant.

Ces produits sont assez chers car il y a généralement une grande équipe d'ingénieurs derrière eux pour mettre à jour les règles nécessaires pour classer les paquets.

Vous pouvez vous aider un peu avec les modules iptables tels que ipp2p ou l7-filter mentionnés ci-dessus, mais ils n'attraperont pas le trafic crypté.

Dans tous les cas, la technologie est très rarement la solution aux problèmes sociaux et l'utilisation abusive des réseaux d'entreprise / publics / quels que soient les réseaux pour le P2P est un problème social. Essayez de parler à vos utilisateurs, demandez à votre organisation de créer des politiques appropriées et de les appliquer avec des sanctions. D'après mon expérience, cela fonctionne bien mieux qu'une course aux armements à technologie constante avec vos utilisateurs.


Comment les serveurs proxy déchiffrent-ils SSL à la volée?
David Pashley

Veillez à ce que l'utilisation du proxy SSL soit interdite dans certains pays
rayon

David Pashley, ils y ont envoyé un certificat au lieu du site. Pour qu'ils soient maintenant privés, ils transmettent ensuite la demande au vrai site.
rayon

1
Une autre étape impliquée consiste à utiliser la stratégie de groupe pour pousser un certificat racine de confiance pour le proxy SSL afin qu'il puisse forger des certificats de confiance.
Zan Lynx

1
C'est juste une solution vraiment moche ... Parlez à vos utilisateurs ...
Antoine Benkemoun

2

Il est recommandé de bloquer les ports de suivi communs comme: 6881-6889 2710 6969

mais cela n'aidera pas contre les trackers liés sur 80 ports (ie tpb.tracker.thepiratebay.org). Donc tout bloquer, mais 80 443,22 n'aiderait pas.

ipp2p est la meilleure solution que je connaisse. Voir la section Documentation / Utilisation

À propos du filtre l7. Dans bittorrent.pat, le commentaire dit:

Ce modèle a été testé et est censé fonctionner correctement. Cependant, cela ne fonctionnera pas sur les flux bittorrent qui sont cryptés, car il est impossible de faire correspondre (bien) les données cryptées.

Dans les systèmes BSD, pf peut appliquer des actions en fonction du nombre d'états ou de connexions par seconde, vous pouvez donc marquer le trafic de type bittotent, car il génère rapidement des connexions. Lisez le manuel iptables, peut-être pouvez-vous le faire aussi.



1

La solution simple consiste à bloquer tous les ports sortants à l'exception de ceux que vous souhaitez autoriser.

Alternativement, vous pouvez trouver une liste des ports susceptibles d'être utilisés pour les applications P2P courantes et les bloquer. Bittorrent a tendance à n'autoriser qu'une quantité très limitée de téléchargements si vous ne téléchargez pas également, vous devez donc également vous assurer que vous n'acceptez aucune connexion entrante.

Vous trouverez peut-être utile de configurer une sorte de comptabilité IP sur votre routeur en fonction du port TCP utilisé, puis de déterminer le port le plus utilisé. IPTraf est un outil utile pour vérifier cela.

Je dois vous avertir que vous n'arrêterez jamais tout; les gens sont ingénieux et trouveront un moyen de contourner toute restriction que vous mettez en place. La plupart des pare-feu arrêteront cependant l'utilisateur occasionnel, ce qui peut être suffisant.


1

Vous ne pouvez pas bloquer complètement P2P - à moins que vous n'autorisez que les «bons» ports TCP 80, 443, 22 ... Et même cela est généralement suffisant pour les types informatisés qui ont des VPN et des choses similaires.


p2p fonctionne en utilisant les ports http et https sans problème et beaucoup de configuration
Kazimieras Aliulis

doucement. Je l'ai appelé carrément. Au cours des dernières années, de plus en plus d'applications p2p se dirigent vers le port 80 (souvent cryptées) ou parcourent les ports à la recherche de celui qui est ouvert. L'espionnage de la couche application (une forme spécifique d'inspection approfondie des paquets) capturera l'utilisation directe, mais pas nécessairement si le trafic est tunnelisé.
Scott Pack

1
@packs: De plus en plus de clients BitTorrent offrent un cryptage complet et même un camouflage comme les autres protocoles à cause des FAI qui inspectent les paquets.
Zan Lynx

@grawity - Exactement, mais ils devraient être un utilisateur assez avancé, sachant comment VPN + proxy, et ces types de personnes sont probablement assez intelligents pour ne pas Torrent au travail.
djangofan

@packs - oui, les FAI ont certainement une inspection des paquets, mais s'ils ont le cryptage uTorrent activé, vous ne pourrez pas dire quel est le trafic, sauf qu'ils ont un grand nombre de connexions ouvertes. Pour tout ce qu'ils savent, vous pourriez jouer à Diablo 3.
djangofan

1

bittorrent et la plupart des p2p aujourd'hui sont assez évasifs. Au lieu de bloquer le trafic, utilisez les règles de qualité de service pour affamer les clients qui utilisent une grande quantité de bande passante ou ralentit lentement le trafic p2p à zéro sur une période de temps. Cela ne bloquera pas le protocole mais cela dissuadera les p2p'ers que c'est si lent que ça ne vaut pas la peine.

N'oubliez pas que tout le trafic torrent n'est pas mauvais, certains sont bons! :-)


1

Utilisez ces règles de transfert iptables pour supprimer l'ensemencement de torrent bit et la découverte des pairs. Ils ont travaillé pour moi.

#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

Les règles en action, frappez bien le compteur en incrémentant.

# 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

Merci d'avoir partagé. Comment fonctionne le filtrage? Si la chaîne BitTorrentse trouve dans l'URL, elle sera supprimée? C'est juste pour empêcher le téléchargement du fichier torrent initial, mais une fois que le fichier torrent est déjà téléchargé, cela ne bloquera pas le trafic bittorrent, n'est-ce pas?
Houman

0

Les programmes de tunneling SSL populaires comme Ultrasurf peuvent permettre aux utilisateurs de contourner facilement vos pare-feu. Pour bloquer le trafic bittornet crypté, vous auriez besoin d'un appareil UTM spécialisé qui peut inspecter et bloquer les tunnels cryptés passant par http (s). Je n'en connais qu'un seul capable de le faire - Astaro, mais il devrait y en avoir plus.


0

Vous pouvez utiliser ip2p, comme mentionné précédemment. Cela ne va cependant pas bloquer complètement les choses. Idéalement, vous devriez installer un pare-feu sur chaque port que vous n'utilisez pas spécifiquement et utiliser ip2p. Pas une solution parfaite, mais le meilleur que vous puissiez obtenir.


0

Vous ne pouvez pas utiliser le blocage de port direct. Il y a quelques alternatives. Le filtre Layer7 est lent, peu fiable et, à ma connaissance, n'est plus maintenu.

IPP2P est ok mais a été remplacé par OpenDPI, qui a maintenant été interrompu par le sponsor ipoque (qui vend PACE, un équivalent commercial) nDPI semble être la conclusion logique de ce petit chemin: http://www.ntop.org/products/ ndpi /

Le plus simple et assez efficace est une extension de la suggestion de David Pashley. Bloquer tous les ports et n'autoriser que ce dont vous avez besoin - et étendre cela en procurant les services dont vous avez besoin - par exemple avec un proxy Web, et peut-être un serveur de messagerie interne dont le port25 est autorisé, mais les clients ne parlent qu'au serveur interne. De cette façon, vous pouvez avoir des clients qui n'ont pas besoin de ports ouverts sur le pare-feu. Cela devrait fonctionner mais peut commencer à tomber en morceaux si vous devez utiliser des applications complexes et / ou mal écrites qui nécessitent un accès direct.


0

Ci-dessous, mon ensemble de règles iptables. Cela fonctionne comme un charme. J'ai créé un proxy d'interception transparent https et envoie tout le trafic via ce serveur proxy.

En utilisant ces règles iptables, je peux contrôler le réseau.

  • Les ports 2086, 2087, 2095 sont ouverts car nous utilisons WHM cpanel et cpanel web mail.
  • 8080 pour un serveur Web supplémentaire.
  • 192.168.2.0 est le réseau local.

Règle 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.