Використання Linux IPTables, як блокувати торрент або будь-які протоколи P2P?


17

У нашому закладі ми підключили 300+ комп’ютерів до різних локальних мереж з Інтернетом. Сюди входять офіційна мережа LAN та Інтернет-лабораторія для студентів. І ми хочемо керувати торентами або будь-якими протоколами P2P. Попереднє рішення нашої проблеми - KerioWinRoute 6.5.x, який найбільше задовольняє.

Проблема полягає в тому, що ми перенеслись на Ubuntu 8.04 LTS за допомогою платформи Webmin.

Відповіді:


14

Блокування P2P на порту навряд чи є 100% рішенням. Те, що ви можете розглянути, називається фільтруванням L7 (фільтрування рівня 7). В основному, linux має реалізацію, яка робить відповідність на основі регулярних виразів для всіх пакетів, щоб вирішити, що добре, а що погано.

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

Це допоможе вам заблокувати всілякі речі, включаючи скайп.

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

Зверніть увагу: відповідність Regex для огляду та фільтрування пакетів є ресурсомісткою, роблячи будь-яку систему вразливішою до DDOS-атак, кращим методом було б орієнтація на протокол в iptables.


11

Єдине правильне технічне рішення полягає в тому, щоб весь трафік проходив через проксі-сервер, який буде розшифровувати трафік SSL на ходу, а потім застосовувати фільтруючий шар 7 на прохідний трафік.

Такі продукти досить дорогі, оскільки за ними зазвичай є велика команда інженерів, яка оновлює правила, необхідні для класифікації пакетів.

Ви можете дещо допомогти собі за допомогою модулів iptables sush, як і раніше ipp2p або l7-filter, але вони не зафіксують зашифрований трафік.

У будь-якому випадку, технології дуже рідко є вирішенням соціальних проблем, а неправильне використання корпоративних / громадських / будь-яких мереж для p2p є соціальною проблемою. Спробуйте поговорити зі своїми користувачами, змусіть вашу організацію створити відповідну політику та застосовувати їх до санкцій. На мій досвід, це працює набагато краще, ніж постійні гонки озброєнь з технологіями з вашими користувачами.


Е, як проксі-сервери розшифровують SSL на ходу?
Девід Пашлі

Слідкуйте за тим, щоб використання SSL-проксі заборонено в деяких країнах
радіус

Девід Пашлі, вони надіслали туди сертифікат замість сайту. Так що тепер вони приватні, вони пересилають запит на справжній сайт.
радіус

1
Ще один крок, що стосується цього, - це використання групової політики для виштовхування довіреного кореневого сертифіката для проксі-сервера SSL, щоб він міг підробляти довірені серти.
Зан Лінкс

1
Це просто потворне рішення ... Поговоріть зі своїми користувачами ...
Антуан Бенкемун

2

Добре практично блокувати загальні порти трекера, такі як: 6881-6889 2710 6969

але це не допоможе проти трекерів, прив’язаних до 80 портів (тобто tpb.tracker.thepiratebay.org). Так що блокування всіх, але 80,443,22 не допомогло б.

ipp2p - найкраще рішення, яке я знаю. Див. Розділ Документація / використання

Про l7-фільтр. У коментарі bittorrent.pat сказано:

Ця модель була перевірена і, як вважають, вона працює добре. Однак він не буде працювати в зашифрованих потоках бітторент, оскільки неможливо зіставити (добре) зашифровані дані.

У системах BSD pf може застосовувати дії залежно від кількості станів або з'єднань в секунду, тому ви можете помітити трафік, схожий на бітотент, тому що він швидко генерує з'єднання. Прочитайте посібник з iptables, можливо, це теж можна зробити.



1

Просте рішення - заблокувати всі вихідні порти, крім тих, які ви хочете дозволити.

Крім того, ви можете знайти список портів, які можуть використовуватись для звичайних програм P2P, і заблокувати їх. Bittorrent прагне дозволяти завантажувати лише обмежену кількість, якщо ви також не завантажуєте, тому ви також повинні переконатися, що ви не приймаєте жодних вхідних з'єднань.

Можливо, вам буде корисно налаштувати якийсь облік IP-адреси на маршрутизаторі на основі використовуваного порту TCP, а потім з’ясувати, який порт найбільш широко використовується. IPTraf - корисний інструмент для перевірки цього.

Я повинен попередити вас, що ви ніколи не зупините все; люди геніальні і знайдуть шлях до будь-якого обмеження, яке ви встановите. Більшість брандмауерів зупинить випадкового користувача, що може бути достатньо.


1

Ви не можете блокувати P2P повністю - якщо тільки ви не дозволити «хороші» TCP порти 80, 443, 22 ... І навіть те , що зазвичай достатньо для комп'ютерних налаштованих типів , які мають віртуальні приватні мережі та інші подібні речі.


p2p працює без http та https-портів без проблем та багато конфігурації
Kazimieras Aliulis

softly.lt називав це прямо. За останні кілька років все більше додатків p2p або рухаються до порту 80 (часто зашифрованого), або сканують порти, шукаючи відкритий. Прослуховування шару додатків (специфічна форма глибокої перевірки пакетів) буде безпосередньо використовувати, але не обов'язково, якщо трафік тунелюється.
Скотт Пак

1
@packs: Все більше клієнтів BitTorrent пропонують повне шифрування і навіть маскування, як і інші протоколи, через те, що Інтернет-провайдери проводять перевірку пакетів.
Зан Лінкс

@grawity - Саме так, але їм потрібно бути досить просунутим користувачем, знаючи, як VPN + проксі, і такі типи людей, ймовірно, досить розумні, щоб не працювати Torrent на роботі.
djangofan

@packs - так, у провайдерів, безумовно, є інспекція пакетів, але якщо вони включені шифрування uTorrent, ви не зможете сказати, що таке трафік, за винятком того, що у них відкрита велика кількість з'єднань.
Наскільки

1

bittorrent і більшість p2p днів зараз досить уникливі. Замість того, щоб блокувати трафік, використовуйте правила QOS для голодування клієнтів, які використовують велику кількість пропускної здатності, або повільно пригнічують трафік p2p до нуля протягом певного часу. Він не блокує протокол, але відлякує p2p'ers, що це так повільно, що робити це не варто.

Пам'ятайте, що не весь торрент-трафік поганий, деякі з них хороші! :-)


1

Скористайтеся цими правилами переадресації iptables, щоб скинути висівання бітових торрентів та виявлення однолітків. Вони працювали на мене.

#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

Правила в дії, вдало збільшуючи лічильник.

# 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

Дякую, що поділились. Як працює фільтрація? Якщо рядок BitTorrentзнайдений в URL-адресі, він буде відхилений? Це лише для того, щоб запобігти завантаженню початкового файлу торрента, але як тільки файл торрента вже завантажений, це не заблокує трафік бітторента, правильно?
Houman

0

Популярні програми тунелювання SSL, такі як Ultrasurf, дозволяють користувачам легко обходити ваші брандмауэры. Для блокування зашифрованого трафіку Bittornet вам знадобиться спеціалізований пристрій UTM, який може перевіряти та блокувати зашифровані тунелі, що переходять через http (s). Я знаю лише про одного, який здатний це зробити - Астаро, але повинно бути більше.


0

Ви можете використовувати ip2p, як згадувалося раніше. Однак це повністю не блокує речі. В ідеалі, ви повинні обстрілювати стіни кожного порту, який ви спеціально не використовуєте, та використовуючи ip2p. Не ідеальне рішення, але найкраще, що ви, швидше за все, отримаєте.


0

Не можна використовувати пряме блокування портів. Є кілька альтернатив. Фільтр рівня 7 повільний, ненадійний і, наскільки мені відомо, більше не підтримується.

IPP2P нормальний, але його витіснив OpenDPI, який зараз припинено спонсором ipoque (які продають PACE, комерційний еквівалент) nDPI є логічним завершенням цього маленького шляху: http://www.ntop.org/products/ ndpi /

Найпростішим і досить ефективним є продовження пропозиції Девіда Пашлі. Блокуйте всі порти і дозвольте лише те, що вам потрібно - і розширіть це, наблизивши потрібні вам сервіси - наприклад, за допомогою веб-проксі, а можливо, і внутрішнього поштового сервера, який дозволений port25, але клієнти спілкуються лише з внутрішнім сервером. Таким чином ви можете мати клієнтів, яким взагалі не потрібні відкриті порти на брандмауері. Це має спрацювати, але може почати знижуватися, якщо вам потрібно використовувати будь-які складні та / або погано написані програми, які потребують прямого доступу.


0

Нижче наведено мої правила iptables. Це працює як шарм. Я створив прозорий https проксі-сервер і пересилаю весь трафік через цей проксі-сервер.

Використовуючи ці правила iptables, я можу керувати мережею.

  • Порти 2086, 2087, 2095 відкриті, оскільки ми використовуємо WHM cpanel та cpanel веб-пошту.
  • 8080 для додаткового веб-сервера.
  • 192.168.2.0 - локальна мережа.

Правило 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.