Блокировка торрент-трафика на VPS
BitTorrent-трафик на VPS — частая причина жалоб от правообладателей и абузов от аплинка: сервер начинает держать сотни одновременных TCP/UDP-соединений с пирами и трекерами, а провайдер получает жалобу и блокирует IP или запрашивает объяснения. Полностью отличить шифрованный BitTorrent-трафик от обычного невозможно — протокол умеет шифроваться (Message Stream Encryption) и работать на произвольных портах, — но комбинация из блокировки стандартных портов, поиска DHT-запросов и лимита на число соединений перекрывает основную массу клиентов «по умолчанию». В этой статье вы настроите iptables на VPS MHost так, чтобы блокировать типичный торрент-трафик, не задев обычный веб- и SSH-трафик.
Что понадобится
- VPS MHost на Ubuntu 22.04/24.04 или Debian 11/12 — команды ниже используют iptables (netfilter), штатный для этих систем.
- Доступ по SSH под root или пользователем с правами sudo.
- Пакет iptables-persistent (netfilter-persistent) для сохранения правил после перезагрузки.
- Доступ к панели VMmanager 6 — на случай, если правило заблокирует лишнее и понадобится консоль сервера без SSH.
Шаг 1. Заблокируйте стандартные порты BitTorrent
Большинство клиентов по умолчанию слушают известный диапазон портов — это самый дешёвый уровень фильтрации, хотя пользователь может сменить порт вручную в настройках клиента.
sudo iptables -A INPUT -p tcp --dport 6881:6889 -j DROP
sudo iptables -A INPUT -p tcp --dport 51413 -j DROP
sudo iptables -A INPUT -p udp --dport 6881:6889 -j DROP
sudo iptables -A INPUT -p udp --dport 6969 -j DROPШаг 2. Заблокируйте DHT-запросы по сигнатуре
DHT (распределённая таблица маршрутизации) BitTorrent работает поверх UDP и почти всегда передаётся в открытом виде в формате bencode — это позволяет находить характерные строки прямо в пакете независимо от порта.
sudo iptables -A FORWARD -p udp -m string --algo bm --string "1:q9:find_node" -j DROP
sudo iptables -A FORWARD -p udp -m string --algo bm --string "1:q9:get_peers" -j DROP
sudo iptables -A FORWARD -p udp -m string --algo bm --string "1:q13:announce_peer" -j DROP
sudo netfilter-persistent saveШаг 3. Ограничьте число одновременных соединений с одного адреса
У торрент-клиента обычно открыты десятки-сотни параллельных соединений к разным пирам — обычный браузер или почтовый клиент так не делает. Это можно использовать как дополнительный поведенческий признак.
sudo iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 100 --connlimit-mask 32 -j DROPШаг 4. Включите глубокую проверку пакетов через nDPI (опционально)
Порты и bencode-сигнатуры не ловят зашифрованный или обфусцированный торрент-трафик. Модуль ядра nDPI классифицирует протокол по поведенческим паттернам пакетов, не полагаясь только на открытое содержимое.
sudo apt install -y build-essential linux-headers-$(uname -r) git
git clone https://github.com/ndpi-netfilter/nDPI.git
cd nDPI/ndpi-netfilter && make && sudo make install
sudo modprobe xt_ndpi
sudo iptables -A FORWARD -m ndpi --bittorrent -j DROPШаг 5. Проверьте правила и сохраните их
Посмотрите активные правила и убедитесь, что обычный трафик — SSH, HTTP/HTTPS, ваши сервисы — по-прежнему проходит:
sudo iptables -L -n -v --line-numbersЧто дальше
Базовые команды iptables без привязки к конкретной задаче разобраны в статье «Основы iptables». Если вместо гибкого iptables вам достаточно простого набора разрешённых портов — см. «Файрвол ufw: порты».