Реализация Netblock DPI базируется на использовании libnetfilter_queue + nDPI
Позволяет блокировку следующими методами :
Подготавливаем систему, устанавливаем необходимые библиотеки
apt-get zip install autoconf libtool libpoconet46 g++ libnetfilter-acct-dev libnetfilter-conntrack-dev libnetfilter-cthelper0-dev libnetfilter-cttimeout-dev libnetfilter-log-dev libnetfilter-queue-dev |
Скачиваем и устанавливаем nfq
wget https://github.com/max197616/nfqfilter/archive/master.zip unzip master.zip cd nfqfilter-master ./autogen.sh ./configure make && make install cp src/nfqfilter /usr/local/sbin/ touch /var/log/nfqfilter.log |
Настраиваем конфиг ( /etc/nfq/nfq.ini ), пример :
; номер очереди queue = 0 ; файл с доменами для блокировки domainlist = /etc/nfq/domains ; файл с url для блокировки urllist = /etc/nfq/urls ; файл с ssl доменами для блокировки ssllist = /etc/nfq/ssl_host ; файл с ip:port для блокировки hostlist = /etc/nfq/hosts ; куда редиректить в случае наличия в списках redirect_url = https://127.0.0.1:9443/ ; дополнительные порты для протоколов (nDPI) protocols = /etc/nfq/protos ; время вывода статистики по использованию памяти, минут statistic_interval = 10 ; каким значением метить пакеты для iptables в случае наличия в списках ssl и hosts mark_value = 10 ; количество обрабатываемых пакетов (default: 1024) max_pending_packets = 100000 [logging] loggers.root.level = information ;loggers.root.level = debug loggers.root.channel = fileChannel channels.fileChannel.class = FileChannel channels.fileChannel.path = /var/log/nfqfilter.log channels.fileChannel.rotation = 1 M channels.fileChannel.archive = timestamp channels.fileChannel.formatter.class = PatternFormatter channels.fileChannel.formatter.pattern = %Y-%m-%d %H:%M:%S.%i [%P] %p %s - %t channels.fileChannel.formatter.times = local |
В iptables создаём :
iptables -t mangle -N NETBLOCK_DPI iptables -t mangle -A NETBLOCK_DPI -m connbytes --connbytes-mode bytes --connbytes-dir both --connbytes 100000 -j RETURN iptables -t mangle -A NETBLOCK_DPI -p tcp --dport 80 -j NFQUEUE --queue-num 0 iptables -t mangle -A NETBLOCK_DPI -p tcp --dport 443 -j NFQUEUE --queue-num 0 ipset -N NETBLOCK_DPI_SSL iptables -A FORWARD -m mark --mark 10 =p tcp -j REJECT --reject-with tcp-rst iptables -A FORWARD -m set --match-set NETBLOCK_DPI_SSL dst -p tcp -j REJECT --reject-with tcp-rst iptables -t mangle -A PREROUTING -j NETBLOCK_DPI |
Запускаем следующим образом (daemonize, PID location, config location) :
/usr/local/sbin/nfqfilter --daemon --pidfile=/var/run/nfqfilter.pid -c /etc/nfq/nfq.ini |
Скачиваем и инициализируем блок-лист UABlock (например), или настраиваем нужные нам блокировки с помощью админки ( Интерфейс управления ресурсами блокировки )
/usr/abills/libexec/billd netblock TYPE=uablock FETCH=1 INIT=1 |
В конфигурационном файле /usr/abills/libexec/config.pl указываем параметры для установленного nfq :
# директория с конфигурационными файлами $conf{NETBLOCK_NFQ_ETC} = "/etc/nfq/" # restart command line $conf{NETBLOCK_NFQ_RESTART} = "/usr/local/sbin/nfqfilter --daemon --pidfile=/var/run/nfqfilter.pid -c /etc/nfq/nfq.ini"; |
Запускаем блокировку :
/usr/abills/libexec/billd netblock TYPE=uablock ACTIVE_BLOCK=1 DPI_BLOCK=1 |