work on readme.md

This commit is contained in:
bol-van 2024-11-03 16:43:06 +03:00
parent 1144f9afdc
commit 88d7fd4088

View File

@ -6,7 +6,7 @@ ___
[![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/bol-van/zapret/tree/master/docs/README.en.md) [![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/bol-van/zapret/tree/master/docs/README.en.md)
[![ru](https://img.shields.io/badge/lang-ru-green.svg)](https://github.com/bol-van/zapret/tree/master/README.md) [![ru](https://img.shields.io/badge/lang-ru-green.svg)](https://github.com/bol-van/zapret/tree/master/README.md)
## Цель программного обеспечения ## Зачем это нужно
___ ___
Автономное средство противодействия DPI, которое не требует подключения каких-либо сторонних серверов. Может помочь Автономное средство противодействия DPI, которое не требует подключения каких-либо сторонних серверов. Может помочь
@ -137,7 +137,7 @@ DPI может ловить только первый http запрос, игн
Фильтр по mark нужен для отсечения от очереди пакетов, сгенерированных внутри nfqws. Если применяется фильтр по Фильтр по mark нужен для отсечения от очереди пакетов, сгенерированных внутри nfqws. Если применяется фильтр по
connbytes 1:6, то обязательно добавлять в iptables и фильтр по mark. Иначе возможно перепутывание порядка следования connbytes 1:6, то обязательно добавлять в iptables и фильтр по mark. Иначе возможно перепутывание порядка следования
пакетов, что приведет к неработоспособности метода. пакетов, что приведет к неработоспособности метода. Так же возможно зависание nfqws по deadlock.
Для некоторых атак на DPI требуется перенаправлять один или несколько входящих пакетов от соединения : Для некоторых атак на DPI требуется перенаправлять один или несколько входящих пакетов от соединения :
@ -215,7 +215,7 @@ ___
dvtws, собираемый из тех же исходников (см. bsd.txt). dvtws, собираемый из тех же исходников (см. bsd.txt).
``` ```
@<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. @<config_file>|$<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются.
--debug=0|1 ; 1=выводить отладочные сообщения --debug=0|1 ; 1=выводить отладочные сообщения
--daemon ; демонизировать прогу --daemon ; демонизировать прогу
@ -318,8 +318,8 @@ ___
выставлять state INVALID для пакетов с инвалидной суммой. Обычно в правилах iptables вставляется правило для дропа выставлять state INVALID для пакетов с инвалидной суммой. Обычно в правилах iptables вставляется правило для дропа
пакетов с состоянием INVALID в цепочке FORWARD. Совместное сочетание этих факторов приводит к непрохождению badsum пакетов с состоянием INVALID в цепочке FORWARD. Совместное сочетание этих факторов приводит к непрохождению badsum
через такой роутер. В openwrt из коробки `net.netfilter.nf_conntrack_checksum=0`, в других роутерах часто нет, и не через такой роутер. В openwrt из коробки `net.netfilter.nf_conntrack_checksum=0`, в других роутерах часто нет, и не
всегда это можно изменить. Чтобы nfqws мог работать через роутер, нужно на нем выставить указанное значение sysctl в всегда это можно изменить. Чтобы nfqws мог работать через роутер, нужно на нем выставить указанное значение sysctl в 0.
0. nfqws на самом роутере будет работать и без этой настройки, потому что чексумма локально созданных пакетов не nfqws на самом роутере будет работать и без этой настройки, потому что чексумма локально созданных пакетов не
проверяется никогда. Если роутер за другим NAT, например провайдерским, и он не пропускает invalid packets вы ничего проверяется никогда. Если роутер за другим NAT, например провайдерским, и он не пропускает invalid packets вы ничего
не сможете с этим сделать. Но обычно провайдеры все же пропускают badsum. На некоторых адаптерах/свитчах/драйверах не сможете с этим сделать. Но обычно провайдеры все же пропускают badsum. На некоторых адаптерах/свитчах/драйверах
принудительно включен rx-checksum offload, badsum пакеты отсекаются еще до получения в ОС. В этом случае если что-то и принудительно включен rx-checksum offload, badsum пакеты отсекаются еще до получения в ОС. В этом случае если что-то и
@ -709,7 +709,7 @@ ___
tpws - это transparent proxy. tpws - это transparent proxy.
``` ```
@<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. @<config_file>|$<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются.
--debug=0|1|2|syslog|@<filename> ; 0,1,2 = логирование на косоль : 0=тихо, 1(default)=подробно, 2=отладка. --debug=0|1|2|syslog|@<filename> ; 0,1,2 = логирование на косоль : 0=тихо, 1(default)=подробно, 2=отладка.
--debug-level=0|1|2 ; указать уровень логирования для syslog и @<filename> --debug-level=0|1|2 ; указать уровень логирования для syslog и @<filename>
@ -1135,17 +1135,18 @@ ___
Параметры `--dns-make-query` и `--dns-parse-query` позволяют провести ресолвинг одного домена через произвольный канал. Параметры `--dns-make-query` и `--dns-parse-query` позволяют провести ресолвинг одного домена через произвольный канал.
Например, следующим образом можно выполнить DoH запрос, используя лишь mdig и curl : Например, следующим образом можно выполнить DoH запрос, используя лишь mdig и curl :
`mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Content-Type: application/dns-message" https://cloudflare-dns.com/dns-query | mdig --dns-parse-query` ```
mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Content-Type: application/dns-message" https://cloudflare-dns.com/dns-query | mdig --dns-parse-query
```
## Фильтрация по именам доменов ## Фильтрация по именам доменов
___ ___
Альтернативой ipset является использование tpws или nfqws со списком доменов. Альтернативой ipset является использование tpws или nfqws со списком доменов.
Оба демона принимают неограниченное количество листов include (`--hostlist`) и exclude (`--hostlist-exclude`). Оба демона принимают неограниченное количество листов include (`--hostlist`) и exclude (`--hostlist-exclude`).
Все листы одного типа объединяются, и таким образом остаются только 2 листа. Прежде всего проверяются exclude листы. При вхождении в них происходит отказ от дурения.
Прежде всего проверяется exclude list. При вхождении в него происходит отказ от дурения. Далее при наличии include листов проверяется домен на вхождение в них. При невхождении в список отказ от дурения.
Далее при наличии include list проверяется домен на вхождение в него. При невхождении в список отказ от дурения. Если все include листы пустые, это приравнивается к отсутствию include листов. Ограничение перестает работать.
Пустой список приравнивается к его отсутствию.
В иных случаях происходит дурение. В иных случаях происходит дурение.
Нет ни одного списка - дурение всегда. Нет ни одного списка - дурение всегда.
Есть только exclude список - дурение всех, кроме. Есть только exclude список - дурение всех, кроме.
@ -1159,7 +1160,8 @@ ___
и 1 exclude список и 1 exclude список
`ipset/zapret-hosts-users-exclude.txt.gz` или `ipset/zapret-hosts-users-exclude.txt` `ipset/zapret-hosts-users-exclude.txt.gz` или `ipset/zapret-hosts-users-exclude.txt`
При режиме фильтрации `MODE_FILTER=hostlist` система запуска передает `nfqws` или `tpws` все листы, файлы которых присутствуют. При режимах фильтрации `MODE_FILTER=hostlist` или `MODE_FILTER=autohostlist` система запуска передает `nfqws` или `tpws` все листы, файлы которых присутствуют.
Передача происходит через замену маркеров `<HOSTLIST>` и `<HOSTLIST_NOAUTO>` на реальные параметры `--hostlist`, `--hostlist-exclude`, `--hostlist-auto`.
Если вдруг листы include присутствуют, но все они пустые, то работа аналогична отсутствию include листа. Если вдруг листы include присутствуют, но все они пустые, то работа аналогична отсутствию include листа.
Файл есть, но не смотря на это дурится все, кроме exclude. Файл есть, но не смотря на это дурится все, кроме exclude.
Если вам нужен именно такой режим - не обязательно удалять `zapret-hosts-users.txt`. Достаточно сделать его пустым. Если вам нужен именно такой режим - не обязательно удалять `zapret-hosts-users.txt`. Достаточно сделать его пустым.
@ -1348,6 +1350,7 @@ option headers`. Или сделать так, чтобы он не мог ра
**ПРИМЕРЫ БЛОКИРОВКИ ТОЛЬКО ПО ДОМЕНУ БЕЗ БЛОКА ПО IP** **ПРИМЕРЫ БЛОКИРОВКИ ТОЛЬКО ПО ДОМЕНУ БЕЗ БЛОКА ПО IP**
```
> testing iana.org on it's original\ > testing iana.org on it's original\
!!!!! AVAILABLE !!!!!\ !!!!! AVAILABLE !!!!!\
> testing rutracker.org on 192.0.43.8 (iana.org)\ > testing rutracker.org on 192.0.43.8 (iana.org)\
@ -1384,10 +1387,12 @@ curl: (35) Recv failure: Connection reset by peer\
curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure\ curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure\
> testing iana.org on 104.21.32.39 (rutracker.org)\ > testing iana.org on 104.21.32.39 (rutracker.org)\
curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure\ curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure\
```
**ПРИМЕР ПОЛНОГО IP БЛОКА ИЛИ БЛОКА TCP ПОРТА ПРИ ОТСУТСТВИИ БЛОКА ПО ДОМЕНУ**\ **ПРИМЕР ПОЛНОГО IP БЛОКА ИЛИ БЛОКА TCP ПОРТА ПРИ ОТСУТСТВИИ БЛОКА ПО ДОМЕНУ**
```
* port block tests ipv4 startmail.com:80\ * port block tests ipv4 startmail.com:80\
ncat -z -w 1 145.131.90.136 80\ ncat -z -w 1 145.131.90.136 80\
145.131.90.136 does not connect. netcat code 1\ 145.131.90.136 does not connect. netcat code 1\
@ -1410,6 +1415,7 @@ Location: https://www.iana.org/
curl: (28) Connection timed out after 2002 milliseconds curl: (28) Connection timed out after 2002 milliseconds
> testing iana.org on 145.131.90.152 (startmail.com) > testing iana.org on 145.131.90.152 (startmail.com)
curl: (28) Connection timed out after 2002 milliseconds curl: (28) Connection timed out after 2002 milliseconds
```
## Выбор параметров ## Выбор параметров
___ ___
@ -1421,13 +1427,13 @@ ___
По умолчанию на традиционных linux выбирается `nftables`, если установлен nft. По умолчанию на традиционных linux выбирается `nftables`, если установлен nft.
На openwrt по умолчанию выбирается `nftables` на новых версиях с firewall4. На openwrt по умолчанию выбирается `nftables` на новых версиях с firewall4.
**FWTYPE=iptables** `FWTYPE=iptables`
На `nftables` можно отключить стандартную схему перехвата трафика после NAT и перейти на перехват до NAT. На `nftables` можно отключить стандартную схему перехвата трафика после NAT и перейти на перехват до NAT.
Это сделает невозможным применение некоторых методов дурения на проходящем трафике как в случае с `iptables`. Это сделает невозможным применение некоторых методов дурения на проходящем трафике как в случае с `iptables`.
nfqws начнет получать адреса пакетов из локальной сети и отображать их в логах. nfqws начнет получать адреса пакетов из локальной сети и отображать их в логах.
**POSTNAT=0** `POSTNAT=0`
Существует 3 стандартных опции запуска, настраиваемых раздельно и независимо: `tpws-socks`, `tpws`, `nfqws`. Существует 3 стандартных опции запуска, настраиваемых раздельно и независимо: `tpws-socks`, `tpws`, `nfqws`.
Их можно использовать как по отдельности, так и вместе. Например, вам надо сделать комбинацию Их можно использовать как по отдельности, так и вместе. Например, вам надо сделать комбинацию
@ -1461,45 +1467,50 @@ nfqws начнет получать адреса пакетов из локал
Но если на другом профиле что-то будет добавлено, то этот профиль примет изменения автоматически. Но если на другом профиле что-то будет добавлено, то этот профиль примет изменения автоматически.
***Включение стандартной опции tpws в режиме socks***\ ***Включение стандартной опции tpws в режиме socks***\
TPWS_SOCKS_ENABLE=0 `TPWS_SOCKS_ENABLE=0`
***На каком порту будет слушать tpws socks. прослушивается только localhost и LAN***\ ***На каком порту будет слушать tpws socks. прослушивается только localhost и LAN***\
TPPORT_SOCKS=987 `TPPORT_SOCKS=987`
***Параметры tpws для режима socks*** ***Параметры tpws для режима socks***
TPWS_SOCKS_OPT=\ ```
--filter-tcp=80 --methodeol <HOSTLIST> --new\ TPWS_SOCKS_OPT="
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST> --filter-tcp=80 --methodeol <HOSTLIST> --new
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST>"
```
***Включение стандартной опции tpws в прозрачном режиме***\ ***Включение стандартной опции tpws в прозрачном режиме***\
TPWS_ENABLE=0 `TPWS_ENABLE=0`
***Какие tcp порты следует перенаправлять на tpws***\ ***Какие tcp порты следует перенаправлять на tpws***\
TPWS_PORTS=80,443 `TPWS_PORTS=80,443`
***Параметры tpws для прозрачного режима***\ ***Параметры tpws для прозрачного режима***\
TPWS_OPT=\ ```
--filter-tcp=80 --methodeol <HOSTLIST> --new\ TPWS_OPT="
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST> --filter-tcp=80 --methodeol <HOSTLIST> --new
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST>"
```
***Включение стандартной опции nfqws***\ ***Включение стандартной опции nfqws***\
NFQWS_ENABLE=0 `NFQWS_ENABLE=0`
***Какие tcp и udp порты следует перенаправлять на nfqws с использованием connbytes ограничителя*** ***Какие tcp и udp порты следует перенаправлять на nfqws с использованием connbytes ограничителя***
***connbytes позволяет из каждого соединения перенаправить только заданное количество начальных пакетов по каждому направлению - на вход и на выход*** connbytes позволяет из каждого соединения перенаправить только заданное количество начальных пакетов по каждому направлению - на вход и на выход.
Это более эффективная kernel-mode замена параметра nfqws `--dpi-desync-cutoff=nX`.
***Это более эффективная kernel-mode замена параметра nfqws `--dpi-desync-cutoff=nX`***\ ```
NFQWS_PORTS_TCP=80,443\ NFQWS_PORTS_TCP=80,443
NFQWS_PORTS_UDP=443 NFQWS_PORTS_UDP=443
```
\
***Сколько начальных входящих и исходящих пакетов нужно перенаправлять на nfqws по каждому направлению***\ ***Сколько начальных входящих и исходящих пакетов нужно перенаправлять на nfqws по каждому направлению***\
NFQWS_TCP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD))\ ```
NFQWS_TCP_PKT_IN=3\ NFQWS_TCP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD))
NFQWS_UDP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD))\ NFQWS_TCP_PKT_IN=3
NFQWS_UDP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD))
NFQWS_UDP_PKT_IN=0 NFQWS_UDP_PKT_IN=0
```
Есть трафик, исходящий сеанс для которого необходимо перенаправлять весь без ограничителей Есть трафик, исходящий сеанс для которого необходимо перенаправлять весь без ограничителей
типичное применение - поддержка http keepalives на stateless DPI типичное применение - поддержка http keepalives на stateless DPI
@ -1507,17 +1518,19 @@ NFQWS_UDP_PKT_IN=0
входящий трафик ограничивается по connbytes через параметры PKT_IN входящий трафик ограничивается по connbytes через параметры PKT_IN
задать порты для перенаправления на nfqws без connbytes ограничителя задать порты для перенаправления на nfqws без connbytes ограничителя
если указываете здесь какие-то порты, желательно их убрать из версии с connbytes ограничителем если указываете здесь какие-то порты, желательно их убрать из версии с connbytes ограничителем
```
NFQWS_PORTS_TCP_KEEPALIVE=80 NFQWS_PORTS_TCP_KEEPALIVE=80
NFQWS_PORTS_UDP_KEEPALIVE= NFQWS_PORTS_UDP_KEEPALIVE=
```
\ ***Параметры nfqws***
***Параметры nfqws***\ ```
NFQWS_OPT=\ NFQWS_OPT="
--filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-fooling=md5sig <HOSTLIST> --new\ --filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
--filter-tcp=443 --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig <HOSTLIST> --new\ --filter-tcp=443 --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 <HOSTLIST_NOAUTO> --filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 <HOSTLIST_NOAUTO>"
```
\
***Режим фильтрации хостов:*** ***Режим фильтрации хостов:***
``` ```
none - применять дурение ко всем хостам none - применять дурение ко всем хостам
@ -1525,9 +1538,8 @@ ipset - ограничить дурение ipset-ом zapret/zapret6
hostlist - ограничить дурение списком хостов из файла hostlist - ограничить дурение списком хостов из файла
autohostlist - режим hostlist + распознавание блокировок и ведение автоматического листа autohostlist - режим hostlist + распознавание блокировок и ведение автоматического листа
``` ```
MODE_FILTER=none `MODE_FILTER=none`
\
***Настройка системы управления выборочным traffic offload (только если поддерживается)*** ***Настройка системы управления выборочным traffic offload (только если поддерживается)***
``` ```
donttouch: выборочное управление отключено, используется системная настройка, простой инсталлятор выключает системную настройку, если она не совместима с выбранным режимом donttouch: выборочное управление отключено, используется системная настройка, простой инсталлятор выключает системную настройку, если она не совместима с выбранным режимом
@ -1535,7 +1547,7 @@ none: выборочное управление отключено, просто
software: выборочное управление включено в режиме software, простой инсталлятор выключает системную настройку software: выборочное управление включено в режиме software, простой инсталлятор выключает системную настройку
hardware: выборочное управление включено в режиме hardware, простой инсталлятор выключает системную настройку hardware: выборочное управление включено в режиме hardware, простой инсталлятор выключает системную настройку
``` ```
FLOWOFFLOAD=donttouch `FLOWOFFLOAD=donttouch`
Параметр GETLIST указывает инсталлятору `install_easy.sh` какой скрипт дергать Параметр GETLIST указывает инсталлятору `install_easy.sh` какой скрипт дергать
для обновления списка заблокированных ip или хостов. для обновления списка заблокированных ip или хостов.
@ -1544,30 +1556,32 @@ FLOWOFFLOAD=donttouch
Если не нужно, то параметр следует закомментировать. Если не нужно, то параметр следует закомментировать.
Можно индивидуально отключить ipv4 или ipv6. Если параметр закомментирован или не равен "1", Можно индивидуально отключить ipv4 или ipv6. Если параметр закомментирован или не равен "1",
использование протокола разрешено.\ использование протокола разрешено.
DISABLE_IPV4=1\ ```
DISABLE_IPV4=1
DISABLE_IPV6=1 DISABLE_IPV6=1
```
Количество потоков для многопоточного DNS ресолвера mdig (1..100). Количество потоков для многопоточного DNS ресолвера mdig (1..100).
Чем их больше, тем быстрее, но не обидится ли на долбежку ваш DNS сервер?\ Чем их больше, тем быстрее, но не обидится ли на долбежку ваш DNS сервер?\
MDIG_THREADS=30 `MDIG_THREADS=30`
Место для хранения временных файлов. При скачивании огромных реестров в `/tmp` места может не хватить. Место для хранения временных файлов. При скачивании огромных реестров в `/tmp` места может не хватить.
Если файловая система на нормальном носителе (не встроенная память роутера), то можно Если файловая система на нормальном носителе (не встроенная память роутера), то можно
указать место на флэшке или диске.\ указать место на флэшке или диске.
TMPDIR=/opt/zapret/tmp `TMPDIR=/opt/zapret/tmp`
\
***Опции для создания ipset-ов и nfset-ов*** ***Опции для создания ipset-ов и nfset-ов***
SET_MAXELEM=262144\ ```
SET_MAXELEM=262144
IPSET_OPT="hashsize 262144 maxelem 2097152" IPSET_OPT="hashsize 262144 maxelem 2097152"
```
Хук, позволяющий внести ip адреса динамически. $1 = имя таблицы\ Хук, позволяющий внести ip адреса динамически. $1 = имя таблицы\
Адреса выводятся в stdout. В случае nfset автоматически решается проблема возможного пересечения интервалов.\ Адреса выводятся в stdout. В случае nfset автоматически решается проблема возможного пересечения интервалов.\
IPSET_HOOK="/etc/zapret.ipset.hook" `IPSET_HOOK="/etc/zapret.ipset.hook"`
\
***ПРО РУГАНЬ в dmesg по поводу нехватки памяти.*** ***ПРО РУГАНЬ в dmesg по поводу нехватки памяти.***
Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный `ipset` Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный `ipset`
@ -1577,69 +1591,72 @@ IPSET_HOOK="/etc/zapret.ipset.hook"
Это лечится увеличением `hashsize`. Но чем больше `hashsize`, тем больше занимает `ipset` в памяти. Это лечится увеличением `hashsize`. Но чем больше `hashsize`, тем больше занимает `ipset` в памяти.
Задавать слишком большой `hashsize` для недостаточно больших списков нецелесообразно. Задавать слишком большой `hashsize` для недостаточно больших списков нецелесообразно.
\
***Опции для вызова ip2net. Отдельно для листов ipv4 и ipv6.*** ***Опции для вызова ip2net. Отдельно для листов ipv4 и ipv6.***
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"\ ```
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5" IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5"
```
\
***Настройка режима autohostlist.*** ***Настройка режима autohostlist.***
При увеличении AUTOHOSTLIST_RETRANS_THRESHOLD и использовании nfqws следует пересмотреть значения параметров При увеличении AUTOHOSTLIST_RETRANS_THRESHOLD и использовании nfqws следует пересмотреть значения параметров
NFQWS_TCP_PKT_OUT и NFQWS_UDP_PKT_OUT. Все ретрансмиссии должны быть получены nfqws, иначе триггер "зависание запроса" не сработает. NFQWS_TCP_PKT_OUT и NFQWS_UDP_PKT_OUT. Все ретрансмиссии должны быть получены nfqws, иначе триггер "зависание запроса" не сработает.
AUTOHOSTLIST_RETRANS_THRESHOLD=3\ ```
AUTOHOSTLIST_FAIL_THRESHOLD=3\ AUTOHOSTLIST_RETRANS_THRESHOLD=3
AUTOHOSTLIST_FAIL_TIME=60\ AUTOHOSTLIST_FAIL_THRESHOLD=3
AUTOHOSTLIST_FAIL_TIME=60
AUTOHOSTLIST_DEBUG=0 AUTOHOSTLIST_DEBUG=0
```
\
***Включить или выключить сжатие больших листов в скриптах ipset/\*.sh.*** ***Включить или выключить сжатие больших листов в скриптах ipset/\*.sh.***
(По умолчанию включено.)\ `GZIP_LISTS=1`
\
GZIP_LISTS=1
\
***Команда для перезагрузки ip таблиц фаервола.*** ***Команда для перезагрузки ip таблиц фаервола.***
Если не указано или пустое, выбирается автоматически ipset или ipfw при их наличии. Если не указано или пустое, выбирается автоматически ipset или ipfw при их наличии.
На BSD системах с PF нет автоматической загрузки. Там нужно указать команду явно: `pfctl -f /etc/pf.conf` На BSD системах с PF нет автоматической загрузки. Там нужно указать команду явно: `pfctl -f /etc/pf.conf`
На более новых pfctl (есть в новых FreeBSD, нет в OpenBSD 6.8) можно дать команду загрузки только таблиц: `pfctl -Tl -f /etc/pf.conf` На более новых pfctl (есть в новых FreeBSD, нет в OpenBSD 6.8) можно дать команду загрузки только таблиц: `pfctl -Tl -f /etc/pf.conf`
"-" означает отключение загрузки листов даже при наличии поддерживаемого backend.\ "-" означает отключение загрузки листов даже при наличии поддерживаемого backend.
LISTS_RELOAD="pfctl -f /etc/pf.conf"\ ```
LISTS_RELOAD="pfctl -f /etc/pf.conf"
LISTS_RELOAD=- LISTS_RELOAD=-
```
В openwrt существует сеть по умолчанию 'lan'. Только трафик с этой сети будет перенаправлен на tpws. В openwrt существует сеть по умолчанию 'lan'. Только трафик с этой сети будет перенаправлен на tpws.
Но возможно задать другие сети или список сетей:\ Но возможно задать другие сети или список сетей:\
OPENWRT_LAN="lan lan2 lan3" `OPENWRT_LAN="lan lan2 lan3"`
В openwrt в качестве wan берутся интерфейсы, имеющие default route. Отдельно для ipv4 и ipv6. В openwrt в качестве wan берутся интерфейсы, имеющие default route. Отдельно для ipv4 и ipv6.
Это можно переопределить:\ Это можно переопределить:
OPENWRT_WAN4="wan4 vpn"\ ```
OPENWRT_WAN4="wan4 vpn"
OPENWRT_WAN6="wan6 vpn6" OPENWRT_WAN6="wan6 vpn6"
```
Параметр INIT_APPLY_FW=1 разрешает init скрипту самостоятельно применять правила iptables.\ Параметр INIT_APPLY_FW=1 разрешает init скрипту самостоятельно применять правила iptables.\
При иных значениях или если параметр закомментирован, правила применены не будут.\ При иных значениях или если параметр закомментирован, правила применены не будут.\
Это полезно, если у вас есть система управления фаерволом, в настройки которой и следует прикрутить правила.\ Это полезно, если у вас есть система управления фаерволом, в настройки которой и следует прикрутить правила.\
На openwrt неприменимо при использовании firewall3+iptables. На openwrt неприменимо при использовании firewall3+iptables.
\
***Следующие настройки не актуальны для openwrt:*** ***Следующие настройки не актуальны для openwrt:***
Если ваша система работает как роутер, то нужно вписать названия внутренних и внешних интерфейсов:\ Если ваша система работает как роутер, то нужно вписать названия внутренних и внешних интерфейсов:
IFACE_LAN=eth0\ ```
IFACE_WAN=eth1\ IFACE_LAN=eth0
IFACE_WAN6="henet ipsec0"\ IFACE_WAN=eth1
IFACE_WAN6="henet ipsec0"
```
Несколько интерфейсов могут быть вписаны через пробел. Несколько интерфейсов могут быть вписаны через пробел.
Если IFACE_WAN6 не задан, то берется значение IFACE_WAN. Если IFACE_WAN6 не задан, то берется значение IFACE_WAN.
**ВАЖНО**: настройка маршрутизации, маскарада и т.д. не входит в задачу zapret. **ВАЖНО**: настройка маршрутизации, маскарада и т.д. не входит в задачу zapret.
Включаются только режимы, обеспечивающие перехват транзитного трафика. Включаются только режимы, обеспечивающие перехват транзитного трафика.
Возможно определить несколько интерфейсов следующим образом: Возможно определить несколько интерфейсов следующим образом:
\
IFACE_LAN="eth0 eth1 eth2" `IFACE_LAN="eth0 eth1 eth2"`
## Прикручивание к системе управления фаерволом или своей системе запуска ## Прикручивание к системе управления фаерволом или своей системе запуска
___ ___
@ -1650,15 +1667,19 @@ ___
_Следующие вызовы позволяют применить или убрать правила iptables отдельно:_ _Следующие вызовы позволяют применить или убрать правила 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 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 /opt/zapret/init.d/sysv/zapret restart_daemons
```
`nftables` сводят практически на нет конфликты между разными системами управления, поскольку позволяют `nftables` сводят практически на нет конфликты между разными системами управления, поскольку позволяют
использовать независимые таблицы и хуки. Используется отдельная nf-таблица "zapret". использовать независимые таблицы и хуки. Используется отдельная nf-таблица "zapret".
@ -1668,23 +1689,24 @@ _Для `nftables` предусмотрено несколько дополни
Посмотреть set-ы интерфейсов, относящихся к lan, wan и wan6. По ним идет завертывание трафика. Посмотреть set-ы интерфейсов, относящихся к lan, wan и wan6. По ним идет завертывание трафика.
А так же таблицу flow table с именами интерфейсов ingress hook.\ А так же таблицу flow table с именами интерфейсов ingress hook.\
/opt/zapret/init.d/sysv/zapret list_ifsets `/opt/zapret/init.d/sysv/zapret list_ifsets`
Обновить set-ы интерфейсов, относящихся к lan, wan и wan6. Обновить set-ы интерфейсов, относящихся к lan, wan и wan6.
Для традиционных linux список интерфейсов берется из переменных конфига IFACE_LAN, IFACE_WAN. Для традиционных linux список интерфейсов берется из переменных конфига IFACE_LAN, IFACE_WAN.
Для openwrt определяется автоматически. Множество lanif может быть расширено параметром OPENWRT_LAN. Для openwrt определяется автоматически. Множество lanif может быть расширено параметром OPENWRT_LAN.
Все интерфейсы lan и wan так же добавляются в ingress hook от flow table.\ Все интерфейсы lan и wan так же добавляются в ingress hook от flow table.\
/opt/zapret/init.d/sysv/zapret reload_ifsets `/opt/zapret/init.d/sysv/zapret reload_ifsets`
Просмотр таблицы без содержимого set-ов. Вызывает `nft -t list table inet zapret`\ Просмотр таблицы без содержимого set-ов. Вызывает `nft -t list table inet zapret`\
/opt/zapret/init.d/sysv/zapret list_table `/opt/zapret/init.d/sysv/zapret list_table`
_Так же возможно прицепиться своим скриптом к любой стадии применения и снятия фаервола со стороны zapret скриптов:_ _Так же возможно прицепиться своим скриптом к любой стадии применения и снятия фаервола со стороны zapret скриптов:_
```
INIT_FW_PRE_UP_HOOK="/etc/firewall.zapret.hook.pre_up"\ INIT_FW_PRE_UP_HOOK="/etc/firewall.zapret.hook.pre_up"
INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up"\ INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up"
INIT_FW_PRE_DOWN_HOOK="/etc/firewall.zapret.hook.pre_down"\ INIT_FW_PRE_DOWN_HOOK="/etc/firewall.zapret.hook.pre_down"
INIT_FW_POST_DOWN_HOOK="/etc/firewall.zapret.hook.post_down" INIT_FW_POST_DOWN_HOOK="/etc/firewall.zapret.hook.post_down"
```
Эти настройки доступны в config. Эти настройки доступны в config.
Может быть полезно, если вам нужно использовать nftables set-ы, например `ipban`/`ipban6`. Может быть полезно, если вам нужно использовать nftables set-ы, например `ipban`/`ipban6`.
@ -1706,16 +1728,20 @@ custom скрипты - это маленькие shell программы, уп
Рядом имеется `custom.d.examples`. Это готовые скрипты, которые можно копировать в `custom.d`. Рядом имеется `custom.d.examples`. Это готовые скрипты, которые можно копировать в `custom.d`.
Их можно взять за основу для написания собственных. Их можно взять за основу для написания собственных.
***Для linux пишется код в функции***\ ***Для linux пишется код в функции***
zapret_custom_daemons\ ```
zapret_custom_firewall\ zapret_custom_daemons
zapret_custom_firewall_nft\ zapret_custom_firewall
zapret_custom_firewall_nft
zapret_custom_firewall_nft_flush zapret_custom_firewall_nft_flush
```
***Для macos***\ ***Для macos***
zapret_custom_daemons\ ```
zapret_custom_firewall_v4\ zapret_custom_daemons
zapret_custom_firewall_v4
zapret_custom_firewall_v6 zapret_custom_firewall_v6
```
zapret_custom_daemons поднимает демоны `nfqws`/`tpws` в нужном вам количестве и с нужными вам параметрами. zapret_custom_daemons поднимает демоны `nfqws`/`tpws` в нужном вам количестве и с нужными вам параметрами.
Для систем традиционного linux (sysv) и MacOS в первом параметре передается код операции: 1 = запуск, 0 = останов. Для систем традиционного linux (sysv) и MacOS в первом параметре передается код операции: 1 = запуск, 0 = останов.
@ -1731,11 +1757,11 @@ zapret_custom_firewall_nft поднимает правила nftables.
Их нужно подчистить в zapret_custom_firewall_nft_flush. Их нужно подчистить в zapret_custom_firewall_nft_flush.
Если set-ов и собственных цепочек у вас нет, функцию можно не определять или оставить пустой. Если set-ов и собственных цепочек у вас нет, функцию можно не определять или оставить пустой.
***Если вам не нужны iptables или nftables - можете не писать соответствующую функцию.***\ Если вам не нужны iptables или nftables - можете не писать соответствующую функцию.
В linux можно использовать локальные переменные FW_EXTRA_PRE и FW_EXTRA_POST.\ В linux можно использовать локальные переменные `FW_EXTRA_PRE` и `FW_EXTRA_POST`.\
FW_EXTRA_PRE добавляет код к правилам ip/nf tables до кода, генерируемого функциями-хелперами.\ `FW_EXTRA_PRE` добавляет код к правилам ip/nf tables до кода, генерируемого функциями-хелперами.\
FW_EXTRA_POST добавляет код после. `FW_EXTRA_POST` добавляет код после.
В linux функции-хелперы добавляют правило в начало цепочек, то есть перед уже имеющимися. В linux функции-хелперы добавляют правило в начало цепочек, то есть перед уже имеющимися.
Поэтому специализации должны идти после более общих вариантов. Поэтому специализации должны идти после более общих вариантов.
@ -1743,7 +1769,7 @@ FW_EXTRA_POST добавляет код после.
По этой же причине фаервол в Linux сначала применяется в стандартном режиме, потом custom, По этой же причине фаервол в Linux сначала применяется в стандартном режиме, потом custom,
а в MacOS сначала custom, потом стандартный режим. а в MacOS сначала custom, потом стандартный режим.
В macos `firewall-функции` ничего сами никуда не заносят. Их задача - лишь выдать текст в stdout, В macos firewall-функции ничего сами никуда не заносят. Их задача - лишь выдать текст в stdout,
содержащий правила для pf-якоря. Остальное сделает обертка. содержащий правила для pf-якоря. Остальное сделает обертка.
Особо обратите внимание на номер демона в функциях `run_daemon` и `do_daemon`, номера портов `tpws` Особо обратите внимание на номер демона в функциях `run_daemon` и `do_daemon`, номера портов `tpws`
@ -1819,7 +1845,7 @@ ___
Требуется около 120-200 кб на диске. Придется отказаться от всего, кроме `tpws`. Требуется около 120-200 кб на диске. Придется отказаться от всего, кроме `tpws`.
* Инструкция для openwrt 22 и выше с nftables. **Инструкция для openwrt 22 и выше с nftables**
Никаких зависимостей устанавливать не нужно. Никаких зависимостей устанавливать не нужно.
@ -1841,7 +1867,7 @@ ___
3) `rm -f /etc/nftables.d/90-tpws.nft /etc/firewall.user /etc/init.d/tpws /usr/bin/tpws` 3) `rm -f /etc/nftables.d/90-tpws.nft /etc/firewall.user /etc/init.d/tpws /usr/bin/tpws`
4) `fw4 restart` 4) `fw4 restart`
_Инструкция для openwrt 21 и ниже с iptables._ **Инструкция для openwrt 21 и ниже с iptables**
***Установите зависимости:*** ***Установите зависимости:***
1) `opkg update` 1) `opkg update`
@ -1943,9 +1969,9 @@ chroot /data/linux
Далее качаем zapret в `/opt/zapret`. Обычные действия с `install_prereq.sh`, `install_bin.sh`, `blockcheck.sh`. Далее качаем zapret в `/opt/zapret`. Обычные действия с `install_prereq.sh`, `install_bin.sh`, `blockcheck.sh`.
Учтите, что стратегии обхода сотового оператора и домашнего wifi вероятно будут разные. Учтите, что стратегии обхода сотового оператора и домашнего wifi вероятно будут разные.
Выделить сотового оператора легко через параметр iptables -o <имя интерфейса>. Имя может быть, например, ccmni0. Выделить сотового оператора легко через параметр iptables `-o <имя интерфейса>`. Имя может быть, например, `ccmni0`.
Его легко увидеть через `ifconfig`. Его легко увидеть через `ifconfig`.
Wifi сеть - обычно wlan0. Wifi сеть - обычно `wlan0`.
Переключать blockcheck между оператором и wifi можно вместе со всем инетом - включив или выключив wifi. Переключать blockcheck между оператором и wifi можно вместе со всем инетом - включив или выключив wifi.
Если найдете стратегию для wifi и впишите ее в автостарт, то при подключении к другому wifi Если найдете стратегию для wifi и впишите ее в автостарт, то при подключении к другому wifi
@ -1985,9 +2011,11 @@ connbytes придется опускать, поскольку модуля в
**ПРЕДУПРЕЖДЕНИЕ.**\ **ПРЕДУПРЕЖДЕНИЕ.**\
На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам. На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам.
Выглядит это так, если запускать curl с самого модема:\ Выглядит это так, если запускать curl с самого модема:
curl www.ru\ ```
curl: (7) Failed to connect to www.ru port 80: Host is unreachable\ curl www.ru
curl: (7) Failed to connect to www.ru port 80: Host is unreachable
```
Возникает ошибка сокета EHOSTUNREACH (errno -113). То же самое видно в tpws. Возникает ошибка сокета EHOSTUNREACH (errno -113). То же самое видно в tpws.
В броузере не подгружаются части веб страниц, картинки, стили. В броузере не подгружаются части веб страниц, картинки, стили.
В tcpdump на внешнем интерфейсе eth_x виден только единственный и безответный SYN пакет, без сообщений ICMP. В tcpdump на внешнем интерфейсе eth_x виден только единственный и безответный SYN пакет, без сообщений ICMP.
@ -2116,7 +2144,7 @@ vpn трафик или применить другие типы VPN, более
не могут, или покориться системе. не могут, или покориться системе.
VPS можно прибрести в множестве мест. Существуют специализированные на поиске предложений VPS порталы.\ VPS можно прибрести в множестве мест. Существуют специализированные на поиске предложений VPS порталы.\
Например, вот этот: https://vps.today/\ Например, [вот этот](https://vps.today).
Для персонального VPN сервера обычно достаточно самой минимальной конфигурации, но с безлимитным трафиком или Для персонального VPN сервера обычно достаточно самой минимальной конфигурации, но с безлимитным трафиком или
с большим лимитом по трафику (терабайты). Важен и тип VPS. Openvz подойдет для openvpn, но с большим лимитом по трафику (терабайты). Важен и тип VPS. Openvz подойдет для openvpn, но
вы не поднимете на нем wireguard, ipsec, то есть все, что требует kernel mode. вы не поднимете на нем wireguard, ipsec, то есть все, что требует kernel mode.