BitBlockerInstaller — это скрипт, который разворачивает DPI-детектор на базе nDPId и в реальном времени точечно блокирует обнаруженные BitTorrent-потоки на сервере, не трогая остальной трафик. Дополнительно статически блокирует известные DHT-бутстрап ноды с периодическим обновлением их IP.
bash <(curl -Ls https://raw.githubusercontent.com/sngvy/BitBlockerInstaller/refs/heads/main/BitBlockerInstaller.sh)
- Захват: nDPId слушает трафик на сетевом интерфейсе в userspace через libpcap — без сборки кастомного модуля ядра.
- Фильтр: опционально BPF-фильтр ограничивает захват конкретными портами/диапазоном или всеми портами, кроме указанных.
- Анализ: nDPId классифицирует потоки через nDPI и стримит JSON-события по UNIX-сокету слушателю BitBlocker.
- Вердикт: если протокол потока — BitTorrent, слушатель добавляет запись потока в ipset (
hash:ip,port,ip,port, TTL 1 час) и рвёт уже установленное соединение черезconntrack -D. DROP-правило в цепочке BITBLOCKER статично и не растёт — блокировка масштабируется на уровне ipset, а не количества правил в цепочке. - Раннее отбрасывание: правила BITBLOCKER стоят в таблице
RAW(PREROUTING/OUTPUT), то есть до conntrack — повторные пакеты уже заблокированного потока отбрасываются раньше по конвейеру ядра, не создавая новую conntrack-запись. - DHT: отдельный демон резолвит известные bootstrap-хосты (router.bittorrent.com и др.) и статически дропает их IP — через UFW (
ufw deny out to) либо отдельную цепочку iptables, в зависимости от выбранного firewall-бэкенда; обновление раз в 30 минут по systemd-таймеру, т.к. IP этих хостов меняются. - Firewall: при установке выбирается бэкенд — iptables+iptables-persistent или UFW (влияет только на блокировку DHT-нод). Точечная блокировка потоков (BITBLOCKER) всегда идёт напрямую через iptables/ip6tables + ipset независимо от выбора — у UFW нет механизма для таких динамических правил.
- Установка: если рабочий бинарник nDPId уже найден в системе, сборка пропускается; сама сборка идёт тихо, с индикатором прогресса, полный лог показывается только при ошибке.
- Обновление: при запуске поверх ранее установленной версии скрипт автоматически находит и удаляет устаревшую цепочку BITBLOCKER в таблице
filter(если она осталась от версий до перехода на ipset+RAW) — повторный запуск безопасен и не оставляет «осиротевших» правил. - Автоматизация: три systemd-юнита (
bitblocker-listener,bitblocker-ndpidсRestart=always,bitblocker-dht-block.timer), переживают перезагрузку; лог —/var/log/bitblocker.logс ротацией через logrotate (ежедневно, хранится 7 дней).