BitBlockerInstaller — это скрипт, который разворачивает DPI-детектор на базе nDPId и в реальном времени точечно блокирует обнаруженные BitTorrent-потоки на сервере, не трогая остальной трафик. Дополнительно статически блокирует известные DHT-бутстрап ноды с периодическим обновлением их IP.
bash <(curl -Ls https://raw.githubusercontent.com/sngvy/BitBlockerInstaller/refs/heads/main/BitBlockerInstaller.sh)
- Захват: nDPId слушает трафик на сетевом интерфейсе в userspace через libpcap — без сборки кастомного модуля ядра.
- Фильтр: опционально BPF-фильтр ограничивает захват конкретными портами/диапазоном или всеми портами, кроме указанных. Порты проверяются при вводе (не больше 15 позиций, диапазон считается за две).
- Анализ: nDPId классифицирует потоки через nDPI и стримит JSON-события по UNIX-сокету (права
600) слушателю BitBlocker. - Вердикт: если протокол потока — BitTorrent (события
detectedиdetection-update, предположения по порту игнорируются), слушатель добавляет концы потока в пару наборов ipsethash:ip,port(источник и приёмник, TTL 24 часа). Повторные события одного потока в течение 10 минут не обрабатываются, дальше TTL записи продлевается. Ошибка ipset попадает в лог как[ERROR]. - Правила: цепочка BITBLOCKER в таблице
raw(PREROUTING/OUTPUT), то есть до conntrack. Она состоит из трёх правил (поток, ответный поток, DHT), не растёт со временем и пересобирается одной транзакцией черезiptables-restore --noflush, поэтому защита не пропадает при обновлении и дубли невозможны. - DHT: известные bootstrap-хосты (router.bittorrent.com и др.) резолвятся в отдельные наборы
bitblocker_dht4/bitblocker_dht6, которые подменяются атомарно черезswapраз в 30 минут по systemd-таймеру. Частные адреса отбрасываются, при сбое DNS или резком сокращении списка остаётся прежний набор. - Firewall: при установке выбирается iptables+iptables-persistent или UFW. Блокировка всегда идёт напрямую через таблицу
rawи не зависит от правил UFW. Выбор определяет только способ сохранения: в режиме iptables правила записываются вrules.v4/rules.v6, в режиме UFW их восстанавливают слушатель и таймер. - Загрузка системы: служба
bitblocker-ipsetсоздаёт наборы и восстанавливает список DHT до загрузки файрвола. Без неёiptables-restoreне смог бы загрузить сохранённые правила, ссылающиеся на ещё не созданные наборы. - Установка: если рабочий бинарник nDPId уже найден в системе, сборка пропускается; сама сборка идёт тихо, с индикатором прогресса, полный лог показывается только при ошибке. Версию nDPId можно зафиксировать:
NDPID_REF=<тег или коммит> bash BitBlockerInstaller.sh. - Обновление и миграция: при запуске поверх прежней версии скрипт делает резервную копию, переносит записи потоков в новые наборы, удаляет старые наборы
BITBLOCKER-*, DHT-цепочку вfilter, правила UFW с меткойBitBlocker-DHTи записи в/etc/iptables/ipsets. После успешной проверки резервные копии удаляются; если проверка не пройдена или список DHT не загрузился, старые DHT-правила и копии остаются для ручного отката. - Автоматизация: systemd-юниты
bitblocker-ipset,bitblocker-listener,bitblocker-ndpid(Restart=always) и таймерbitblocker-dht-block, переживают перезагрузку. Конфиг —/etc/bitblocker/bitblocker.conf, лог —/var/log/bitblocker.logс ротацией (ежедневно, 7 дней). - Удаление: пункт «Удалить» в меню скрипта убирает службы, цепочку, наборы, конфиг и записи в
rules.v4/rules.v6, чтобы после ребута не осталось ссылок на несуществующие наборы.