mirror of
https://github.com/bol-van/zapret.git
synced 2025-01-06 08:20:34 +05:00
autohostlist mode
This commit is contained in:
parent
e34dfe692e
commit
0c81009e29
@ -246,4 +246,8 @@ HEX string support in addition to binary files.
|
|||||||
|
|
||||||
v51
|
v51
|
||||||
|
|
||||||
tpws --tlsrec attack.
|
tpws --tlsrec attack.
|
||||||
|
|
||||||
|
v52
|
||||||
|
|
||||||
|
autohostlist mode
|
||||||
|
@ -180,6 +180,10 @@ nfqws takes the following parameters:
|
|||||||
--dpi-desync-cutoff=[n|d|s]N ; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N
|
--dpi-desync-cutoff=[n|d|s]N ; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N
|
||||||
--hostlist=<filename> ; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
--hostlist=<filename> ; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
||||||
--hostlist-exclude=<filename> ; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
--hostlist-exclude=<filename> ; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
||||||
|
--hostlist-auto=<filename> ; detect DPI blocks and build hostlist automatically
|
||||||
|
--hostlist-auto-fail-threshold=<int> ; how many failed attempts cause hostname to be added to auto hostlist (default : 2)
|
||||||
|
--hostlist-auto-fail-time=<int> ; all failed attemps must be within these seconds (default : 60)
|
||||||
|
--hostlist-auto-retrans-threshold=<int> ; how many request retransmissions cause attempt to fail (default : 3)
|
||||||
```
|
```
|
||||||
|
|
||||||
The manipulation parameters can be combined in any way.
|
The manipulation parameters can be combined in any way.
|
||||||
@ -532,6 +536,9 @@ tpws is transparent proxy.
|
|||||||
|
|
||||||
--hostlist=<filename> ; only act on hosts in the list (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
--hostlist=<filename> ; only act on hosts in the list (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
||||||
--hostlist-exclude=<filename> ; do not act on hosts in the list (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
--hostlist-exclude=<filename> ; do not act on hosts in the list (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)
|
||||||
|
--hostlist-auto=<filename> ; detect DPI blocks and build hostlist automatically
|
||||||
|
--hostlist-auto-fail-threshold=<int> ; how many failed attempts cause hostname to be added to auto hostlist (default : 2)
|
||||||
|
--hostlist-auto-fail-time=<int> ; all failed attemps must be within these seconds (default : 60)
|
||||||
--split-http-req=method|host ; split http request at specified logical position.
|
--split-http-req=method|host ; split http request at specified logical position.
|
||||||
--split-pos=<numeric_offset> ; split at specified pos. split-http-req takes precedence over split-pos for http reqs.
|
--split-pos=<numeric_offset> ; split at specified pos. split-http-req takes precedence over split-pos for http reqs.
|
||||||
--split-any-protocol ; split not only http and https
|
--split-any-protocol ; split not only http and https
|
||||||
@ -716,6 +723,46 @@ tpws and nfqws reread lists on HUP signal.
|
|||||||
When filtering by domain name, daemons should run without filtering by ipset.
|
When filtering by domain name, daemons should run without filtering by ipset.
|
||||||
When using large regulator lists estimate the amount of RAM on the router !
|
When using large regulator lists estimate the amount of RAM on the router !
|
||||||
|
|
||||||
|
## **autohostlist** mode
|
||||||
|
|
||||||
|
This mode analyzes both client requests and server replies.
|
||||||
|
If a host is not in any list and a situation similar to block occurs host is automatically added to the special list both in memory and file.
|
||||||
|
Use exclude hostlist to prevent autohostlist triggering.
|
||||||
|
If it did happen - delete the undesired record from the file and restart tpws/nfqws or send them SIGHUP to force lists reload.
|
||||||
|
|
||||||
|
In case of nfqws it's required to redirect both incoming and outgoing traffic to the queue.
|
||||||
|
It's strongly recommended to use connbytes filter or nfqws will process gigabytes of incoming traffic.
|
||||||
|
For the same reason it's not recommended to use autohostlist mode in BSDs. BSDs do not support connbytes or similar mechanism.
|
||||||
|
|
||||||
|
nfqws и tpws detect the folowing situations :
|
||||||
|
1) [nfqws] Multiple retransmissions of the first request inside a TCP session having host.
|
||||||
|
2) [nfqws,tpws] RST in response to the first request.
|
||||||
|
3) [nfqws,tpws] HTTP redirect in response to the first http request with 2nd level domain diferent from the original.
|
||||||
|
4) [tpws] Client closes connection after first request without having server reply (no reponse from server, timeout).
|
||||||
|
|
||||||
|
To minimize false positives there's fail counter. If in specific time occurs more than specified number of fails
|
||||||
|
the host is added to the list. Then DPI bypass strategy start to apply immediately.
|
||||||
|
|
||||||
|
For the user autohostlist mode looks like this.
|
||||||
|
When for the first time user visits a blocked website it sees block page, connection reset
|
||||||
|
or browser hangs until timeout, then display a error.
|
||||||
|
User presses multiple times F5 causing browser to retry attempts.
|
||||||
|
After some retries a website opens and next time works as expected.
|
||||||
|
|
||||||
|
With autohostlist mode it's possible to use bypass strategies that break lots of sites.
|
||||||
|
If a site does not behave like blocked no fooling applies.
|
||||||
|
Otherwise it's nothing to lose.
|
||||||
|
|
||||||
|
However false positives still can occur in case target website is behaving abnormally
|
||||||
|
(may be due to DDoS attack or server malfunction). If it happens bypass strategy
|
||||||
|
may start to break the website. This situation can only be controlled manually.
|
||||||
|
Remove undesired domain from the autohostlist file, restart nfqws/tpws or send them SIGHUP.
|
||||||
|
Use exclude hostlist to prevent further auto additions.
|
||||||
|
|
||||||
|
If zapret scripts are used then autohostlist is `ipset/zapret-hosts-auto.txt`
|
||||||
|
and exlude list is `ipset/zapret-hosts-user-exclude.txt`. autohostlist mode
|
||||||
|
includes hostlist mode. You can use `ipset/zapret-hosts-user.txt`.
|
||||||
|
|
||||||
|
|
||||||
## Choosing parameters
|
## Choosing parameters
|
||||||
|
|
||||||
@ -763,6 +810,7 @@ Host filtering mode :
|
|||||||
none - apply fooling to all hosts
|
none - apply fooling to all hosts
|
||||||
ipset - limit fooling to hosts from ipset zapret/zapret6
|
ipset - limit fooling to hosts from ipset zapret/zapret6
|
||||||
hostlist - limit fooling to hosts from hostlist
|
hostlist - limit fooling to hosts from hostlist
|
||||||
|
autohostlist - hostlist mode + blocks auto detection
|
||||||
```
|
```
|
||||||
|
|
||||||
`MODE_FILTER=none`
|
`MODE_FILTER=none`
|
||||||
@ -857,6 +905,14 @@ 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 mode tuning.
|
||||||
|
|
||||||
|
```
|
||||||
|
AUTOHOSTLIST_RETRANS_THRESHOLD=3
|
||||||
|
AUTOHOSTLIST_FAIL_THRESHOLD=2
|
||||||
|
AUTOHOSTLIST_FAIL_TIME=60
|
||||||
|
```
|
||||||
|
|
||||||
Enable gzip compression for large lists. Used by ipset/*.sh scripts.
|
Enable gzip compression for large lists. Used by ipset/*.sh scripts.
|
||||||
|
|
||||||
`GZIP_LISTS=1`
|
`GZIP_LISTS=1`
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
zapret v.51
|
zapret v.52
|
||||||
|
|
||||||
English
|
English
|
||||||
-------
|
-------
|
||||||
@ -230,6 +230,10 @@ nfqws
|
|||||||
--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
||||||
--hostlist=<filename> ; применять дурение только к хостам из листа. может быть множество листов, они обьединяются. пустой обший лист = его отсутствие
|
--hostlist=<filename> ; применять дурение только к хостам из листа. может быть множество листов, они обьединяются. пустой обший лист = его отсутствие
|
||||||
--hostlist-exclude=<filename> ; не применять дурение к хостам из листа. может быть множество листов, они обьединяются
|
--hostlist-exclude=<filename> ; не применять дурение к хостам из листа. может быть множество листов, они обьединяются
|
||||||
|
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
|
||||||
|
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 2)
|
||||||
|
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
|
||||||
|
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
|
||||||
|
|
||||||
Параметры манипуляции могут сочетаться в любых комбинациях.
|
Параметры манипуляции могут сочетаться в любых комбинациях.
|
||||||
|
|
||||||
@ -602,6 +606,9 @@ tpws - это transparent proxy.
|
|||||||
; списков может быть множество, они обьединяются. пустой общий лист = его отсутствие
|
; списков может быть множество, они обьединяются. пустой общий лист = его отсутствие
|
||||||
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
|
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
|
||||||
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов, они обьединяются
|
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов, они обьединяются
|
||||||
|
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
|
||||||
|
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 2)
|
||||||
|
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
|
||||||
|
|
||||||
|
|
||||||
Параметры манипуляции могут сочетаться в любых комбинациях.
|
Параметры манипуляции могут сочетаться в любых комбинациях.
|
||||||
@ -710,7 +717,6 @@ tpws полностью работает на асинхронных сокет
|
|||||||
Это может быть полезно для скрытия факта использования VPN. Пониженный MTU - 1 из способов обнаружения
|
Это может быть полезно для скрытия факта использования VPN. Пониженный MTU - 1 из способов обнаружения
|
||||||
подозрительного подключения. С tcp proxy ваши соединения неотличимы от тех, что сделал бы сам шлюз.
|
подозрительного подключения. С tcp proxy ваши соединения неотличимы от тех, что сделал бы сам шлюз.
|
||||||
|
|
||||||
|
|
||||||
Способы получения списка заблокированных IP
|
Способы получения списка заблокированных IP
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
@ -895,6 +901,66 @@ tpws и nfqws решают нужно ли применять дурение в
|
|||||||
Если после запуска демона RAM под завязку или случаются oom, значит нужно отказаться от таких больших списков.
|
Если после запуска демона RAM под завязку или случаются oom, значит нужно отказаться от таких больших списков.
|
||||||
|
|
||||||
|
|
||||||
|
Режим фильтрации autohostlist
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Этот режим позволяет проанализировать как запросы со стороны клиента, так и ответы от сервера.
|
||||||
|
Если хост еще не находится ни в каких листах и обнаруживается ситуация, похожая на блокировку,
|
||||||
|
происходит автоматическое добавление хоста в список autohostlist как в памяти, так и в файле.
|
||||||
|
nfqws или tpws сами ведут этот файл.
|
||||||
|
Чтобы какой-то хост не смог попась в autohostlist используйте hostlist-exclude.
|
||||||
|
Если он все-же туда попал - удалите запись из файла вручную и перезапустите tpws/nfqws
|
||||||
|
или дайте им сигнал HUP, чтобы они перечитали листы.
|
||||||
|
tpws/nfqws сами назначают владельцем файла юзера, под которым они работают после сброса привилегий,
|
||||||
|
чтобы иметь возможность обновлять лист.
|
||||||
|
|
||||||
|
В случае nfqws данный режим требует перенаправления в том числе и входящего трафика.
|
||||||
|
Крайне рекомендовано использовать ограничитель connbytes, чтобы nfqws не обрабатывал гигабайты.
|
||||||
|
По этой же причине не рекомендуется использование режима на BSD системах. Там нет фильтра connbytes.
|
||||||
|
|
||||||
|
Как вообще могут вести себя DPI, получив "плохой запрос" и приняв решение о блокировке :
|
||||||
|
|
||||||
|
1) Зависание : просто отмораживается, блокируя прохождение пакетов по TCP каналу.
|
||||||
|
2) RST : отправляет RST клиенту и/или серверу
|
||||||
|
3) Редирект : (только для http) отправляет редирект на сайт-заглушку
|
||||||
|
4) Подмена сертификата : (только для https) полный перехват TLS сеанса с попыткой всунуть что-то
|
||||||
|
свое клиенту. Применяется нечасто, поскольку броузеры на такое ругаются.
|
||||||
|
|
||||||
|
nfqws и tpws могут сечь варианты 1-3, 4 они не распознают.
|
||||||
|
Всилу специфики работы с отдельными пакетами или с TCP каналом tpws и nfqws распознают эти ситуации
|
||||||
|
по-разному.
|
||||||
|
Что считается ситуацией, похожей на блокировку :
|
||||||
|
1) [nfqws] Несколько ретрансмиссий первого запроса в TCP сеансе, в котором имеется host.
|
||||||
|
2) [nfqws,tpws] RST, пришедший в ответ на первый запрос с хостом.
|
||||||
|
3) [nfqws,tpws] HTTP редирект, пришедший в ответ на первый запрос с хостом, на глобальный адрес
|
||||||
|
с доменом 2 уровня, не совпадающим с доменом 2 уровня оригинального запроса.
|
||||||
|
4) [tpws] закрытие соединения клиентом после отправки первого запроса с хостом, если не было на него
|
||||||
|
ответа со стороны сервера. Это обычно случается по таймауту, когда нет ответа (случай "зависание").
|
||||||
|
|
||||||
|
Чтобы снизить вероятность ложных срабатываний, имеется счетчик ситуаций, похожих на блокировку.
|
||||||
|
Если за определенное время произойдет более определенного их количества, хост считается заблокированным
|
||||||
|
и заносится в autohostlist. По нему сразу же начинает работать стратегия по обходу блокировки.
|
||||||
|
|
||||||
|
На практике работа с данным режимом выглядит так.
|
||||||
|
Первый раз пользователь заходит на сайт и получает заглушку, сброс соединения или броузер подвисает,
|
||||||
|
вываливаясь по таймауту с сообщением о невозможности загрузить страницу.
|
||||||
|
Надо долбить F5, принуждая броузер повторять попытки. После некоторой попытки сайт
|
||||||
|
начинает работать, и дальше он будет работать всегда.
|
||||||
|
|
||||||
|
С этим режимом можно использовать техники обхода, ломающие значительное количество сайтов.
|
||||||
|
Если сайт не ведет себя как заблокированный, значит обход применен не будет.
|
||||||
|
В противном случае терять все равно нечего.
|
||||||
|
Однако, могут быть временные сбои сервера, приводящие к ситуации, аналогичной блокировке.
|
||||||
|
Могут происходит ложные срабатывания. Если такое произошло, стратегия может начать ломать
|
||||||
|
незаблокированный сайт. Эту ситуацию, увы, придется вам контролировать вручную.
|
||||||
|
Заносите такие домены в ipset/zapret-hosts-user-exclude.txt, чтобы избежать повторения.
|
||||||
|
|
||||||
|
Скрипты zapret ведут autohostlist в ipset/zapret-hosts-auto.txt.
|
||||||
|
install_easy.sh при апгрейде zapret сохраняет этот файл.
|
||||||
|
Режим autohostlist включает в себя режим hostlist.
|
||||||
|
Можно вести ipset/zapret-hosts-user.txt, ipset/zapret-hosts-user.txt.
|
||||||
|
|
||||||
|
|
||||||
Проверка провайдера
|
Проверка провайдера
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
@ -968,6 +1034,7 @@ MODE_QUIC=0
|
|||||||
none - применять дурение ко всем хостам
|
none - применять дурение ко всем хостам
|
||||||
ipset - ограничить дурение ipset-ом zapret/zapret6
|
ipset - ограничить дурение ipset-ом zapret/zapret6
|
||||||
hostlist - ограничить дурение списком хостов из файла
|
hostlist - ограничить дурение списком хостов из файла
|
||||||
|
autohostlist - режим hostlist + распознавание блокировок и ведения автоматического листа
|
||||||
|
|
||||||
MODE_FILTER=none
|
MODE_FILTER=none
|
||||||
|
|
||||||
@ -1046,6 +1113,11 @@ IPSET_HOOK="/etc/zapret.ipset.hook"
|
|||||||
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_RETRANS_THRESHOLD=3
|
||||||
|
AUTOHOSTLIST_FAIL_THRESHOLD=2
|
||||||
|
AUTOHOSTLIST_FAIL_TIME=60
|
||||||
|
|
||||||
Включить или выключить сжатие больших листов в скриптах ipset/*.sh. По умолчанию включено.
|
Включить или выключить сжатие больших листов в скриптах ipset/*.sh. По умолчанию включено.
|
||||||
GZIP_LISTS=1
|
GZIP_LISTS=1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user