Использование Linux IPTables, Как заблокировать торренты или любые протоколы P2P?

17

В нашем заведении мы подключили более 300 компьютеров к разным локальным сетям через Интернет. Сюда входят Локальные сети Офицеров и Интернет-лаборатория для студентов. И мы хотим контролировать торренты или любые протоколы P2P. Предыдущее решение нашей проблемы - KerioWinRoute 6.5.x, который удовлетворяет больше всего.

Проблема в том, что мы перешли на Ubuntu 8.04 LTS с использованием платформы Webmin.

Натаниэль Варона
источник

Ответы:

14

Блокировка P2P на основе портов вряд ли является 100% решением. То, что вы можете рассмотреть, называется фильтрацией L7 (фильтрация уровня 7). По сути, в Linux есть реализация, которая выполняет сопоставление на основе регулярных выражений для всех пакетов, чтобы решить, что хорошо, а что плохо.

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

Это может помочь вам заблокировать все виды вещей, включая Skype.

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

Обратите внимание: сопоставление регулярных выражений для проверки и фильтрации пакетов требует значительных ресурсов, что делает любую систему более уязвимой для DDOS-атак. Предпочтительным методом будет нацеливание протокола в iptables.

Каролис Т.
источник
11

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

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

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

В любом случае, технология очень редко является решением социальных проблем, и злоупотребление корпоративными / общедоступными / какими-либо сетями для p2p является социальной проблемой. Попробуйте поговорить со своими пользователями, заставить свою организацию создать соответствующие политики и применить к ним санкции. По моему опыту, это работает намного лучше, чем постоянная гонка вооружений с вашими пользователями.

Александар Иванишевич
источник
А как прокси-серверы расшифровывают SSL на лету?
Дэвид Пашли
Позаботьтесь о том, чтобы использование SSL-прокси было запрещено в некоторых странах
радиус
Дэвид Пашли, они отправили туда сертификат вместо сайта один. Так что они теперь приватные, потом пересылают запрос на настоящий сайт.
Радиус
1
Еще один шаг, связанный с этим, заключается в использовании групповой политики для отправки доверенного корневого сертификата для прокси-сервера SSL, чтобы он мог подделывать доверенные сертификаты.
Zan Lynx
1
Это просто
ужасное
2

Хорошей практикой является блокировка общих портов трекера, таких как: 6881-6889 2710 6969

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

ipp2p - лучшее решение, которое я знаю. Смотрите раздел Документация / Использование

Про l7-фильтр. В комментарии bittorrent.pat говорится:

Эта модель была проверена и, как полагают, работает хорошо. Однако он не будет работать с зашифрованными потоковыми потоками, поскольку невозможно сопоставить (хорошо) зашифрованные данные.

В системах BSD pf может применять действия в зависимости от количества состояний или соединений в секунду, поэтому вы можете помечать трафик, похожий на биттент, поскольку он быстро генерирует соединения. Прочтите руководство по iptables, возможно, оно тоже может.

SaveTheRbtz
источник
1

Существует модуль с именем IPP2P, который может обнаруживать и блокировать протоколы P2P: http://www.ipp2p.org/

радиус
источник
1
Этот сайт больше не существует.
Ахилл
1

Простое решение - заблокировать все исходящие порты, кроме тех, которые вы хотите разрешить.

Кроме того, вы можете найти список портов, которые, вероятно, будут использоваться для обычных приложений P2P, и заблокировать их. Bittorrent имеет тенденцию разрешать загрузку очень ограниченного количества, только если вы не загружаете файлы, поэтому вам также следует убедиться, что вы не принимаете входящие соединения.

Может оказаться полезным настроить учетную запись IP-адреса на маршрутизаторе на основе используемого порта TCP, а затем выяснить, какой порт используется наиболее интенсивно. IPTraf - полезный инструмент для проверки этого.

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

Дэвид Пашли
источник
1

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

user1686
источник
p2p работает с использованием портов http и https без проблем и большого количества настроек
Kazimieras Aliulis
softly.lt назвал это прямо. За последние несколько лет все больше и больше приложений p2p либо переходят на порт 80 (часто зашифрованный), либо сканируют порты в поисках открытого. Отслеживание на прикладном уровне (особая форма глубокой проверки пакетов) поймает непосредственное использование, но не обязательно, если трафик туннелируется.
Скотт Пак
1
@packs: все больше и больше клиентов BitTorrent предлагают полное шифрование и даже маскировку, как и другие протоколы, поскольку интернет-провайдеры проводят проверку пакетов.
Zan Lynx
@ Grawity - Точно, но они должны быть довольно продвинутыми пользователями, знающими, как работать с VPN + прокси, и эти люди, вероятно, достаточно умны, чтобы не работать с Торрентом.
Джангофан
@packs - да, у интернет-провайдеров, конечно, есть проверка пакетов, но если у них включено шифрование uTorrent, вы не сможете узнать, что это за трафик, за исключением того, что у них открыто большое количество соединений.
Насколько
1

bittorrent и большинство p2p в наши дни довольно уклончивы. Вместо того, чтобы блокировать трафик, используйте правила QOS, чтобы лишить клиентов, которые используют большую пропускную способность, или медленно обнулять трафик p2p до нуля в течение некоторого времени. Он не будет блокировать протокол, но будет сдерживать p2p'ы, что он настолько медленный, что не стоит этого делать.

Помните, что не все торрент-трафик плохой, а какой-то хороший! :-)

Уникс Дворник
источник
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, она будет удалена? Это просто для того, чтобы предотвратить загрузку исходного торрент-файла, но как только торрент-файл уже загружен, это не будет блокировать битторрентный трафик, верно?
Хоуман,
0

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

Тарас Чухай
источник
0

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

Киан
источник
0

Вы не можете использовать прямую блокировку портов. Есть несколько альтернатив. Фильтр Layer7 работает медленно, ненадежно и, насколько мне известно, больше не поддерживается.

IPP2P в порядке, но был заменен OpenDPI, который теперь был прекращен спонсором ipoque (который продает PACE, коммерческий эквивалент). NDPI является логическим завершением этого небольшого пути: http://www.ntop.org/products/ НИПИ /

Самым простым и довольно эффективным является продолжение предложения Дэвида Пашли. Заблокируйте все порты и разрешите только то, что вам нужно, - и расширьте это, передав прокси те службы, которые вам нужны - например, с помощью веб-прокси и, возможно, внутреннего почтового сервера, которому разрешен порт 25, но клиенты общаются только с внутренним сервером. Таким образом, вы можете иметь клиентов, которым вообще не нужны открытые порты на брандмауэре. Это должно работать, но может начать рушиться, если вам нужно использовать какие-либо сложные и / или плохо написанные приложения, которым нужен прямой доступ.

Том Ньютон
источник
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
Dinoosh
источник