Używając Linux IPTables, jak zablokować torrenty lub dowolne protokoły P2P?

17

W naszej instytucji podłączyliśmy ponad 300 komputerów do różnych sieci LAN z Internetem. Zawarte są tutaj Officies LAN i Internetowe laboratorium dla studentów. I chcemy kontrolować Torrenty lub dowolne protokoły P2P. Wcześniejszym rozwiązaniem naszego problemu jest KerioWinRoute 6.5.x, który najbardziej odpowiada.

Problem polega na tym, że przeprowadziliśmy migrację do Ubuntu 8.04 LTS przy użyciu platformy Webmin.

Nathaniel Varona
źródło

Odpowiedzi:

14

Blokowanie P2P oparte na portach nie jest rozwiązaniem w 100%. To, co warto rozważyć, nazywa się filtrowaniem L7 (filtrowanie w warstwie 7). Zasadniczo, linux ma implementację, która dopasowuje wyrażenia regularne na wszystkich pakietach, aby decydować, co jest dobre, a co złe.

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

Może to pomóc w blokowaniu wszelkiego rodzaju rzeczy, w tym skype.

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

Uwaga: Dopasowywanie wyrażeń regularnych w celu sprawdzania i filtrowania pakietów wymaga dużych zasobów, przez co każdy system jest bardziej podatny na ataki DDOS, preferowaną metodą byłoby ukierunkowanie protokołu na iptables.

Karolis T.
źródło
11

Jedynym właściwym rozwiązaniem technicznym jest przepuszczenie całego ruchu przez serwer proxy, który odszyfruje ruch SSL w locie, a następnie zastosuje filtrowanie warstwy 7 w ruchu przechodzącym.

Takie produkty są dość drogie, ponieważ zwykle stoi za nimi duży zespół inżynierów aktualizujących reguły potrzebne do klasyfikacji pakietów.

Możesz pomóc sobie nieco z modułami iptables sush, jak wspomniano wcześniej ipp2p lub l7-filter, ale nie wychwytują zaszyfrowanego ruchu.

W każdym razie technologia bardzo rzadko jest rozwiązaniem problemów społecznych, a niewłaściwe wykorzystanie korporacyjnych / publicznych / dowolnych sieci dla p2p jest problemem społecznym. Spróbuj porozmawiać z użytkownikami, poproś organizację o stworzenie odpowiednich zasad i egzekwowanie ich za pomocą sankcji. Z mojego doświadczenia wynika, że ​​działa to znacznie lepiej niż ciągły wyścig zbrojeń technologicznych z użytkownikami.

Aleksandar Ivanisevic
źródło
Eee, jak serwery proxy odszyfrowują SSL w locie?
David Pashley,
Uważaj, że używanie SSL Proxy jest zabronione w niektórych przypadkach
promieniu
David Pashley, wysłali tam certyfikat zamiast pierwszego. Aby teraz byli prywatni, następnie przesyłają żądanie do prawdziwej witryny.
promień
1
Kolejnym krokiem jest użycie zasad grupy do wypchnięcia zaufanego certyfikatu głównego dla proxy SSL, aby mógł sfałszować zaufane certyfikaty.
Zan Lynx,
1
To naprawdę brzydkie rozwiązanie ... Porozmawiaj z użytkownikami ...
Antoine Benkemoun
2

Dobrą praktyką jest blokowanie popularnych portów śledzenia, takich jak: 6881-6889 2710 6969

ale to nie pomoże w śledzeniu powiązanym z 80 portem (tj. tpb.tracker.thepiratebay.org). Blokowanie wszystkich, ale 80,443,22 nie pomogłoby.

ipp2p to najlepsze rozwiązanie, jakie znam. Patrz sekcja Dokumentacja / użytkowanie

O filtrze L7. W komentarzu bittorrent.pat napisano:

Ten wzór został przetestowany i uważa się, że działa dobrze. Nie będzie to jednak działać na strumieniach bittorrent, które są szyfrowane, ponieważ niemożliwe jest dopasowanie (dobrze) zaszyfrowanych danych.

W systemach BSD pf może wykonywać działania w zależności od liczby stanów lub połączeń na sekundę, dzięki czemu można oznaczać ruch podobny do bittotent, ponieważ szybko generuje połączenia. Przeczytaj instrukcję iptables, być może może to zrobić.

SaveTheRbtz
źródło
1

Istnieje moduł o nazwie IPP2P, który może wykrywać i blokować protokoły P2P: http://www.ipp2p.org/

promień
źródło
1
Ta strona już nie istnieje.
Achilles
1

Najprostszym rozwiązaniem jest zablokowanie wszystkich portów wychodzących oprócz tych, na które chcesz zezwolić.

Alternatywnie możesz znaleźć listę portów, które mogą być używane do popularnych aplikacji P2P i zablokować je. Bittorrent pozwala na pobieranie bardzo ograniczonej ilości, jeśli nie przesyłasz także, więc powinieneś również upewnić się, że nie akceptujesz żadnych połączeń przychodzących.

Przydatne może być skonfigurowanie w routerze jakiegoś rodzaju rozliczania adresów IP na podstawie używanego portu TCP, a następnie sprawdzenie, który port jest najczęściej używany. IPTraf to przydatne narzędzie do sprawdzania tego.

Powinienem cię ostrzec, że nigdy nie zatrzymasz wszystkiego; ludzie są pomysłowi i znajdą sposób na obejście wszelkich wprowadzonych ograniczeń. Większość zapór ogniowych zatrzyma zwykłego użytkownika, co może wystarczyć.

David Pashley
źródło
1

Nie możesz całkowicie zablokować P2P - chyba że zezwolisz tylko na „dobre” porty TCP 80, 443, 22 ... I nawet to zwykle wystarcza typom komputerowym, które mają VPN i podobne rzeczy.

użytkownik1686
źródło
p2p działa bez problemów i przy dużej ilości portów HTTP i https
Kazimieras Aliulis,
softly.lt nazwał to wprost. W ciągu ostatnich kilku lat coraz więcej aplikacji p2p przesuwa się w kierunku portu 80 (często szyfrowanego) lub skanuje porty w poszukiwaniu takiego, który jest otwarty. Szpiegowanie warstwy aplikacji (szczególna forma głębokiej kontroli pakietów) przechwytuje bezpośrednie użycie, ale niekoniecznie, jeśli ruch jest tunelowany.
Scott Pack,
1
@packs: Coraz więcej klientów BitTorrent oferuje pełne szyfrowanie, a nawet kamuflaż, podobnie jak inne protokoły, ze względu na to, że dostawcy usług internetowych sprawdzają pakiety.
Zan Lynx,
@grawity - Dokładnie, ale musieliby być dość zaawansowanym użytkownikiem, znającym się na VPN + proxy, a tego rodzaju ludzie są prawdopodobnie wystarczająco inteligentni, aby nie torrentować w pracy.
djangofan
@packs - tak, dostawcy usług internetowych z pewnością mają kontrolę pakietów, ale jeśli mają włączone szyfrowanie uTorrent, nie będziesz w stanie stwierdzić, jaki jest ruch, z wyjątkiem tego, że mają dużą liczbę otwartych połączeń. Z tego, co wiedzą, możesz grać w Diablo 3.
djangofan,
1

bittorrent i większość dni p2p jest teraz dość wymijająca. Zamiast blokować ruch, używaj reguł QOS, aby głodzić klientów korzystających z dużej przepustowości lub powoli zmniejszaj ruch p2p do zera w miarę upływu czasu. Nie zablokuje protokołu, ale odstraszy p2p'erów, że jest tak wolny, że nie warto tego robić.

Pamiętaj, że nie cały ruch torrentowy jest zły, niektóre dobre! :-)

The Unix Janitor
źródło
1

Skorzystaj z tych reguł przekazywania iptables, aby porzucić rozsiewanie bitów i wykrywanie rówieśników. Pracowali dla mnie.

#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

Reguły w akcji, ładnie zwiększają licznik trafień.

# 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.
źródło
Dzięki za udostępnienie. Jak działa filtrowanie? Jeśli ciąg BitTorrentzostanie znaleziony w adresie URL, zostanie usunięty? Ma to na celu zapobieganie pobieraniu początkowego pliku torrent, ale gdy plik torrent zostanie już pobrany, nie zablokuje to ruchu bittorrent, prawda?
Houman
0

Popularne programy tunelujące SSL, takie jak Ultrasurf, pozwalają użytkownikom łatwo ominąć zapory ogniowe. Aby zablokować zaszyfrowany ruch bittornet, potrzebujesz specjalistycznego urządzenia UTM, które może sprawdzać i blokować zaszyfrowane tunele przechodzące przez http (s). Wiem tylko o jednym, który jest w stanie to zrobić - Astaro, ale powinno być więcej.

Taras Chuhay
źródło
0

Możesz używać ip2p, jak wspomniano wcześniej. Nie będzie to jednak całkowicie blokować. Najlepiej byłoby, gdybyś używał ściany przeciwpożarowej do każdego portu, którego nie używasz, i korzystał z ip2p. Nie jest to idealne rozwiązanie, ale najlepsze, jakie możesz uzyskać.

Cian
źródło
0

Nie można używać blokowania portów prostych. Jest kilka alternatyw. Filtr warstwy 7 jest powolny, zawodny i, o ile wiem, nie jest już utrzymywany.

IPP2P jest w porządku, ale został zastąpiony przez OpenDPI, który został przerwany przez sponsora ipoque (który sprzedaje PACE, odpowiednik komercyjny) nDPI wydaje się być logicznym wnioskiem z tej małej ścieżki: http://www.ntop.org/products/ ndpi /

Najłatwiejszym i dość skutecznym jest rozszerzenie sugestii Davida Pashleya. Zablokuj wszystkie porty i zezwól tylko na to, czego potrzebujesz - i rozszerz to, przybliżając te usługi, których potrzebujesz - np. Za pomocą serwera proxy sieci Web i być może wewnętrznego serwera poczty, który jest dozwolony przez port 25, ale klienci rozmawiają tylko z serwerem wewnętrznym. W ten sposób możesz mieć klientów, którzy w ogóle nie potrzebują otwartych portów zapory. To powinno zadziałać, ale może zacząć się rozpadać, jeśli potrzebujesz użyć złożonych i / lub źle napisanych aplikacji, które wymagają bezpośredniego dostępu.

Tom Newton
źródło
0

Poniżej znajduje się zestaw moich zasad iptables. To działa jak urok. Utworzyłem przezroczysty serwer proxy przechwytujący https i wysyłam cały ruch przez ten serwer proxy.

Korzystając z tych reguł iptables, mogę kontrolować sieć.

  • Porty 2086, 2087, 2095 są otwarte, ponieważ używamy cpanel WHM i poczty internetowej cpanel.
  • 8080 na dodatkowy serwer WWW.
  • 192.168.2.0 to sieć lokalna.

Reguła 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
Dinoosh
źródło