mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-30 05:50:53 +03:00
autohostlist mode
This commit is contained in:
parent
e34dfe692e
commit
0c81009e29
@ -247,3 +247,7 @@ HEX string support in addition to binary files.
|
||||
v51
|
||||
|
||||
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
|
||||
--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-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.
|
||||
@ -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-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-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
|
||||
@ -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 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
|
||||
|
||||
@ -763,6 +810,7 @@ Host filtering mode :
|
||||
none - apply fooling to all hosts
|
||||
ipset - limit fooling to hosts from ipset zapret/zapret6
|
||||
hostlist - limit fooling to hosts from hostlist
|
||||
autohostlist - hostlist mode + blocks auto detection
|
||||
```
|
||||
|
||||
`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"
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
`GZIP_LISTS=1`
|
||||
|
@ -1,4 +1,4 @@
|
||||
zapret v.51
|
||||
zapret v.52
|
||||
|
||||
English
|
||||
-------
|
||||
@ -230,6 +230,10 @@ nfqws
|
||||
--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
||||
--hostlist=<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.
|
||||
--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 из способов обнаружения
|
||||
подозрительного подключения. С tcp proxy ваши соединения неотличимы от тех, что сделал бы сам шлюз.
|
||||
|
||||
|
||||
Способы получения списка заблокированных IP
|
||||
-------------------------------------------
|
||||
|
||||
@ -895,6 +901,66 @@ tpws и nfqws решают нужно ли применять дурение в
|
||||
Если после запуска демона 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 - применять дурение ко всем хостам
|
||||
ipset - ограничить дурение ipset-ом zapret/zapret6
|
||||
hostlist - ограничить дурение списком хостов из файла
|
||||
autohostlist - режим hostlist + распознавание блокировок и ведения автоматического листа
|
||||
|
||||
MODE_FILTER=none
|
||||
|
||||
@ -1046,6 +1113,11 @@ IPSET_HOOK="/etc/zapret.ipset.hook"
|
||||
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
|
||||
IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5"
|
||||
|
||||
Настройка режима autohostlist.
|
||||
AUTOHOSTLIST_RETRANS_THRESHOLD=3
|
||||
AUTOHOSTLIST_FAIL_THRESHOLD=2
|
||||
AUTOHOSTLIST_FAIL_TIME=60
|
||||
|
||||
Включить или выключить сжатие больших листов в скриптах ipset/*.sh. По умолчанию включено.
|
||||
GZIP_LISTS=1
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user