mirror of
https://github.com/bol-van/zapret.git
synced 2026-01-01 06:08:54 +03:00
nftables support
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
zapret v.45
|
||||
zapret v.46
|
||||
|
||||
English
|
||||
-------
|
||||
@@ -63,7 +63,7 @@ For english version refer to docs/readme.eng.txt
|
||||
|
||||
Для вариантов 2 и 3 реализованы программы tpws и nfqws соответственно.
|
||||
Чтобы они работали, необходимо их запустить с нужными параметрами и перенаправить на них определенный трафик
|
||||
средствами iptables.
|
||||
средствами iptables или nftables.
|
||||
|
||||
|
||||
Для перенаправления tcp соединения на transparent proxy используются команды следующего вида :
|
||||
@@ -149,6 +149,14 @@ DNAT на localhost (::1) возможен только в цепочке OUTPUT
|
||||
NFQUEUE работает без изменений.
|
||||
|
||||
|
||||
Особенности применения nftables
|
||||
-------------------------------
|
||||
|
||||
Более подробно преимущества и недостатки nftables применительно к данной системе описаны в docs/nftables_notes.txt
|
||||
Если коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM.
|
||||
Остальные рассматриваемые здесь функции могут быть перенесены на nftables.
|
||||
|
||||
|
||||
Когда это работать не будет
|
||||
---------------------------
|
||||
|
||||
@@ -490,6 +498,9 @@ options ip6table_raw raw_before_defrag=1
|
||||
|
||||
Это нужно сделать вручную, никакой автоматики в blockcheck.sh нет.
|
||||
|
||||
Либо можно раз и навсегда избавиться от этой проблемы, используя nftables. Там можно создать netfilter hook
|
||||
с любым приоритетом. Используйте приоритет -401 и ниже.
|
||||
|
||||
tpws
|
||||
-----
|
||||
|
||||
@@ -642,6 +653,10 @@ tpws полностью работает на асинхронных сокет
|
||||
Способы получения списка заблокированных IP
|
||||
-------------------------------------------
|
||||
|
||||
!!! nftables не могут работать с ipset-ами. Собственный аналогичный механизм требует огромного количество RAM
|
||||
!!! для загрузки больших листов. Например, для загона 100K записей в nfset не хватает даже 256 Mb.
|
||||
!!! Если вам нужны большие листы на домашних роутерах, откатывайтесь на iptables+ipset.
|
||||
|
||||
1) Внесите заблокированные домены в ipset/zapret-hosts-user.txt и запустите ipset/get_user.sh
|
||||
На выходе получите ipset/zapret-ip-user.txt с IP адресами.
|
||||
|
||||
@@ -829,6 +844,11 @@ tpws и nfqws решают нужно ли применять дурение в
|
||||
Файл /opt/zapret/config используется различными компонентами системы и содержит основные настройки.
|
||||
Его нужно просмотреть и при необходимости отредактировать.
|
||||
|
||||
На linux системах можно выбрать использовать iptables или nftables.
|
||||
По умолчанию на традиционных linux выбирается nftables, если установлен nft.
|
||||
На openwrt по умолчанию выбирается nftables на новых версиях с firewall4.
|
||||
|
||||
FWTYPE=iptables
|
||||
|
||||
Основной режим :
|
||||
tpws - tpws в режиме transparent
|
||||
@@ -910,8 +930,11 @@ MDIG_THREADS=30
|
||||
указать место на флэшке или диске.
|
||||
TMPDIR=/opt/zapret/tmp
|
||||
|
||||
Опции для создания ipset-ов
|
||||
Опции для создания ipset-ов и nfset-ов
|
||||
|
||||
SET_MAXELEM=262144
|
||||
IPSET_OPT="hashsize 262144 maxelem 2097152"
|
||||
|
||||
ПРО РУГАНЬ в dmesg по поводу нехватки памяти.
|
||||
Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный ipset
|
||||
ядро начинает громко ругаться, ipset заполняется не полностью.
|
||||
@@ -939,6 +962,11 @@ GZIP_LISTS=1
|
||||
Но возможно задать другие сети или список сетей :
|
||||
OPENWRT_LAN="lan lan2 lan3"
|
||||
|
||||
Параметр INIT_APPLY_FW=1 разрешает init скрипту самостоятельно применять правила iptables.
|
||||
При иных значениях или если параметр закомментирован, правила применены не будут.
|
||||
Это полезно, если у вас есть система управления фаерволом, в настройки которой и следует прикрутить правила.
|
||||
На openwrt неприменимо при использовании firewall3+iptables.
|
||||
|
||||
Следующие настройки не актуальны для openwrt :
|
||||
|
||||
Если ваша система работает как роутер, то нужно вписать названия внутреннего и внешнего интерфейсов :
|
||||
@@ -948,10 +976,6 @@ IFACE_WAN=eth1
|
||||
Включаются только режимы, обеспечивающие перехват транзитного трафика.
|
||||
Возможно определить несколько интерфейсов следующим образом : IFACE_LAN="eth0 eth1 eth2"
|
||||
|
||||
Параметр INIT_APPLY_FW=1 разрешает init скрипту самостоятельно применять правила iptables.
|
||||
При иных значениях или если параметр закомментирован, правила применены не будут.
|
||||
Это полезно, если у вас есть система управления фаерволом, в настройки которой и следует прикрутить правила.
|
||||
|
||||
Прикручивание к системе управления фаерволом или своей системе запуска
|
||||
----------------------------------------------------------------------
|
||||
|
||||
@@ -961,13 +985,34 @@ IFACE_WAN=eth1
|
||||
|
||||
Следующие вызовы позволяют применить или убрать правила iptables отдельно :
|
||||
|
||||
/opt/zapret/init.d/sysv/zapret start-fw
|
||||
/opt/zapret/init.d/sysv/zapret stop-fw
|
||||
/opt/zapret/init.d/sysv/zapret start_fw
|
||||
/opt/zapret/init.d/sysv/zapret stop_fw
|
||||
/opt/zapret/init.d/sysv/zapret restart_fw
|
||||
|
||||
А так можно запустить или остановить демоны отдельно от фаервола :
|
||||
|
||||
/opt/zapret/init.d/sysv/zapret start-daemons
|
||||
/opt/zapret/init.d/sysv/zapret stop-daemons
|
||||
/opt/zapret/init.d/sysv/zapret start_daemons
|
||||
/opt/zapret/init.d/sysv/zapret stop_daemons
|
||||
/opt/zapret/init.d/sysv/zapret restart_daemons
|
||||
|
||||
nftables сводят практически на нет конфликты между разными системами управления, поскольку позволяют
|
||||
использовать независимые таблицы и хуки. Используется отдельная nf-таблица "zapret".
|
||||
Если ваша система ее не будет трогать, скорее всего все будет нормально.
|
||||
|
||||
Для nftables предусмотрено несколько дополнительных вызовов :
|
||||
|
||||
Посмотреть set-ы интерфейсов, относящихся к lan, wan и wan6. По ним идет завертывание трафика.
|
||||
А так же таблицу flow table с именами интерфейсов ingress hook.
|
||||
/opt/zapret/init.d/sysv/zapret list_ifsets
|
||||
|
||||
Обновить set-ы интерфейсов, относящихся к lan, wan и wan6.
|
||||
Для традиционных linux список интерфейсов берется из переменных конфига IFACE_LAN, IFACE_WAN.
|
||||
Для openwrt определяется автоматически. Множество lanif может быть расширено параметром OPENWRT_LAN.
|
||||
Все интерфейсы lan и wan так же добавляются в ingress hook от flow table.
|
||||
/opt/zapret/init.d/sysv/zapret reload_ifsets
|
||||
|
||||
Просмотр таблицы без содержимого set-ов. Вызывает nft -t list table inet zapret
|
||||
/opt/zapret/init.d/sysv/zapret list_table
|
||||
|
||||
Вариант custom
|
||||
--------------
|
||||
@@ -980,20 +1025,22 @@ custom код вынесен в отдельный shell include
|
||||
Нужно свой код вписать в функции :
|
||||
zapret_custom_daemons
|
||||
zapret_custom_firewall
|
||||
zapret_custom_firewall_nft
|
||||
|
||||
В файле custom пишите ваш код, пользуясь хелперами из "functions" или "zapret".
|
||||
Смотрите как там сделано добавление iptables или запуск демонов.
|
||||
Используя хелпер функции, вы избавитесь от необходимости учитывать все возможные случаи
|
||||
типа наличия/отсутствия ipv6, является ли система роутером, имена интерфейсов, ...
|
||||
Хелперы это учитывают , вам нужно сосредоточиться лишь на фильтрах iptables и
|
||||
Хелперы это учитывают , вам нужно сосредоточиться лишь на фильтрах {ip,nf}tables и
|
||||
параметрах демонов.
|
||||
|
||||
Код для openwrt и sysv немного отличается. В sysv нужно обрабатывать и запуск, и остановку.
|
||||
Код для openwrt и sysv немного отличается. В sysv нужно обрабатывать и запуск, и остановку демонов.
|
||||
Запуск это или остановка передается в параметре $1 (0 или 1).
|
||||
В openwrt за остановку демонов отвечает procd, а firewall вычищается при "fw3 restart",
|
||||
потому нет необходимости реализовывать логику останова.
|
||||
В openwrt за остановку отвечает procd.
|
||||
|
||||
При апгрейде нужно сохранить лишь custom, другие файлы править не надо.
|
||||
Для фаервола кастом пишется отдельно для iptables и nftables. Все очень похоже, но отличается
|
||||
написание фильтров и названия процедур хелперов. Если вам не нужны iptables или nftables -
|
||||
можете не писать соответствующую функцию.
|
||||
|
||||
Готовый custom скрипт custom-tpws4http-nfqws4https позволяет применить дурение
|
||||
tpws к http и nfqws к https. При этом поддерживаются установки из config.
|
||||
@@ -1011,6 +1058,8 @@ tpws к http и nfqws к https. При этом поддерживаются у
|
||||
apt-get update
|
||||
apt-get install ipset curl dnsutils git
|
||||
|
||||
Если хотите использовать nftables, то нужен пакет nftables, а ipset не обязателен.
|
||||
|
||||
Скопировать директорию zapret в /opt или скачать через git :
|
||||
cd /opt
|
||||
git clone --depth 1 https://github.com/bol-van/zapret
|
||||
@@ -1124,7 +1173,7 @@ git и curl по умолчанию могут присутствовать, ips
|
||||
|
||||
Подключить init скрипт :
|
||||
|
||||
ln -fs /opt/zapret/init.d/sysv/zapret /etc/init.d
|
||||
ln -fs /opt/zapret/init.d/openrc/zapret /etc/init.d
|
||||
rc-update add zapret
|
||||
|
||||
Запустить службу :
|
||||
@@ -1174,8 +1223,11 @@ install_easy.sh автоматизирует описанные выше руч
|
||||
Деинсталяция выполняется через uninstall_easy.sh
|
||||
|
||||
|
||||
Ручная установка на openwrt/LEDE
|
||||
--------------------------------
|
||||
Ручная установка на openwrt/LEDE 15.xx-21.xx
|
||||
--------------------------------------------
|
||||
|
||||
!!! Данная инструкция написана для систем, основанных на iptables+firewall3
|
||||
!!! В новых версиях openwrt переходит на nftables+firewall4, инструкция неприменима. Пользуйтесь install_easy.sh
|
||||
|
||||
Установить дополнительные пакеты :
|
||||
opkg update
|
||||
@@ -1283,10 +1335,10 @@ Cкрипт из /etc/hotplug.d/iface перезапустит демоны по
|
||||
|
||||
Посмотреть через iptables -nL, ip6tables -nL или через luci вкладку "firewall" появились ли нужные правила.
|
||||
|
||||
ЭКОНОМИЯ МЕСТА : если его мало, то можно оставить в директории zapret лишь подкаталог ipset, файл config и init.d/openwrt.
|
||||
ЭКОНОМИЯ МЕСТА : если его мало, то можно оставить в директории zapret лишь подкаталоги
|
||||
ipset, common, файл config, init.d/openwrt.
|
||||
Далее нужно создать подкаталоги с реально используемыми бинариками (ip2net, mdig, tpws, nfq)
|
||||
и скопировать туда из binaries рабочие executables.
|
||||
Рекомендуется оставить ip2net и mdig. Из tpws и nfq оставить лишь тот, что был выбран в config.
|
||||
|
||||
ЕСЛИ ВСЕ ПЛОХО С МЕСТОМ : откажитесь от работы со списком РКН. используйте только get_user.sh
|
||||
|
||||
|
||||
Reference in New Issue
Block a user