MHOSTMHOST

Блокировка торрент-трафика на 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.
Важно: ни один набор правил iptables не даёт стопроцентной блокировки. Шифрованный трафик и клиенты со сменённым портом такие правила не поймают — рассматривайте это как снижение основной массы торрент-трафика, а не как гарантированный запрет. Для контроля отдельных портов и сервисов на уровне всего сервера см. статью «Файрвол ufw: порты».

Шаг 1. Заблокируйте стандартные порты BitTorrent

Большинство клиентов по умолчанию слушают известный диапазон портов — это самый дешёвый уровень фильтрации, хотя пользователь может сменить порт вручную в настройках клиента.

bash
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
Порт 6969/tcp — стандартный порт HTTP-трекера. Если на сервере не крутится собственный сервис на этом порту, его тоже стоит закрыть тем же способом, что и остальные.

Шаг 2. Заблокируйте DHT-запросы по сигнатуре

DHT (распределённая таблица маршрутизации) BitTorrent работает поверх UDP и почти всегда передаётся в открытом виде в формате bencode — это позволяет находить характерные строки прямо в пакете независимо от порта.

bash
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
Не используйте короткие строки вроде announce без bencode-префикса длины (13:announce_peer). Слово announce само по себе часто встречается в обычном HTTP/HTTPS-трафике (аналитика, рекламные пиксели), и такое правило начнёт резать легитимные запросы.

Шаг 3. Ограничьте число одновременных соединений с одного адреса

У торрент-клиента обычно открыты десятки-сотни параллельных соединений к разным пирам — обычный браузер или почтовый клиент так не делает. Это можно использовать как дополнительный поведенческий признак.

bash
sudo iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 100 --connlimit-mask 32 -j DROP
Порог в 100 соединений — отправная точка. Если через сервер легитимно проходит много параллельных сессий (например, прокси на несколько пользователей), поднимите значение и понаблюдайте за логами, прежде чем резать трафик клиентам.

Шаг 4. Включите глубокую проверку пакетов через nDPI (опционально)

Порты и bencode-сигнатуры не ловят зашифрованный или обфусцированный торрент-трафик. Модуль ядра nDPI классифицирует протокол по поведенческим паттернам пакетов, не полагаясь только на открытое содержимое.

bash
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
Модуль собирается под конкретную версию ядра — после обновления ядра (sudo apt upgrade) сборку нужно повторить, иначе правило тихо перестанет работать. Добавьте это в чек-лист апдейтов сервера.

Шаг 5. Проверьте правила и сохраните их

Посмотрите активные правила и убедитесь, что обычный трафик — SSH, HTTP/HTTPS, ваши сервисы — по-прежнему проходит:

bash
sudo iptables -L -n -v --line-numbers
Если сайты и SSH продолжают работать, а тестовое торрент-подключение не устанавливается — правила отработали.
Без sudo netfilter-persistent save все добавленные правила пропадут после перезагрузки сервера — сохраните их тем же способом, что и в шаге 2.

Что дальше

Базовые команды iptables без привязки к конкретной задаче разобраны в статье «Основы iptables». Если вместо гибкого iptables вам достаточно простого набора разрешённых портов — см. «Файрвол ufw: порты».