diff --git a/docs/readme.md b/docs/readme.md index 70d071b..2ea97fe 100644 --- a/docs/readme.md +++ b/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). ``` -@ ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. +@|$ ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. --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. ``` -@ ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. +@|$ ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. --debug=0|1|2|syslog|@ ; 0,1,2 = логирование на косоль : 0=тихо, 1(default)=подробно, 2=отладка. --debug-level=0|1|2 ; указать уровень логирования для syslog и @ @@ -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-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 --new\ ---filter-tcp=443 --split-tls=sni --disorder - +``` +TPWS_SOCKS_OPT=" +--filter-tcp=80 --methodeol --new +--filter-tcp=443 --split-tls=sni --disorder " +``` ***Включение стандартной опции tpws в прозрачном режиме***\ -TPWS_ENABLE=0 +`TPWS_ENABLE=0` ***Какие tcp порты следует перенаправлять на tpws***\ -TPWS_PORTS=80,443 +`TPWS_PORTS=80,443` ***Параметры tpws для прозрачного режима***\ -TPWS_OPT=\ ---filter-tcp=80 --methodeol --new\ ---filter-tcp=443 --split-tls=sni --disorder +``` +TPWS_OPT=" +--filter-tcp=80 --methodeol --new +--filter-tcp=443 --split-tls=sni --disorder " +``` ***Включение стандартной опции 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 --new\ ---filter-tcp=443 --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig --new\ ---filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 +***Параметры nfqws*** +``` +NFQWS_OPT=" +--filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-fooling=md5sig --new +--filter-tcp=443 --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig --new +--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 " +``` -\ ***Режим фильтрации хостов:*** ``` 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.