В нашем учреждении мы подключили более 300 компьютеров к разным локальным сетям с Интернетом. Сюда входят офисы LAN и Интернет-лаборатория для студентов. И мы хотим контролировать торренты или любые протоколы P2P. Предыдущее решение нашей проблемы - KerioWinRoute 6.5.x, которое удовлетворяет больше всего.
Проблема в том, что мы перешли на Ubuntu 8.04 LTS с помощью платформы Webmin.
Блокировка P2P на основе порта вряд ли является 100% решением. То, что вы, возможно, захотите рассмотреть, называется фильтрацией L7 (фильтрация уровня 7). По сути, в linux есть реализация, которая выполняет сопоставление на основе регулярных выражений для всех пакетов, чтобы решить, что хорошо, а что плохо.
http://l7-filter.sourceforge.net/
Это может помочь вам заблокировать все, что угодно, включая скайп.
http://l7-filter.sourceforge.net/protocols
Обратите внимание: сопоставление регулярных выражений для проверки и фильтрации пакетов требует значительных ресурсов, что делает любую систему более уязвимой для DDOS-атак. Предпочтительным методом будет нацеливание на протокол в iptables.
Единственное правильное техническое решение - пропускать весь трафик через прокси-сервер, который на лету расшифровывает SSL-трафик, а затем применяет слой 7 фильтрация на попутном трафике.
Такие продукты довольно дороги, поскольку за ними обычно стоит большая команда инженеров, обновляющих правила, необходимые для классификации пакетов.
Вы можете немного помочь себе iptables
модули сушат, как упоминалось ранее ipp2p
или l7-filter
, но они не будут ловить зашифрованный трафик.
В любом случае, технологии очень редко являются решением социальных проблем, а неправильное использование корпоративных / общественных / любых сетей для p2p является социальной проблемой. Попробуйте поговорить со своими пользователями, попросите свою организацию создать соответствующие политики и применить к ним санкции. По моему опыту, это работает намного лучше, чем постоянная гонка вооружений с вашими пользователями.
Рекомендуется блокировать общие порты трекера, например: 6881-6889 2710 6969
но это не поможет против трекеров, привязанных к порту 80 (например, tpb.tracker.thepiratebay.org). Так что блокировка всех, но 80,443,22 не поможет.
ipp2p лучшее решение, которое я знаю. См. Раздел документации / использования
Насчет l7-filter. В комментарии bittorrent.pat говорится:
Этот шаблон был протестирован и, как полагают, работает хорошо. Однако он не будет работать с зашифрованными потоками bittorrent, поскольку невозможно сопоставить (хорошо) зашифрованные данные.
В системах BSD pf может применять действия в зависимости от количества состояний или соединений в секунду, поэтому вы можете пометить биттотент-подобный трафик, потому что он быстро генерирует соединения. Прочтите руководство по iptables, может быть, он тоже может.
Существует модуль IPP2P, который может обнаруживать и блокировать протоколы P2P: http://www.ipp2p.org/
Простое решение - заблокировать все исходящие порты, кроме тех, которые вы хотите разрешить.
Кроме того, вы можете найти список портов, которые могут использоваться для общих приложений P2P, и заблокировать их. Bittorrent имеет тенденцию разрешать только очень ограниченный объем загрузки, если вы также не загружаете, поэтому вам также следует убедиться, что вы не принимаете никаких входящих подключений.
Возможно, вам будет полезно настроить учет IP-адресов на вашем маршрутизаторе на основе используемого порта TCP, а затем выяснить, какой порт используется наиболее часто. IPTraf - полезный инструмент для проверки этого.
Я должен предупредить вас, что вы никогда не остановите все; люди изобретательны и найдут способ обойти любое наложенное вами ограничение. Однако большинство брандмауэров останавливают случайного пользователя, и этого может быть достаточно.
Вы не можете заблокировать P2P полностью - если вы не разрешаете только "хорошие" TCP-порты 80, 443, 22 ... И даже этого обычно достаточно для тех, кто думает о компьютерах, у которых есть VPN и тому подобное.
bittorrent и большинство p2p в наши дни довольно уклончивы. Вместо блокировки трафика используйте правила QOS, чтобы ограничивать клиентов, использующих большой объем полосы пропускания, или медленно ограничивать трафик p2p до нуля в течение определенного периода времени. Он не будет блокировать протокол, но будет удерживать пользователей p2p от того, что он настолько медленный, что не стоит этого делать.
Помните, что не весь торрент-трафик плохой, а иногда и хороший! :-)
Используйте эти правила пересылки 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
Популярные программы туннелирования SSL, такие как Ultrasurf, позволяют пользователям легко обходить ваши брандмауэры. Чтобы заблокировать зашифрованный трафик BitTornet, вам понадобится специализированное устройство UTM, которое может проверять и блокировать зашифрованные туннели, проходящие через http (s). Я знаю только об одном, кто на это способен - Астаро, но их должно быть больше.
Вы можете использовать ip2p, как упоминалось ранее. Однако это не собирается полностью блокировать ситуацию. В идеале вы должны защищать каждый порт, который вы специально не используете, и использовать ip2p. Не идеальное решение, но лучшее, что вы, вероятно, получите.
Вы не можете использовать прямую блокировку портов. Есть несколько альтернатив. Фильтр Layer7 работает медленно, ненадежно и, насколько мне известно, больше не поддерживается.
IPP2P в порядке, но был заменен OpenDPI, который теперь был прекращен спонсором ipoque (который продает PACE, коммерческий эквивалент). NDPI, по-видимому, является логическим завершением этого небольшого пути: http://www.ntop.org/products/ndpi/
Самый простой и довольно эффективный - это продолжение предложения Дэвида Пэшли. Заблокируйте все порты и разрешите только то, что вам нужно - и расширьте это, проксируя те службы, которые вам нужны - например, с помощью веб-прокси и, возможно, внутреннего почтового сервера, которому разрешен порт 25, но клиенты общаются только с внутренним сервером. Таким образом, у вас могут быть клиенты, которым вообще не нужны открытые порты брандмауэра. Это должно работать, но может начать рассыпаться, если вам нужно использовать какие-либо сложные и / или плохо написанные приложения, которым нужен прямой доступ.
Ниже мой набор правил iptables. Это работает как шарм. Я создал прокси-сервер с прозрачным перехватом https и отправляю весь трафик через этот прокси-сервер.
Используя эти правила iptables, я могу управлять сетью.
Правило 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