Все мои попытки оптимального решения в области блокировки торрентов всё же имели положительный эффект. Нужно было перевернуть кучу информации, принять обоснованное решение и дать ответ на извечный русский вопрос «Что делать?» ))
1. Варианты с «просто шейпером» описаны выше и кардинально не подходят для борьбы с торрентами по причине того, что торрент клиент открывает туеву хучу соединений и всенепременно встаёт вопрос, как разделить всю полосу равномерно, если один гадёныш для каждого соединения требует максимум канала. Таким образом вся ширина канала «утекает» в сторону торрент-вредителя, а остальные участники процесса получают болт, потому, что шейпер считает, что он сделал правильно. И это действительно правильно с позиции шейпера.
2. Появилась мысль «пометить» ))) траффик вредителя в общем потоке скачиваемой порнографии и отправить его в «просто шейпер» для приоритезации. Но как? Оказывается есть специальные примочки к штатному фильтру iptables, коих не так много, однако они есть: самая клёвая (по заверению гуру, которые живут в матрице и питаются исключительно исходниками) — это layer7. За ним по популярности (а может от безысходности) следует ipp2p. Этих «братьев по разуму» следует очень долго курить, поскольку их использование весьма нетривиально. Если Вы привыкли к rpm-дистрибутивам, то их внедрёж покажется Вам пришествием черной оспы. Нужно иметь исходники ядра и собственно iptables для сборки. Вообщем если нервы крепкие и много свободного времени — пакеты *-devel + man Вам в помощь.
3. В виде rpm в репозиториях можно нарыть iptables-ipp2p и xtables-addons, главным образом для Fedora и OpenSuse. Основное достоинство этих вещей в том, что перекомпилировать ничего не нужно, поскольку они — это дополнительные модули для расширения функциональных возможностей iptables. Однако, ни один из них корректно прикрутить (мне по крайней мере) не удалось.
4. Зато из исходников xtables-addons встал на ура. Версия 1.37 и Mandriva 2010.2 подружились сразу после трёх предложений любви и взаимного уважения: ./configure, make, make install. Всё без ошибок и даже man прикрутился. Depmod -a, modprobe xt_ipp2p не ругается и наконец lsmod | more показал, что модуль xt_ipp2p торчит в нужном месте. ))
Пишем: iptables -A FORWARD -m ipp2p —bit -j DROP, запускаем торрент на скачку и смотрим продукты жизнедеятельности: iptables -L -v -n. Видим, что пакеты bittorent (—bit) в цепочке FORWARD успешно дропаются и их количество ростёт. Но не тут то было. Захожу на другой торрент-сервер. Гадкий торрент немного притормозил, потом скорость стремительно пошла вверх. Мне даже показалось, что с этим фильтром он стал качать ещё быстрее ))). Как выяснилось фильтровать то он фильтрует, но видимо не всё. Так что отправлять такие пакеты в шейпер или гасить их —limit-ом непосредственно в iptables нет смысла. Другими словами проку в этом «выделении» никакого.
5. В итоге я выкинул всё лишее и не нашёл ничего лучше, чем запретить в FORWARD всё, а затем открыть из локальной сети только то, что жизненно необходимо. Описанный ранее способ блокировки портов > 1024 — это слишком круто и может вызвать массу проблем в будущем. Вот более элегантный способ:
iptables -A FORWARD DROP ... iptables -A FORWARD -i $local -o $inet -p icmp -j ACCEPT iptables -A FORWARD -i $local -o $inet -p udp --dport domain -j ACCEPT iptables -A FORWARD -i $local -o $inet -p tcp -m multiport --dport smtp,https,aol -j ACCEPT iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT iptables -A FORWARD -i $inet -o $local -m --state ESTABLISHED,RELATED -j ACCEPT
Теперь здесь торрент не живёт. Все порты прокинутые ранее для внутренних служб в сети так и остались подняты (ибо PREROUTING), юзвери ходят через прозрачный прокси (REDIRECT 80 -> 3128), а напрямую через FORWARD имеют доступ к почтовому серверу налоговой (порт 25), https (443), icq (5190) и могут даже пинговать yandex.ru )))
p.s. Ещё есть параноидальная мысль прикрутить PortSentry на интерфейс, смотрящий в локальную сеть… )))
Pax Vobiscum!
Оригинал: sysadmins.ru/post9864496.html