doc: fix migrating to .md. iter 1

This commit is contained in:
UnkwUsr 2024-08-05 03:28:49 +03:00
parent 1f7a3fc139
commit f00474ed12

View File

@ -53,6 +53,7 @@ For english version refer to docs/readme.eng.txt
Существует и более продвинутая магия, направленная на преодоление DPI на пакетном уровне. Существует и более продвинутая магия, направленная на преодоление DPI на пакетном уровне.
Подробнее про DPI : Подробнее про DPI :
https://habr.com/ru/post/335436 https://habr.com/ru/post/335436
https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
@ -94,13 +95,19 @@ For english version refer to docs/readme.eng.txt
Для перенаправления tcp соединения на transparent proxy используются команды следующего вида : Для перенаправления tcp соединения на transparent proxy используются команды следующего вида :
проходящий трафик : проходящий трафик :
```
iptables -t nat -I PREROUTING -i <внутренний_интерфейс> -p tcp --dport 80 -j DNAT --to 127.0.0.127:988 iptables -t nat -I PREROUTING -i <внутренний_интерфейс> -p tcp --dport 80 -j DNAT --to 127.0.0.127:988
```
исходящий трафик : исходящий трафик :
```
iptables -t nat -I OUTPUT -o <внешний_интерфейс> -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to 127.0.0.127:988 iptables -t nat -I OUTPUT -o <внешний_интерфейс> -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to 127.0.0.127:988
```
DNAT на localhost работает в цепочке OUTPUT, но не работает в цепочке PREROUTING без включения параметра route_localnet : DNAT на localhost работает в цепочке OUTPUT, но не работает в цепочке PREROUTING без включения параметра route_localnet :
```
sysctl -w net.ipv4.conf.<внутренний_интерфейс>.route_localnet=1 sysctl -w net.ipv4.conf.<внутренний_интерфейс>.route_localnet=1
```
Можно использовать "-j REDIRECT --to-port 988" вместо DNAT , однако в этом случае процесс transparent proxy Можно использовать "-j REDIRECT --to-port 988" вместо DNAT , однако в этом случае процесс transparent proxy
должен слушать на ip адресе входящего интерфейса или на всех адресах. Слушать на всех - не есть хорошо должен слушать на ip адресе входящего интерфейса или на всех адресах. Слушать на всех - не есть хорошо
@ -111,8 +118,10 @@ sysctl -w net.ipv4.conf.<внутренний_интерфейс>.route_localnet
средствами iptables запретить входящие на 127.0.0.1 не с интерфейса lo, либо повесить tpws на любой другой IP из средствами iptables запретить входящие на 127.0.0.1 не с интерфейса lo, либо повесить tpws на любой другой IP из
из 127.0.0.0/8, например на 127.0.0.127, и разрешить входящие не с lo только на этот IP. из 127.0.0.0/8, например на 127.0.0.127, и разрешить входящие не с lo только на этот IP.
```
iptables -A INPUT ! -i lo -d 127.0.0.127 -j ACCEPT iptables -A INPUT ! -i lo -d 127.0.0.127 -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
```
Фильтр по owner необходим для исключения рекурсивного перенаправления соединений от самого tpws. Фильтр по owner необходим для исключения рекурсивного перенаправления соединений от самого tpws.
tpws запускается под пользователем "tpws", для него задается исключающее правило. tpws запускается под пользователем "tpws", для него задается исключающее правило.
@ -125,18 +134,24 @@ transparent proxy отличается от socks именно тем, что в
Для перенаправления на очередь NFQUEUE исходящего и проходящего в сторону внешнего интерфейса трафика используются Для перенаправления на очередь NFQUEUE исходящего и проходящего в сторону внешнего интерфейса трафика используются
команды следующего вида : команды следующего вида :
```
iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -j NFQUEUE --queue-num 200 --queue-bypass
```
Чтобы не трогать трафик на незаблокированные адреса, можно взять список заблокированных хостов, заресолвить его Чтобы не трогать трафик на незаблокированные адреса, можно взять список заблокированных хостов, заресолвить его
в IP адреса и загнать в ipset zapret, затем добавить фильтр в команду : в IP адреса и загнать в ipset zapret, затем добавить фильтр в команду :
```
iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass
```
DPI может ловить только первый http запрос, игнорируя последующие запросы в keep-alive сессии. DPI может ловить только первый http запрос, игнорируя последующие запросы в keep-alive сессии.
Тогда можем уменьшить нагрузку на проц, отказавшись от процессинга ненужных пакетов. Тогда можем уменьшить нагрузку на проц, отказавшись от процессинга ненужных пакетов.
```
iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass
```
Фильтр по mark нужен для отсечения от очереди пакетов, сгенерированных внутри nfqws. Фильтр по mark нужен для отсечения от очереди пакетов, сгенерированных внутри nfqws.
Если применяется фильтр по connbytes 1:6, то обязательно добавлять в iptables и фильтр по mark. Иначе возможно Если применяется фильтр по connbytes 1:6, то обязательно добавлять в iptables и фильтр по mark. Иначе возможно
@ -144,7 +159,9 @@ iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp
Для некоторых атак на DPI требуется перенаправлять один или несколько входящих пакетов от соединения : Для некоторых атак на DPI требуется перенаправлять один или несколько входящих пакетов от соединения :
```
iptables -t mangle -I PREROUTING -i <внешний_интерфейс> -p tcp --sport 80 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:6 -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I PREROUTING -i <внешний_интерфейс> -p tcp --sport 80 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:6 -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass
```
Получаемые пакеты будут фильтровться по входящему интерфейсу, порту и IP источника, то есть наоборот прямому правилу. Получаемые пакеты будут фильтровться по входящему интерфейсу, порту и IP источника, то есть наоборот прямому правилу.
@ -173,7 +190,9 @@ openwrt не предусматривает выборочного управл
ip6tables работают почти точно так же, как и ipv4, но есть ряд важных нюансов. ip6tables работают почти точно так же, как и ipv4, но есть ряд важных нюансов.
В DNAT следует брать адрес --to в квадратные скобки. Например : В DNAT следует брать адрес --to в квадратные скобки. Например :
```
ip6tables -t nat -I OUTPUT -o <внешний_интерфейс> -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to [::1]:988 ip6tables -t nat -I OUTPUT -o <внешний_интерфейс> -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to [::1]:988
```
Параметра route_localnet не существует для ipv6. Параметра route_localnet не существует для ipv6.
DNAT на localhost (::1) возможен только в цепочке OUTPUT. DNAT на localhost (::1) возможен только в цепочке OUTPUT.
@ -225,6 +244,7 @@ nfqws
Эта программа - модификатор пакетов и обработчик очереди NFQUEUE. Эта программа - модификатор пакетов и обработчик очереди NFQUEUE.
Для BSD систем существует адаптированный вариант - dvtws, собираемый из тех же исходников (см. bsd.txt). Для BSD систем существует адаптированный вариант - dvtws, собираемый из тех же исходников (см. bsd.txt).
```
--debug=0|1 ; 1=выводить отладочные сообщения --debug=0|1 ; 1=выводить отладочные сообщения
--daemon ; демонизировать прогу --daemon ; демонизировать прогу
--pidfile=<file> ; сохранить PID в файл --pidfile=<file> ; сохранить PID в файл
@ -276,6 +296,7 @@ nfqws
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) --hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3) --hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. --hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
```
Параметры манипуляции могут сочетаться в любых комбинациях. Параметры манипуляции могут сочетаться в любых комбинациях.
@ -283,6 +304,7 @@ nfqws
Функции сплита выполняются в рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize. Функции сплита выполняются в рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
АТАКА ДЕСИНХРОНИЗАЦИИ DPI АТАКА ДЕСИНХРОНИЗАЦИИ DPI
Суть ее в следующем. После выполнения tcp 3-way handshake идет первый пакет с данными от клиента. Суть ее в следующем. После выполнения tcp 3-way handshake идет первый пакет с данными от клиента.
Там обычно "GET / ..." или TLS ClientHello. Мы дропаем этот пакет, заменяя чем-то другим. Там обычно "GET / ..." или TLS ClientHello. Мы дропаем этот пакет, заменяя чем-то другим.
Это может быть поддельная версия с безобидным, но валидным запросом http или https (вариант fake), Это может быть поддельная версия с безобидным, но валидным запросом http или https (вариант fake),
@ -436,13 +458,17 @@ DPI может отстать от потока, если ClientHello его у
iptables для задействования атаки на первый пакет данных : iptables для задействования атаки на первый пакет данных :
```
iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
```
Этот вариант применяем, когда DPI не следит за всеми запросами http внутри keep-alive сессии. Этот вариант применяем, когда DPI не следит за всеми запросами http внутри keep-alive сессии.
Если следит, направляем только первый пакет от https и все пакеты от http : Если следит, направляем только первый пакет от https и все пакеты от http :
```
iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp --dport 80 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
```
mark нужен, чтобы сгенерированный поддельный пакет не попал опять к нам на обработку. nfqws выставляет fwmark при его отсылке. mark нужен, чтобы сгенерированный поддельный пакет не попал опять к нам на обработку. nfqws выставляет fwmark при его отсылке.
хотя nfqws способен самостоятельно различать помеченные пакеты, фильтр в iptables по mark нужен при использовании connbytes, хотя nfqws способен самостоятельно различать помеченные пакеты, фильтр в iptables по mark нужен при использовании connbytes,
@ -453,12 +479,13 @@ mark нужен, чтобы сгенерированный поддельный
Но лучше его все же оставить для увеличения скорости. Но лучше его все же оставить для увеличения скорости.
Почему --connbytes 1:6 : Почему --connbytes 1:6 :
1 - для работы методов десинхронизации 0-й фазы и wssize * 1 - для работы методов десинхронизации 0-й фазы и wssize
2 - иногда данные идут в 3-м пакете 3-way handshake * 2 - иногда данные идут в 3-м пакете 3-way handshake
3 - стандартная ситуация приема одного пакета запроса * 3 - стандартная ситуация приема одного пакета запроса
4-6 - на случай ретрансмиссии или запроса длиной в несколько пакетов (TLSClientHello с kyber, например) * 4-6 - на случай ретрансмиссии или запроса длиной в несколько пакетов (TLSClientHello с kyber, например)
КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ
В параметре dpi-desync можно указать до 3 режимов через запятую. В параметре dpi-desync можно указать до 3 режимов через запятую.
0 фаза предполагает работу на этапе установления соединения. Может быть synack или syndata. 0 фаза предполагает работу на этапе установления соединения. Может быть synack или syndata.
На 0 фазу не действует фильтр по hostlist. На 0 фазу не действует фильтр по hostlist.
@ -467,6 +494,7 @@ mark нужен, чтобы сгенерированный поддельный
Может быть полезно, когда у провайдера стоит не один DPI. Может быть полезно, когда у провайдера стоит не один DPI.
РЕЖИМ SYNACK РЕЖИМ SYNACK
В документации по geneva это называется "TCB turnaround". Попытка ввести DPI в заблуждение относительно В документации по geneva это называется "TCB turnaround". Попытка ввести DPI в заблуждение относительно
ролей клиента и сервера. ролей клиента и сервера.
!!! Поскольку режим нарушает работу NAT, техника может сработать только если между атакующим устройством !!! Поскольку режим нарушает работу NAT, техника может сработать только если между атакующим устройством
@ -475,31 +503,38 @@ mark нужен, чтобы сгенерированный поддельный
дропающее инвалидные пакеты в цепочке OUTPUT. Например : -A OUTPUT -m state --state INVALID -j DROP дропающее инвалидные пакеты в цепочке OUTPUT. Например : -A OUTPUT -m state --state INVALID -j DROP
В openwrt можно отключить drop INVALID в OUTPUT и FORWARD через опцию в /etc/config/firewall : В openwrt можно отключить drop INVALID в OUTPUT и FORWARD через опцию в /etc/config/firewall :
```
config zone config zone
option name 'wan' option name 'wan'
......... .........
option masq_allow_invalid '1' option masq_allow_invalid '1'
```
К сожалению, отключить только в OUTPUT таким образом нельзя. Но можно сделать иначе. Вписать в /etc/firewall.user : К сожалению, отключить только в OUTPUT таким образом нельзя. Но можно сделать иначе. Вписать в /etc/firewall.user :
```
iptables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT iptables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT
ip6tables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT ip6tables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT
```
Лучше делать так, потому что отсутствие дропа INVALID в FORWARD может привести к нежелательным утечкам пакетов из LAN. Лучше делать так, потому что отсутствие дропа INVALID в FORWARD может привести к нежелательным утечкам пакетов из LAN.
Если не принять эти меры, отсылка SYN,ACK сегмента вызовет ошибку и операция будет прервана. Если не принять эти меры, отсылка SYN,ACK сегмента вызовет ошибку и операция будет прервана.
Остальные режимы тоже не сработают. Если поймете, что вам synack не нужен, обязательно верните правило дропа INVALID. Остальные режимы тоже не сработают. Если поймете, что вам synack не нужен, обязательно верните правило дропа INVALID.
РЕЖИМ SYNDATA РЕЖИМ SYNDATA
Тут все просто. Добавляются данные в пакет SYN. Все ОС их игнорируют, если не используется TCP fast open (TFO), Тут все просто. Добавляются данные в пакет SYN. Все ОС их игнорируют, если не используется TCP fast open (TFO),
а DPI может воспринять, не разобравшись есть там TFO или нет. а DPI может воспринять, не разобравшись есть там TFO или нет.
Оригинальные соединения с TFO не трогаются, поскольку это их точно сломает. Оригинальные соединения с TFO не трогаются, поскольку это их точно сломает.
Без уточняющего параметра добавляются 16 нулевых байтов. Без уточняющего параметра добавляются 16 нулевых байтов.
ВИРТУАЛЬНЫЕ МАШИНЫ ВИРТУАЛЬНЫЕ МАШИНЫ
Изнутри VM от virtualbox и vmware в режиме NAT не работают многие техники пакетной магии nfqws. Изнутри VM от virtualbox и vmware в режиме NAT не работают многие техники пакетной магии nfqws.
Принудительно заменяется ttl, не проходят фейк пакеты. Необходимо настроить сеть в режиме bridge. Принудительно заменяется ttl, не проходят фейк пакеты. Необходимо настроить сеть в режиме bridge.
CONNTRACK CONNTRACK
nfqws оснащен ограниченной реализацией слежения за состоянием tcp соединений (conntrack). nfqws оснащен ограниченной реализацией слежения за состоянием tcp соединений (conntrack).
Он включается для реализации некоторых методов противодействия DPI. Он включается для реализации некоторых методов противодействия DPI.
conntrack способен следить за фазой соединения : SYN,ESTABLISHED,FIN , количеством пакетов в каждую сторону, conntrack способен следить за фазой соединения : SYN,ESTABLISHED,FIN , количеством пакетов в каждую сторону,
@ -554,6 +589,7 @@ window size итоговый размер окна стал максимальн
Если соединение выпало из conntrack и задана опция --dpi-desync-cutoff, dpi desync применяться не будет. Если соединение выпало из conntrack и задана опция --dpi-desync-cutoff, dpi desync применяться не будет.
РЕАССЕМБЛИНГ РЕАССЕМБЛИНГ
nfqws поддерживает реассемблинг некоторых видов запросов. nfqws поддерживает реассемблинг некоторых видов запросов.
На текущий момент это TLS и QUIC ClientHello. Они бывает длинными, если в chrome включить пост-квантовую На текущий момент это TLS и QUIC ClientHello. Они бывает длинными, если в chrome включить пост-квантовую
криптографию tls-kyber, и занимают как правило 2 или 3 пакета. kyber включен по умолчанию, начиная с chromium 124. криптографию tls-kyber, и занимают как правило 2 или 3 пакета. kyber включен по умолчанию, начиная с chromium 124.
@ -573,6 +609,7 @@ chrome рандомизирует фингерпринт TLS. SNI может о
а последний пакет разбивается на 2 сегмента. В итоге имеем фейк в начале и 3 реальных сегмента. а последний пакет разбивается на 2 сегмента. В итоге имеем фейк в начале и 3 реальных сегмента.
ПОДДЕРЖКА UDP ПОДДЕРЖКА UDP
Атаки на udp более ограничены в возможностях. udp нельзя фрагментировать иначе, чем на уровне ip. Атаки на udp более ограничены в возможностях. udp нельзя фрагментировать иначе, чем на уровне ip.
Для UDP действуют только режимы десинхронизации fake,hopbyhop,destopt,ipfrag1,ipfrag2,udplen,tamper. Для UDP действуют только режимы десинхронизации fake,hopbyhop,destopt,ipfrag1,ipfrag2,udplen,tamper.
Возможно сочетание fake,hopbyhop,destopt с ipfrag2, fake,fakeknown с udplen и tamper. Возможно сочетание fake,hopbyhop,destopt с ipfrag2, fake,fakeknown с udplen и tamper.
@ -592,6 +629,7 @@ udplen увеличивает размер udp пакета на указанн
По умолчанию fake наполнение - 64 нуля. Можно указать файл в --dpi-desync-fake-unknown-udp. По умолчанию fake наполнение - 64 нуля. Можно указать файл в --dpi-desync-fake-unknown-udp.
IP ФРАГМЕНТАЦИЯ IP ФРАГМЕНТАЦИЯ
Современная сеть практически не пропускает фрагментированные tcp на уровне ip. Современная сеть практически не пропускает фрагментированные tcp на уровне ip.
На udp с этим дело получше, поскольку некоторые udp протоколы могут опираться на этот механизм (IKE старых версий). На udp с этим дело получше, поскольку некоторые udp протоколы могут опираться на этот механизм (IKE старых версий).
Однако, кое-где бывает, что режут и фрагментированный udp. Однако, кое-где бывает, что режут и фрагментированный udp.
@ -618,6 +656,7 @@ options ip6table_raw raw_before_defrag=1
В некоторых традиционных дистрибутивах можно изменить текущий ip6tables через : update-alternatives --config ip6tables В некоторых традиционных дистрибутивах можно изменить текущий ip6tables через : update-alternatives --config ip6tables
Если вы хотите оставаться на iptables-nft, вам придется пересобрать патченную версию. Патч совсем небольшой. Если вы хотите оставаться на iptables-nft, вам придется пересобрать патченную версию. Патч совсем небольшой.
В nft.c найдите фрагмент : В nft.c найдите фрагмент :
```
{ {
.name = "PREROUTING", .name = "PREROUTING",
.type = "filter", .type = "filter",
@ -630,6 +669,7 @@ options ip6table_raw raw_before_defrag=1
.prio = -300, /* NF_IP_PRI_RAW */ .prio = -300, /* NF_IP_PRI_RAW */
.hook = NF_INET_LOCAL_OUT, .hook = NF_INET_LOCAL_OUT,
}, },
```
и замените везде -300 на -450. и замените везде -300 на -450.
Это нужно сделать вручную, никакой автоматики в blockcheck.sh нет. Это нужно сделать вручную, никакой автоматики в blockcheck.sh нет.
@ -647,6 +687,7 @@ tpws
----- -----
tpws - это transparent proxy. tpws - это transparent proxy.
```
--debug=0|1|2 ; Количество буковок в output : 0(default)=тихо, 1=подробно, 2=отладка --debug=0|1|2 ; Количество буковок в output : 0(default)=тихо, 1=подробно, 2=отладка
--daemon ; демонизировать прогу --daemon ; демонизировать прогу
--pidfile=<file> ; сохранить PID в файл --pidfile=<file> ; сохранить PID в файл
@ -723,6 +764,7 @@ tpws - это transparent proxy.
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) --hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. --hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
```
Параметры манипуляции могут сочетаться в любых комбинациях. Параметры манипуляции могут сочетаться в любых комбинациях.
@ -753,10 +795,12 @@ tpws может биндаться на множество интерфейсо
Остальные параметры --bind-* относятся к последнему бинду. Остальные параметры --bind-* относятся к последнему бинду.
Для бинда на все ipv4 укажите --bind-addr "0.0.0.0", на все ipv6 - "::". --bind-addr="" - биндаемся на все ipv4 и ipv6. Для бинда на все ipv4 укажите --bind-addr "0.0.0.0", на все ipv6 - "::". --bind-addr="" - биндаемся на все ipv4 и ipv6.
Выбор режима использования link local ipv6 адресов (fe80::/8) : Выбор режима использования link local ipv6 адресов (fe80::/8) :
--bind-iface6 --bind-linklocal=no : сначала приватный адрес fc00::/7, затем глобальный адрес
--bind-iface6 --bind-linklocal=unwanted : сначала приватный адрес fc00::/7, затем глобальный адрес, затем link local. * --bind-iface6 --bind-linklocal=no : сначала приватный адрес fc00::/7, затем глобальный адрес
--bind-iface6 --bind-linklocal=prefer : сначала link local, затем приватный адрес fc00::/7, затем глобальный адрес. * --bind-iface6 --bind-linklocal=unwanted : сначала приватный адрес fc00::/7, затем глобальный адрес, затем link local.
--bind-iface6 --bind-linklocal=force : только link local * --bind-iface6 --bind-linklocal=prefer : сначала link local, затем приватный адрес fc00::/7, затем глобальный адрес.
* --bind-iface6 --bind-linklocal=force : только link local
Если не указано ни одного бинда, то создается бинд по умолчанию на все адреса всех интерфейсов. Если не указано ни одного бинда, то создается бинд по умолчанию на все адреса всех интерфейсов.
Для бинда на конкретный link-local address делаем так : --bind-iface6=fe80::aaaa:bbbb:cccc:dddd%iface-name Для бинда на конкретный link-local address делаем так : --bind-iface6=fe80::aaaa:bbbb:cccc:dddd%iface-name
Параметры --bind-wait* могут помочь в ситуациях, когда нужно взять IP с интерфейса, но его еще нет, он не поднят Параметры --bind-wait* могут помочь в ситуациях, когда нужно взять IP с интерфейса, но его еще нет, он не поднят
@ -1066,6 +1110,7 @@ linux, но через раз приобретает статус INVALID в con
nfqws и tpws могут сечь варианты 1-3, 4 они не распознают. nfqws и tpws могут сечь варианты 1-3, 4 они не распознают.
Всилу специфики работы с отдельными пакетами или с TCP каналом tpws и nfqws распознают эти ситуации Всилу специфики работы с отдельными пакетами или с TCP каналом tpws и nfqws распознают эти ситуации
по-разному. по-разному.
Что считается ситуацией, похожей на блокировку : Что считается ситуацией, похожей на блокировку :
1) [nfqws] Несколько ретрансмиссий первого запроса в TCP сеансе, в котором имеется host. 1) [nfqws] Несколько ретрансмиссий первого запроса в TCP сеансе, в котором имеется host.
2) [nfqws,tpws] RST, пришедший в ответ на первый запрос с хостом. 2) [nfqws,tpws] RST, пришедший в ответ на первый запрос с хостом.
@ -1118,7 +1163,9 @@ install_easy.sh при апгрейде zapret сохраняет этот фа
Если DNS подменяется, но провайдер не перехватывает обращения к сторонним DNS, поменяйте DNS на публичный. Если DNS подменяется, но провайдер не перехватывает обращения к сторонним DNS, поменяйте DNS на публичный.
Например : 8.8.8.8, 8.8.4.4, 1.1.1.1, 1.0.0.1, 9.9.9.9 Например : 8.8.8.8, 8.8.4.4, 1.1.1.1, 1.0.0.1, 9.9.9.9
Если DNS подменяется и провайдер перехватывает обращения к сторонним DNS, настройте dnscrypt. Если DNS подменяется и провайдер перехватывает обращения к сторонним DNS, настройте dnscrypt.
Еще один эффективный вариант - использовать ресолвер от yandex 77.88.8.88 на нестандартном порту 1253. Еще один эффективный вариант - использовать ресолвер от yandex 77.88.8.88 на нестандартном порту 1253.
Многие провайдеры не анализируют обращения к DNS на нестандартных портах. Многие провайдеры не анализируют обращения к DNS на нестандартных портах.
@ -1146,6 +1193,7 @@ standard дает возможность провести исследовани
force дает максимум проверок даже в случаях, когда ресурс работает без обхода или с более простыми стратегиями. force дает максимум проверок даже в случаях, когда ресурс работает без обхода или с более простыми стратегиями.
СКАН ПОРТОВ СКАН ПОРТОВ
Если в системе присутствует совместимый netcat (ncat от nmap или openbsd ncat. в openwrt по умолчанию нет.), Если в системе присутствует совместимый netcat (ncat от nmap или openbsd ncat. в openwrt по умолчанию нет.),
то выполняется сканирование портов http или https всех IP адресов домена. то выполняется сканирование портов http или https всех IP адресов домена.
Если ни один IP не отвечает, то результат очевиден. Можно останавливать сканирование. Если ни один IP не отвечает, то результат очевиден. Можно останавливать сканирование.
@ -1154,6 +1202,7 @@ force дает максимум проверок даже в случаях, к
из списка. из списка.
ПРОВЕРКА НА ЧАСТИЧНЫЙ IP block ПРОВЕРКА НА ЧАСТИЧНЫЙ IP block
Под частичным блоком подразумевается ситуация, когда конект на порты есть, но по определенному транспортному Под частичным блоком подразумевается ситуация, когда конект на порты есть, но по определенному транспортному
или прикладному протоколу всегда идет реакция DPI вне зависимости от запрашиваемого домена. или прикладному протоколу всегда идет реакция DPI вне зависимости от запрашиваемого домена.
Эта проверка так же не выдаст автоматического вердикта/решения, потому что может быть очень много вариаций. Эта проверка так же не выдаст автоматического вердикта/решения, потому что может быть очень много вариаций.
@ -1179,6 +1228,7 @@ option headers. Или сделать так, чтобы он не мог рас
ПРИМЕРЫ БЛОКИРОВКИ ТОЛЬКО ПО ДОМЕНУ БЕЗ БЛОКА ПО IP ПРИМЕРЫ БЛОКИРОВКИ ТОЛЬКО ПО ДОМЕНУ БЕЗ БЛОКА ПО IP
```
> testing iana.org on it's original ip > testing iana.org on it's original ip
!!!!! AVAILABLE !!!!! !!!!! AVAILABLE !!!!!
> testing rutracker.org on 192.0.43.8 (iana.org) > testing rutracker.org on 192.0.43.8 (iana.org)
@ -1215,10 +1265,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
@ -1240,6 +1292,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
```
Выбор параметров Выбор параметров
@ -1255,12 +1308,12 @@ curl: (28) Connection timed out after 2002 milliseconds
FWTYPE=iptables FWTYPE=iptables
Основной режим : Основной режим :
tpws - tpws в режиме transparent * tpws - tpws в режиме transparent
tpws-socks - tpws в режиме socks * tpws-socks - tpws в режиме socks
вешается на localhost и LAN интерфейс (если задан IFACE_LAN или если система - OpenWRT). порт 988 * вешается на localhost и LAN интерфейс (если задан IFACE_LAN или если система - OpenWRT). порт 988
nfqws - nfqws * nfqws - nfqws
filter - только заполнить ipset или загрузить hostlist * filter - только заполнить ipset или загрузить hostlist
custom - нужно самому запрограммировать запуск демонов в init скрипте и правила iptables * custom - нужно самому запрограммировать запуск демонов в init скрипте и правила iptables
MODE=tpws MODE=tpws
@ -1283,45 +1336,57 @@ MODE_HTTPS=1
MODE_QUIC=0 MODE_QUIC=0
Режим фильтрации хостов : Режим фильтрации хостов :
none - применять дурение ко всем хостам * none - применять дурение ко всем хостам
ipset - ограничить дурение ipset-ом zapret/zapret6 * ipset - ограничить дурение ipset-ом zapret/zapret6
hostlist - ограничить дурение списком хостов из файла * hostlist - ограничить дурение списком хостов из файла
autohostlist - режим hostlist + распознавание блокировок и ведения автоматического листа * autohostlist - режим hostlist + распознавание блокировок и ведения автоматического листа
MODE_FILTER=none MODE_FILTER=none
Опции tpws : Опции tpws :
```
TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3" TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3"
```
Опции nfqws для атаки десинхронизации DPI : Опции nfqws для атаки десинхронизации DPI :
```
DESYNC_MARK=0x40000000 DESYNC_MARK=0x40000000
DESYNC_MARK_POSTNAT=0x20000000 DESYNC_MARK_POSTNAT=0x20000000
NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-fooling=badsum" NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
```
Задание раздельных опций nfqws для http и https и для версий ip протоколов 4,6 : Задание раздельных опций nfqws для http и https и для версий ip протоколов 4,6 :
```
NFQWS_OPT_DESYNC_HTTP="--dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum" NFQWS_OPT_DESYNC_HTTP="--dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
NFQWS_OPT_DESYNC_HTTPS="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum" NFQWS_OPT_DESYNC_HTTPS="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
NFQWS_OPT_DESYNC_HTTP6="--dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none" NFQWS_OPT_DESYNC_HTTP6="--dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none"
NFQWS_OPT_DESYNC_HTTPS6="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none" NFQWS_OPT_DESYNC_HTTPS6="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none"
```
Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS не определена, Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS не определена,
берется значение NFQWS_OPT_DESYNC. берется значение NFQWS_OPT_DESYNC.
Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP6/NFQWS_OPT_DESYNC_HTTPS6 не определена, Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP6/NFQWS_OPT_DESYNC_HTTPS6 не определена,
берется значение NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS. берется значение NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS.
Опции дурения для QUIC : Опции дурения для QUIC :
```
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake" NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake"
NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop" NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop"
```
Если NFQWS_OPT_DESYNC_QUIC6 не задано, то берется NFQWS_OPT_DESYNC_QUIC. Если NFQWS_OPT_DESYNC_QUIC6 не задано, то берется NFQWS_OPT_DESYNC_QUIC.
Настройка системы управления выборочным traffic offload (только если поддерживается) Настройка системы управления выборочным traffic offload (только если поддерживается)
donttouch : выборочное управление отключено, используется системная настройка, простой инсталятор выключает системную настройку, если она не совместима с выбранным режимом
none : выборочное управление отключено, простой инсталятор выключает системную настройку * donttouch : выборочное управление отключено, используется системная настройка, простой инсталятор выключает системную настройку, если она не совместима с выбранным режимом
software : выборочное управление включено в режиме software, простой инсталятор выключает системную настройку * none : выборочное управление отключено, простой инсталятор выключает системную настройку
hardware : выборочное управление включено в режиме hardware, простой инсталятор выключает системную настройку * software : выборочное управление включено в режиме software, простой инсталятор выключает системную настройку
* hardware : выборочное управление включено в режиме hardware, простой инсталятор выключает системную настройку
FLOWOFFLOAD=donttouch FLOWOFFLOAD=donttouch
@ -1333,16 +1398,19 @@ 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-ов
@ -1355,6 +1423,7 @@ IPSET_OPT="hashsize 262144 maxelem 2097152"
IPSET_HOOK="/etc/zapret.ipset.hook" IPSET_HOOK="/etc/zapret.ipset.hook"
ПРО РУГАНЬ в dmesg по поводу нехватки памяти. ПРО РУГАНЬ в dmesg по поводу нехватки памяти.
Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный ipset Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный ipset
ядро начинает громко ругаться, ipset заполняется не полностью. ядро начинает громко ругаться, ipset заполняется не полностью.
Вероятная причина в том, что превышается hashsize, заданный при создании ipset (create_ipset.sh). Вероятная причина в том, что превышается hashsize, заданный при создании ipset (create_ipset.sh).
@ -1363,16 +1432,23 @@ IPSET_HOOK="/etc/zapret.ipset.hook"
Задавать слишком большой 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=3 AUTOHOSTLIST_RETRANS_THRESHOLD=3
AUTOHOSTLIST_FAIL_THRESHOLD=2 AUTOHOSTLIST_FAIL_THRESHOLD=2
AUTOHOSTLIST_FAIL_TIME=60 AUTOHOSTLIST_FAIL_TIME=60
AUTOHOSTLIST_DEBUG=0 AUTOHOSTLIST_DEBUG=0
```
Включить или выключить сжатие больших листов в скриптах ipset/*.sh. По умолчанию включено. Включить или выключить сжатие больших листов в скриптах ipset/*.sh. По умолчанию включено.
GZIP_LISTS=1 GZIP_LISTS=1
Команда для перезагрузки ip таблиц фаервола. Команда для перезагрузки ip таблиц фаервола.
@ -1385,12 +1461,16 @@ GZIP_LISTS=1
В 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.
При иных значениях или если параметр закомментирован, правила применены не будут. При иных значениях или если параметр закомментирован, правила применены не будут.
@ -1400,9 +1480,13 @@ OPENWRT_WAN6="wan6 vpn6"
Следующие настройки не актуальны для openwrt : Следующие настройки не актуальны для openwrt :
Если ваша система работает как роутер, то нужно вписать названия внутренних и внешних интерфейсов : Если ваша система работает как роутер, то нужно вписать названия внутренних и внешних интерфейсов :
```
IFACE_LAN=eth0 IFACE_LAN=eth0
IFACE_WAN=eth1 IFACE_WAN=eth1
IFACE_WAN6="henet ipsec0" IFACE_WAN6="henet ipsec0"
```
Несколько интерфейсов могут быть вписаны через пробел. Несколько интерфейсов могут быть вписаны через пробел.
Если IFACE_WAN6 не задан, то берется значение IFACE_WAN. Если IFACE_WAN6 не задан, то берется значение IFACE_WAN.
@ -1419,15 +1503,19 @@ IFACE_WAN6="henet ipsec0"
Следующие вызовы позволяют применить или убрать правила iptables отдельно : Следующие вызовы позволяют применить или убрать правила iptables отдельно :
```
/opt/zapret/init.d/sysv/zapret start_fw /opt/zapret/init.d/sysv/zapret start_fw
/opt/zapret/init.d/sysv/zapret stop_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 start_daemons
/opt/zapret/init.d/sysv/zapret stop_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".
@ -1450,10 +1538,12 @@ nftables сводят практически на нет конфликты ме
Так же возможно прицепиться своим скриптом к любой стадии применения и снятия фаервола со стороны 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.
@ -1465,14 +1555,20 @@ nfset-ы принадлежат только одной таблице, след
-------------- --------------
custom код вынесен в отдельный shell include custom код вынесен в отдельный shell include
```
/opt/zapret/init.d/sysv/custom /opt/zapret/init.d/sysv/custom
```
или или
```
/opt/zapret/init.d/openwrt/custom /opt/zapret/init.d/openwrt/custom
```
Нужно свой код вписать в функции : Нужно свой код вписать в функции :
```
zapret_custom_daemons zapret_custom_daemons
zapret_custom_firewall zapret_custom_firewall
zapret_custom_firewall_nft zapret_custom_firewall_nft
```
В файле custom пишите ваш код, пользуясь хелперами из "functions" или "zapret". В файле custom пишите ваш код, пользуясь хелперами из "functions" или "zapret".
Смотрите как там сделано добавление iptables или запуск демонов. Смотрите как там сделано добавление iptables или запуск демонов.
@ -1513,7 +1609,9 @@ install_easy.sh автоматизирует ручные варианты пр
через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим
компиляции следующим вызовом : компиляции следующим вызовом :
```
install_easy.sh make install_easy.sh make
```
Под openwrt все уже сразу готово для использования системы в качестве роутера. Под openwrt все уже сразу готово для использования системы в качестве роутера.
Имена интерфейсов WAN и LAN известны из настроек системы. Имена интерфейсов WAN и LAN известны из настроек системы.
@ -1537,11 +1635,15 @@ install_easy.sh автоматизирует ручные варианты пр
Копируем zapret на роутер в /tmp. Копируем zapret на роутер в /tmp.
Запускаем установщик : Запускаем установщик :
```
sh /tmp/zapret/install_easy.sh sh /tmp/zapret/install_easy.sh
```
Он скопирует в /opt/zapret только необходимый минимум файлов. Он скопирует в /opt/zapret только необходимый минимум файлов.
После успешной установки можно удалить zapret из tmp для освобождения RAM : После успешной установки можно удалить zapret из tmp для освобождения RAM :
```
rm -r /tmp/zapret rm -r /tmp/zapret
```
Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров". Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".
@ -1561,13 +1663,17 @@ Android
tpws будет работать в любом случае, он не требует чего-либо особенного. tpws будет работать в любом случае, он не требует чего-либо особенного.
В android нет /etc/passwd, потому опция --user не будет работать. Вместо нее можно В android нет /etc/passwd, потому опция --user не будет работать. Вместо нее можно
пользоваться числовыми user id и опцией --uid. пользоваться числовыми user id и опцией --uid.
Рекомендую использовать gid 3003 (AID_INET). Иначе можете получить permission denied на создание сокета. Рекомендую использовать gid 3003 (AID_INET). Иначе можете получить permission denied на создание сокета.
Например : --uid 1:3003 Например : --uid 1:3003
В iptables укажите : "! --uid-owner 1" вместо "! --uid-owner tpws". В iptables укажите : "! --uid-owner 1" вместо "! --uid-owner tpws".
Напишите шелл скрипт с iptables и tpws, запускайте его средствами вашего рут менеджера. Напишите шелл скрипт с iptables и tpws, запускайте его средствами вашего рут менеджера.
Скрипты автозапуска лежат тут : Скрипты автозапуска лежат тут :
```
magisk : /data/adb/service.d magisk : /data/adb/service.d
supersu : /system/su.d supersu : /system/su.d
```
nfqws может иметь такой глюк. При запуске с uid по умолчанию (0x7FFFFFFF) при условии работы на сотовом интерфейсе nfqws может иметь такой глюк. При запуске с uid по умолчанию (0x7FFFFFFF) при условии работы на сотовом интерфейсе
и отключенном кабеле внешнего питания система может частично виснуть. Перестает работать тач и кнопки, и отключенном кабеле внешнего питания система может частично виснуть. Перестает работать тач и кнопки,
@ -1581,10 +1687,12 @@ wifi такого не наблюдается. suspend обработчика nf
Ответ на вопрос куда поместить tpws на android без рута, чтобы потом его запускать из приложений. Ответ на вопрос куда поместить tpws на android без рута, чтобы потом его запускать из приложений.
Файл заливаем через adb shell в /data/local/tmp/, лучше всего в субфолдер. Файл заливаем через adb shell в /data/local/tmp/, лучше всего в субфолдер.
```
mkdir /data/local/tmp/zapret mkdir /data/local/tmp/zapret
adb push tpws /data/local/tmp/zapret adb push tpws /data/local/tmp/zapret
chmod 755 /data/local/tmp/zapret /data/local/tmp/zapret/tpws chmod 755 /data/local/tmp/zapret /data/local/tmp/zapret/tpws
chcon u:object_r:system_file:s0 /data/local/tmp/zapret/tpws chcon u:object_r:system_file:s0 /data/local/tmp/zapret/tpws
```
Как найти стратегию обхода сотового оператора : проще всего раздать инет на комп с linux. Как найти стратегию обхода сотового оператора : проще всего раздать инет на комп с linux.
Можно записать live image linux на флэшку и загрузиться с нее или запустить виртуалку с linux Можно записать live image linux на флэшку и загрузиться с нее или запустить виртуалку с linux
@ -1598,21 +1706,29 @@ chcon u:object_r:system_file:s0 /data/local/tmp/zapret/tpws
Если это не эмулятор android, то универсальная архитектура - arm (любой вариант). Если это не эмулятор android, то универсальная архитектура - arm (любой вариант).
Если вы точно знаете, что ОС у вас 64-разрядная, то лучше вместо arm - aarch64. Если вы точно знаете, что ОС у вас 64-разрядная, то лучше вместо arm - aarch64.
```
mount --bind /dev /data/linux/dev mount --bind /dev /data/linux/dev
mount --bind /proc /data/linux/proc mount --bind /proc /data/linux/proc
mount --bind /sys /data/linux/sys mount --bind /sys /data/linux/sys
chroot /data/linux chroot /data/linux
```
Первым делом вам нужно будет один раз настроить DNS. Сам он не заведется. Первым делом вам нужно будет один раз настроить DNS. Сам он не заведется.
```
echo nameserver 1.1.1.1 >/etc/resolv.conf echo nameserver 1.1.1.1 >/etc/resolv.conf
```
Далее нужно средствами пакетного менеджера установить iptables-legacy. Обязательно НЕ iptables-nft, Далее нужно средствами пакетного менеджера установить iptables-legacy. Обязательно НЕ iptables-nft,
который как правило присутствует по умолчанию. В ядре android нет nftables. который как правило присутствует по умолчанию. В ядре android нет nftables.
```
ls -la $(which iptables) ls -la $(which iptables)
```
Линк должен указывать на legacy вариант. Линк должен указывать на legacy вариант.
Если нет, значит устанавливайте нужные пакеты вашего дестрибутива, и убеждайтесь в правильности ссылок. Если нет, значит устанавливайте нужные пакеты вашего дестрибутива, и убеждайтесь в правильности ссылок.
```
iptables -S iptables -S
```
Так можно проверить, что ваш iptables увидел то, что туда насовал android. iptables-nft выдаст ошибку. Так можно проверить, что ваш iptables увидел то, что туда насовал android. iptables-nft выдаст ошибку.
Далее качаем zapret в /opt/zapret. Обычные действия с install_prereq.sh, install_bin.sh, blockcheck.sh. Далее качаем zapret в /opt/zapret. Обычные действия с install_prereq.sh, install_bin.sh, blockcheck.sh.
@ -1651,6 +1767,7 @@ nfqueue поломан. можно собрать фиксящий модуль
Чтобы избежать проблемы с offload-ом при использвании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws. Чтобы избежать проблемы с offload-ом при использвании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws.
Правила NFQUEUE пишутся для цепочки OUTPUT. Правила NFQUEUE пишутся для цепочки OUTPUT.
connbytes придется опускать, поскольку модуля в ядре нет. Но это не смертельно. connbytes придется опускать, поскольку модуля в ядре нет. Но это не смертельно.
Скрипт автозапуска - /system/etc/autorun.sh. Создайте свой скрипт настройки zapret, Скрипт автозапуска - /system/etc/autorun.sh. Создайте свой скрипт настройки zapret,
@ -1658,10 +1775,13 @@ connbytes придется опускать, поскольку модуля в
поднятия сети и iptables от huawei. поднятия сети и iptables от huawei.
ПРЕДУПРЕЖДЕНИЕ. ПРЕДУПРЕЖДЕНИЕ.
На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам. На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам.
Выглядит это так, если запускать curl с самого модема : Выглядит это так, если запускать curl с самого модема :
```
curl www.ru curl www.ru
curl: (7) Failed to connect to www.ru port 80: Host is unreachable 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.