mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-26 04:00:53 +03:00
doc works
This commit is contained in:
parent
f0cc49c7e3
commit
818520452e
@ -100,7 +100,7 @@ Later you will add ipfw commands to `/etc/rc.firewall.my` to be reapplied after
|
||||
You can also run zapret daemons from there. Start them with `--daemon` options, for example
|
||||
```
|
||||
pkill ^dvtws$
|
||||
/opt/zapret/nfq/dvtws --port=989 --daemon --dpi-desync=split2
|
||||
/opt/zapret/nfq/dvtws --port=989 --daemon --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||
```
|
||||
|
||||
To restart firewall and daemons run : `/etc/rc.d/ipfw restart`
|
||||
@ -157,7 +157,7 @@ ipfw delete 100
|
||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||
# required for autottl mode only
|
||||
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||
```
|
||||
|
||||
Process only table zapret with the exception of table nozapret:
|
||||
@ -167,7 +167,7 @@ ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
||||
ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted not sockarg xmit em0
|
||||
# required for autottl mode only
|
||||
ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||
```
|
||||
|
||||
Reinjection loop avoidance. FreeBSD artificially ignores sockarg for ipv6 in
|
||||
@ -245,7 +245,7 @@ sysctl net.inet6.ip6.pfil.inbound=ipfw,pf
|
||||
ipfw delete 100
|
||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||
pkill ^dvtws$
|
||||
dvtws --daemon --port 989 --dpi-desync=split2
|
||||
dvtws --daemon --port 989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||
|
||||
# required for newer pfsense versions (2.6.0 tested) to return ipfw to functional state
|
||||
pfctl -d ; pfctl -e
|
||||
@ -342,7 +342,7 @@ pass out quick on em0 proto tcp to port {80,443} divert-packet port 989
|
||||
Then:
|
||||
```
|
||||
pfctl -f /etc/pf.conf
|
||||
./dvtws --port=989 --dpi-desync=split2
|
||||
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||
```
|
||||
|
||||
`dwtws` only for table zapret with the exception of table nozapret :
|
||||
@ -375,7 +375,7 @@ pass out quick on em0 inet6 proto tcp to <zapret6-user> port {80,443} divert-p
|
||||
Then:
|
||||
```
|
||||
pfctl -f /etc/pf.conf
|
||||
./dvtws --port=989 --dpi-desync=split2
|
||||
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||
```
|
||||
|
||||
divert-packet automatically adds the reverse rule. By default also incoming
|
||||
|
@ -12,7 +12,7 @@ iptables -t mangle -I POSTROUTING -p udp --dport 443 -m mark ! --mark 0x40000000
|
||||
# auto hostlist with avoiding wrong ACK numbers in RST,ACK packets sent by russian DPI
|
||||
sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
|
||||
iptables -t mangle -I POSTROUTING -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:12 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
||||
iptables -t mangle -I PREROUTING -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
||||
iptables -t mangle -I PREROUTING -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:3 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
||||
|
||||
|
||||
For TPROXY :
|
||||
|
@ -19,8 +19,8 @@ For dpi desync attack :
|
||||
nft delete table inet ztest
|
||||
nft create table inet ztest
|
||||
nft add chain inet ztest post "{type filter hook postrouting priority mangle;}"
|
||||
nft add rule inet ztest post meta mark and 0x40000000 == 0 tcp dport "{80,443}" ct original packets 1-12 queue num 200 bypass
|
||||
nft add rule inet ztest post meta mark and 0x40000000 == 0 udp dport 443 ct original packets 1-12 queue num 200 bypass
|
||||
nft add rule inet ztest post meta mark and 0x40000000 == 0 tcp dport "{80,443}" ct original packets 1-6 queue num 200 bypass
|
||||
nft add rule inet ztest post meta mark and 0x40000000 == 0 udp dport 443 ct original packets 1-6 queue num 200 bypass
|
||||
|
||||
# auto hostlist with avoiding wrong ACK numbers in RST,ACK packets sent by russian DPI
|
||||
sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -614,7 +614,7 @@ options ip6table_raw raw_before_defrag=1
|
||||
|
||||
### МНОЖЕСТВЕННЫЕ СТРАТЕГИИ
|
||||
|
||||
`nfqws` способен по-разному реагировать на различные запросы и применять разные стратегии дурения.
|
||||
**nfqws** способен по-разному реагировать на различные запросы и применять разные стратегии дурения.
|
||||
Это реализовано посредством поддержки множества профилей дурения.
|
||||
Профили разделяются в командной строке параметром `--new`. Первый профиль создается автоматически.
|
||||
Для него не нужно `--new`. Каждый профиль имеет фильтр. По умолчанию он пуст, то есть профиль удовлетворяет
|
||||
@ -680,10 +680,9 @@ mark нужен, чтобы сгенерированный поддельный
|
||||
* 4-6 - на случай ретрансмиссии или запроса длиной в несколько пакетов (TLSClientHello с kyber, например)
|
||||
|
||||
Для режима autottl необходимо перенаправление входящего `SYN,ACK` пакета или первого пакета соединения (что обычно есть тоже самое).
|
||||
Можно построить фильтр на tcp flags и модуле u32 для поиска характерных паттернов http redirect, но проще использовать connbytes.
|
||||
|
||||
Для режима autohostlist необходимо перенаправление нескольких входящих пакетов, чтобы засечь RST или http redirect.
|
||||
Так же стоит увеличить лимит исходящих пакетов в connbytes, чтобы в него вошли все возможные ретрансмиссии, после которых идет реакция по autoostlist.
|
||||
Для режима autohostlist необходимы входящие RST и http redirect.
|
||||
Можно построить фильтр на tcp flags для выделения `SYN,ACK` и модуле u32 для поиска характерных паттернов http redirect,
|
||||
но проще использовать connbytes для выделения нескольких начальных входящих пакетов.
|
||||
|
||||
`
|
||||
iptables -t mangle -I PREROUTING -i <внешний интерфейс> -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:3 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
||||
@ -951,8 +950,8 @@ tpws работает на уровне сокетов, поэтому длин
|
||||
|
||||
### МНОЖЕСТВЕННЫЕ СТРАТЕГИИ
|
||||
|
||||
Работают аналогично `nfqws`, кроме некоторых моментов.
|
||||
Нет параметра `--filter-udp`, поскольку `tpws` udp не поддерживает.
|
||||
Работают аналогично **nfqws**, кроме некоторых моментов.
|
||||
Нет параметра `--filter-udp`, поскольку **tpws** udp не поддерживает.
|
||||
Методы нулевой фазы (`--mss`) могут работать по хостлисту в одном единственном случае:
|
||||
если используется режим socks и удаленный ресолвинг хостов через прокси.
|
||||
То есть работоспособность вашей настройки в одном и том же режиме может зависеть от того,
|
||||
@ -1060,7 +1059,7 @@ iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
|
||||
```
|
||||
|
||||
Фильтр по owner необходим для исключения рекурсивного перенаправления соединений от самого tpws. tpws запускается под
|
||||
пользователем `tpws`, для него задается исключающее правило.
|
||||
пользователем **tpws**, для него задается исключающее правило.
|
||||
|
||||
ip6tables работают почти точно так же, как и ipv4, но есть ряд важных нюансов. В DNAT следует брать адрес --to в
|
||||
квадратные скобки. Например :
|
||||
@ -1291,7 +1290,7 @@ mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Conte
|
||||
и 1 exclude список
|
||||
`ipset/zapret-hosts-users-exclude.txt.gz` или `ipset/zapret-hosts-users-exclude.txt`
|
||||
|
||||
При режимах фильтрации `MODE_FILTER=hostlist` или `MODE_FILTER=autohostlist` система запуска передает `nfqws` или `tpws` все листы, файлы которых присутствуют.
|
||||
При режимах фильтрации `MODE_FILTER=hostlist` или `MODE_FILTER=autohostlist` система запуска передает **nfqws** или **tpws** все листы, файлы которых присутствуют.
|
||||
Передача происходит через замену маркеров `<HOSTLIST>` и `<HOSTLIST_NOAUTO>` на реальные параметры `--hostlist`, `--hostlist-exclude`, `--hostlist-auto`.
|
||||
Если вдруг листы include присутствуют, но все они пустые, то работа аналогична отсутствию include листа.
|
||||
Файл есть, но не смотря на это дурится все, кроме exclude.
|
||||
@ -1320,21 +1319,21 @@ tpws и nfqws решают нужно ли применять дурение в
|
||||
Этот режим позволяет проанализировать как запросы со стороны клиента, так и ответы от сервера.
|
||||
Если хост еще не находится ни в каких листах и обнаруживается ситуация, похожая на блокировку,
|
||||
происходит автоматическое добавление хоста в список `autohostlist` как в памяти, так и в файле.
|
||||
`nfqws` или `tpws` сами ведут этот файл.
|
||||
**nfqws** или **tpws** сами ведут этот файл.
|
||||
Чтобы какой-то хост не смог попась в `autohostlist` используйте `hostlist-exclude`.
|
||||
Если он все-же туда попал - удалите запись из файла вручную. Процессы автоматически перечитают файл.
|
||||
`tpws`/`nfqws` сами назначают владельцем файла юзера, под которым они работают после сброса привилегий,
|
||||
**tpws**/**nfqws** сами назначают владельцем файла юзера, под которым они работают после сброса привилегий,
|
||||
чтобы иметь возможность обновлять лист.
|
||||
|
||||
В случае `nfqws` данный режим требует перенаправления в том числе и входящего трафика.
|
||||
Крайне рекомендовано использовать ограничитель `connbytes`, чтобы `nfqws` не обрабатывал гигабайты.
|
||||
В случае **nfqws** данный режим требует перенаправления в том числе и входящего трафика.
|
||||
Крайне рекомендовано использовать ограничитель `connbytes`, чтобы **nfqws** не обрабатывал гигабайты.
|
||||
По этой же причине не рекомендуется использование режима на BSD системах. Там нет фильтра `connbytes`.
|
||||
|
||||
На linux системах при использовании nfqws и фильтра connbytes может понадобится :
|
||||
`sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1`
|
||||
Было замечено, что некоторые DPI в России возвращают RST с неверным ACK. Это принимается tcp/ip стеком
|
||||
linux, но через раз приобретает статус INVALID в conntrack. Поэтому правила с `connbytes` срабатывают
|
||||
через раз, не пересылая RST пакет `nfqws`.
|
||||
через раз, не пересылая RST пакет **nfqws**.
|
||||
|
||||
Как вообще могут вести себя DPI, получив "плохой запрос" и приняв решение о блокировке:
|
||||
|
||||
@ -1344,7 +1343,7 @@ linux, но через раз приобретает статус INVALID в con
|
||||
4) Подмена сертификата: (только для https) полный перехват TLS сеанса с попыткой всунуть что-то
|
||||
свое клиенту. Применяется нечасто, поскольку броузеры на такое ругаются.
|
||||
|
||||
`nfqws` и `tpws` могут сечь варианты 1-3, 4 они не распознают.
|
||||
**nfqws** и **tpws** могут сечь варианты 1-3, 4 они не распознают.
|
||||
Всилу специфики работы с отдельными пакетами или с TCP каналом tpws и nfqws распознают эти ситуации
|
||||
по-разному.
|
||||
Что считается ситуацией, похожей на блокировку :
|
||||
@ -1375,7 +1374,7 @@ linux, но через раз приобретает статус INVALID в con
|
||||
незаблокированный сайт. Эту ситуацию, увы, придется вам контролировать вручную.
|
||||
Заносите такие домены в `ipset/zapret-hosts-user-exclude.txt`, чтобы избежать повторения.
|
||||
Чтобы впоследствии разобраться почему домен был занесен в лист, можно включить `autohostlist debug log`.
|
||||
Он полезен тем, что работает без постоянного просмотра вывода `nfqws` в режиме debug.
|
||||
Он полезен тем, что работает без постоянного просмотра вывода **nfqws** в режиме debug.
|
||||
В лог заносятся только основные события, ведущие к занесению хоста в лист.
|
||||
По логу можно понять как избежать ложных срабатываний и подходит ли вообще вам этот режим.
|
||||
|
||||
@ -1567,11 +1566,11 @@ nfqws начнет получать адреса пакетов из локал
|
||||
|
||||
`POSTNAT=0`
|
||||
|
||||
Существует 3 стандартных опции запуска, настраиваемых раздельно и независимо: `tpws-socks`, `tpws`, `nfqws`.
|
||||
Существует 3 стандартных опции запуска, настраиваемых раздельно и независимо: `tpws-socks`, **tpws**, **nfqws**.
|
||||
Их можно использовать как по отдельности, так и вместе. Например, вам надо сделать комбинацию
|
||||
из методов, доступных только в `tpws` и только в `nfqws`. Их можно задействовать вместе.
|
||||
`tpws` будет прозрачно локализовывать трафик на системе и применять свое дурение, `nfqws` будет дурить трафик,
|
||||
исходящий с самой системы после обработки на `tpws`.
|
||||
из методов, доступных только в **tpws** и только в **nfqws**. Их можно задействовать вместе.
|
||||
**tpws** будет прозрачно локализовывать трафик на системе и применять свое дурение, **nfqws** будет дурить трафик,
|
||||
исходящий с самой системы после обработки на **tpws**.
|
||||
А можно на эту же систему повесить без параметров socks proxy, чтобы получать доступ к обходу блокировок через прокси.
|
||||
Таким образом, все 3 режима вполне могут задействоваться вместе.
|
||||
Так же безусловно и независимо, в добавок к стандартным опциям, применяются все custom скрипты в `init.d/{sysv,openwrt,macos}/custom.d`.
|
||||
@ -1587,7 +1586,7 @@ nfqws начнет получать адреса пакетов из локал
|
||||
|
||||
Одновременное использование tpws и nfqws без пересечения по L3/L4 (то есть nfqws - udp, tpws - tcp или nfqws - port 443, tpws - port 80 или nfqws - ipv4, tpws - ipv6) проблем не представляет.
|
||||
|
||||
`tpws-socks` требует настройки параметров `tpws`, но не требует перехвата трафика.
|
||||
`tpws-socks` требует настройки параметров **tpws**, но не требует перехвата трафика.
|
||||
Остальные опции требуют раздельно настройки перехвата трафика и опции самих демонов.
|
||||
Каждая опция предполагает запуск одного инстанса соответствующего демона. Все различия методов дурения
|
||||
для `http`, `https`, `quic` и т.д. должны быть отражены через схему мультистратегий.
|
||||
@ -1885,7 +1884,7 @@ zapret_custom_firewall_v4
|
||||
zapret_custom_firewall_v6
|
||||
```
|
||||
|
||||
zapret_custom_daemons поднимает демоны `nfqws`/`tpws` в нужном вам количестве и с нужными вам параметрами.
|
||||
zapret_custom_daemons поднимает демоны **nfqws**/**tpws** в нужном вам количестве и с нужными вам параметрами.
|
||||
Для систем традиционного linux (sysv) и MacOS в первом параметре передается код операции: 1 = запуск, 0 = останов.
|
||||
Для openwrt логика останова отсутствует за ненадобностью.
|
||||
Схема запуска демонов в openwrt отличается - используется procd.
|
||||
@ -1914,7 +1913,7 @@ zapret_custom_firewall_nft поднимает правила nftables.
|
||||
В macos firewall-функции ничего сами никуда не заносят. Их задача - лишь выдать текст в stdout,
|
||||
содержащий правила для pf-якоря. Остальное сделает обертка.
|
||||
|
||||
Особо обратите внимание на номер демона в функциях `run_daemon` и `do_daemon`, номера портов `tpws`
|
||||
Особо обратите внимание на номер демона в функциях `run_daemon` и `do_daemon`, номера портов **tpws**
|
||||
и очередей `nfqueue`.
|
||||
Они должны быть уникальными во всех скриптах. При накладке будет ошибка.
|
||||
Поэтому используйте функции динамического получения этих значений из пула.
|
||||
@ -1950,11 +1949,11 @@ zapret_custom_firewall_nft поднимает правила nftables.
|
||||
Имена интерфейсов WAN и LAN известны из настроек системы.
|
||||
Под другими системами роутер вы настраиваете самостоятельно. Инсталлятор в это не вмешивается.
|
||||
инсталлятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы.
|
||||
Нужно понимать, что заворот проходящего трафика на `tpws` в прозрачном режиме происходит до выполнения маршрутизации,
|
||||
Нужно понимать, что заворот проходящего трафика на **tpws** в прозрачном режиме происходит до выполнения маршрутизации,
|
||||
следовательно возможна фильтрация по LAN и невозможна по WAN.
|
||||
Решение о завороте на `tpws` локального исходящего трафика принимается после выполнения маршрутизации,
|
||||
Решение о завороте на **tpws** локального исходящего трафика принимается после выполнения маршрутизации,
|
||||
следовательно ситуация обратная: LAN не имеет смысла, фильтрация по WAN возможна.
|
||||
Заворот на `nfqws` происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN.
|
||||
Заворот на **nfqws** происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN.
|
||||
Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера.
|
||||
|
||||
Деинсталляция выполняется через `uninstall_easy.sh`. После выполнения деинсталляции можно удалить каталог `/opt/zapret`.
|
||||
@ -1982,7 +1981,7 @@ zapret_custom_firewall_nft поднимает правила nftables.
|
||||
|
||||
## Установка на openwrt в режиме острой нехватки места на диске
|
||||
|
||||
Требуется около 120-200 кб на диске. Придется отказаться от всего, кроме `tpws`.
|
||||
Требуется около 120-200 кб на диске. Придется отказаться от всего, кроме **tpws**.
|
||||
|
||||
**Инструкция для openwrt 22 и выше с nftables**
|
||||
|
||||
@ -1991,7 +1990,7 @@ zapret_custom_firewall_nft поднимает правила nftables.
|
||||
***Установка:***
|
||||
|
||||
1) Скопируйте все из `init.d/openwrt-minimal/tpws/*` в корень openwrt.
|
||||
2) Скопируйте бинарник `tpws` подходящей архитектуры в `/usr/bin/tpws`.
|
||||
2) Скопируйте бинарник **tpws** подходящей архитектуры в `/usr/bin/tpws`.
|
||||
3) Установите права на файлы: `chmod 755 /etc/init.d/tpws /usr/bin/tpws`
|
||||
4) Отредактируйте `/etc/config/tpws`
|
||||
* Если не нужен ipv6, отредактируйте `/etc/nftables.d/90-tpws.nft` и закомментируйте строки с редиректом ipv6.
|
||||
@ -2019,7 +2018,7 @@ zapret_custom_firewall_nft поднимает правила nftables.
|
||||
***Установка:***
|
||||
|
||||
1) Скопируйте все из `init.d/openwrt-minimal/tpws/*` в корень openwrt.
|
||||
2) Скопируйте бинарник `tpws` подходящей архитектуры в `/usr/bin/tpws`.
|
||||
2) Скопируйте бинарник **tpws** подходящей архитектуры в `/usr/bin/tpws`.
|
||||
3) Установите права на файлы: `chmod 755 /etc/init.d/tpws /usr/bin/tpws`
|
||||
4) Отредактируйте `/etc/config/tpws`
|
||||
* Если не нужен ipv6, отредактируйте /etc/firewall.user и установите там DISABLE_IPV6=1.
|
||||
@ -2049,7 +2048,7 @@ tpws будет работать в любом случае, он не треб
|
||||
|
||||
Хотя linux варианты под Android работают, рекомендуется использовать специально собранные под bionic бинарники.
|
||||
У них не будет проблем с DNS, с локальным временем и именами юзеров и групп.\
|
||||
Рекомендую использовать gid 3003 (AID_INET). Иначе можете получить permission denied на создание сокета.
|
||||
Рекомендуется использовать gid 3003 (AID_INET). Иначе можете получить permission denied на создание сокета.
|
||||
Например: `--uid 1:3003`\
|
||||
В iptables укажите: `! --uid-owner 1` вместо `! --uid-owner tpws`.\
|
||||
Напишите шелл скрипт с iptables и tpws, запускайте его средствами вашего рут менеджера.
|
||||
@ -2057,7 +2056,7 @@ tpws будет работать в любом случае, он не треб
|
||||
magisk : /data/adb/service.d\
|
||||
supersu: /system/su.d
|
||||
|
||||
`nfqws` может иметь такой глюк. При запуске с uid по умолчанию (0x7FFFFFFF) при условии работы на сотовом интерфейсе
|
||||
**nfqws** может иметь такой глюк. При запуске с uid по умолчанию (0x7FFFFFFF) при условии работы на сотовом интерфейсе
|
||||
и отключенном кабеле внешнего питания система может частично виснуть. Перестает работать тач и кнопки,
|
||||
но анимация на экране может продолжаться. Если экран был погашен, то включить его кнопкой power невозможно.
|
||||
Изменение UID на низкий (--uid 1 подойдет) позволяет решить эту проблему.
|
||||
|
Loading…
Reference in New Issue
Block a user