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