Сейчас я вам расскажу, что как-то на nag.ru пользователь под ником max1976 продолжил разработку nfq_filter. Я хочу заметить, что данная версия nfq_filter на много улучшена. Если сравнивать с оригинальным nfq_filter, то:
У данной версии повышенна производительность Не крошится speedtest Появилась блокировка сайтов ssl по CNAME Но, у данной программы есть несколько недостатков:
Сайт, на который идёт переадресация, должен быть в формате: http://blackhole.ne.vlezay80.lan/
Не блокирует сайты по ssl в старых браузерах и операционных системах (баг NDPI)
Не блокирует сайты внутри прокси
Нет поддержки IPv6
Кстати, если нужно блокировать запрещённые сайты из реестра, то этой программы будет вполне достаточно, так-как наше законодательство пока не предусматривает блокировку сайтов через открытые прокси сервера. Блокировка внутри прокси, это уже дурость провайдеров. Кстати, блокировку открытых прокси всегда можно реализовать, например через Suricat'у.
На счёт блокировки в IPv6: если очень надо, то это можно всегда в исходниках дописать.
Инструкция по установки
Нам понадобятся библиотеки:
libnetfilter_queue libnfnetlink Poco >= 1.6 nDPI = 1.7 Скачиваем и устанавливает первые две. (эти библиотеки есть в кажном современном репозитарии) Скачиваем ПОСЛЕДНЮЮ версию libpoco Скачиваем NDPI версии 1.7 Устанавливаем ndpi:
cd ./nDPI-1.7
./autogen.sh
make
make install
cd ./poco-1.6.1
./configure
make
make install
cd ./nfq_filter
./configure
make
make install
Решение проблем
Если при установки возникает ошибка:
ndpi/ndpi_api.h: No sourch file fo directory
Использование Конфиг у данной программы имеет очень лёгкий сентекс:
; номер очереди
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 = http://serv.mg/cgi/bl.cgi/?
; дополнительные порты для протоколов (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
Запускаем данную программу так:
LD_LIBRARY_PATH=/usr/local/lib/ nfqfilter -c /etc/nfqfilter.ini
iptables -t mangle -N ZAPRET_GOV
iptables -t mangle -A ZAPRET_GOV -m connbytes --connbytes-mode bytes --connbytes-dir both --connbytes 100000 -j RETURN
iptables -t mangle -A ZAPRET_GOV -p tcp --dport 80 -j NFQUEUE --queue-num 0
iptables -t mangle -A ZAPRET_GOV -p tcp --dport 443 -j NFQUEUE --queue-num 0
iptables -A FORWARD -m mark --mark 10 =p tcp -j REJECT --reject-with tcp-rst
iptables -A FORWARD -m set --match-set zapret_gov_ssl_ip dst -p tcp -j REJECT --reject-with tcp-rst
iptables -t mangle -A PREROUTING -j ZAPRET_GOV
К самой программе можно прикрутить любой парсер реестра запрещённых сайтов.
Сама программа: https://github.com/max197616/nfqfilter
В комплекте также есть выгрузка реестра запрещённых сайтов (правда не первой свежести).