mirror of
https://github.com/bol-van/zapret.git
synced 2025-02-18 11:02:21 +03:00
doc: fix migrating to .md. iter 2
This commit is contained in:
parent
f00474ed12
commit
483158f286
@ -54,8 +54,8 @@ For english version refer to docs/readme.eng.txt
|
||||
|
||||
Подробнее про DPI :
|
||||
|
||||
https://habr.com/ru/post/335436
|
||||
https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
|
||||
* https://habr.com/ru/post/335436
|
||||
* https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
|
||||
|
||||
|
||||
Что сейчас происходит в России
|
||||
@ -66,10 +66,13 @@ For english version refer to docs/readme.eng.txt
|
||||
Сейчас время простых iptables окончательно ушло. Везде активный DPI ТСПУ, но кое-где
|
||||
могут оставаться невыключенными дополнительные старые DPI из зоопарка.
|
||||
В этом случае приходится обходить сразу несколько DPI.
|
||||
|
||||
Все больше становится внереестровых блокировок, о которых вы узнаете только по факту
|
||||
недоступности чего-либо, в списках этого нет.
|
||||
|
||||
Применяются блокировки некоторых диапазонов ip адресов (автономный обход невозможен)
|
||||
и протоколов (VPN).
|
||||
|
||||
На некоторых диапазонах IP используется более строгий фильтр, распознающий попытки
|
||||
обмана через сегментацию. Должно быть это связано с некоторыми сервисами, которые
|
||||
пытаются таким образом обмануть DPI.
|
||||
@ -128,6 +131,7 @@ tpws запускается под пользователем "tpws", для н
|
||||
|
||||
tpws может использоваться в режиме socks proxy. В этом случае iptables не нужны, а нужно прописать socks
|
||||
в настройки программы (например, броузера), с которой будем обходить блокировки.
|
||||
|
||||
transparent proxy отличается от socks именно тем, что в варианте transparent настраивать клиентские программы не нужно.
|
||||
|
||||
|
||||
@ -386,6 +390,7 @@ fakeknown отличается от fake тем, что применяется
|
||||
2. поддельная 1-я часть пакета, поле данных заполнено нулями
|
||||
3. 1-я часть пакета
|
||||
4. поддельная 1-я часть пакета, поле данных заполнено нулями. отсылка 2-й раз.
|
||||
|
||||
Оригинальный пакет дропается всегда. Параметр --dpi-desync-split-pos позволяет указать байтовую позицию, на которой
|
||||
происходит разбивка. По умолчанию - 2. Если позиция больше длины пакета, позиция выбирается 1.
|
||||
Этой последовательностью для DPI максимально усложняется задача реконструкции начального сообщения,
|
||||
@ -398,6 +403,7 @@ fakeknown отличается от fake тем, что применяется
|
||||
2. 1-я часть пакета
|
||||
3. поддельная 1-я часть пакета, поле данных заполнено нулями. отсылка 2-й раз.
|
||||
4. 2-я часть пакета
|
||||
|
||||
Режим split2 отключает отправку поддельных частей.
|
||||
Он может быть использован как более быстрая альтернатива --wsize.
|
||||
|
||||
@ -497,8 +503,10 @@ mark нужен, чтобы сгенерированный поддельный
|
||||
|
||||
В документации по geneva это называется "TCB turnaround". Попытка ввести DPI в заблуждение относительно
|
||||
ролей клиента и сервера.
|
||||
|
||||
!!! Поскольку режим нарушает работу NAT, техника может сработать только если между атакующим устройством
|
||||
и DPI нет NAT. Атака не сработает через NAT роутер, но может сработать с него.
|
||||
|
||||
Для реализации атаки в linux обязательно требуется отключить стандартное правило firewall,
|
||||
дропающее инвалидные пакеты в цепочке OUTPUT. Например : -A OUTPUT -m state --state INVALID -j DROP
|
||||
В openwrt можно отключить drop INVALID в OUTPUT и FORWARD через опцию в /etc/config/firewall :
|
||||
@ -786,6 +794,7 @@ split-pos по умолчанию работает только на http и TLS
|
||||
когда сервер получил запрос и полностью вернул ответ. Значит запрос фактически был не только отослан,
|
||||
но и принят другой стороной, а следовательно буфер отсылки пуст, и следующие 2 send приведут
|
||||
к отсылке сегментов данных разными ip пакетами.
|
||||
|
||||
Резюме : tpws гарантирует сплит только за счет раздельных вызовов send, что на практике
|
||||
вполне достаточно для протоколов http(s).
|
||||
|
||||
@ -838,8 +847,8 @@ tpws поддерживает эту возможность асинхронно
|
||||
Если задан параметр "--no-resolve", то подключения по именам хостов запрещаются, а пул ресолверов не создается.
|
||||
Тем самым экономятся ресурсы.
|
||||
|
||||
Параметр --hostpad=<bytes> добавляет паддинг-хедеров перед Host: на указанное количество байтов.
|
||||
Если размер <bytes> слишком большой, то идет разбивка на разные хедеры по 2K.
|
||||
Параметр --hostpad=\<bytes\> добавляет паддинг-хедеров перед Host: на указанное количество байтов.
|
||||
Если размер \<bytes\> слишком большой, то идет разбивка на разные хедеры по 2K.
|
||||
Общий буфер приема http запроса - 64K, больший паддинг не поддерживается, да и http сервера
|
||||
такое уже не принимают.
|
||||
Полезно против DPI, выполняющих реассемблинг TCP с ограниченным буфером.
|
||||
@ -897,15 +906,17 @@ tpws поддерживает эту возможность асинхронно
|
||||
-------------------------------------------
|
||||
|
||||
!!! nftables не могут работать с ipset-ами. Собственный аналогичный механизм требует огромного количество RAM
|
||||
!!! для загрузки больших листов. Например, для загона 100K записей в nfset не хватает даже 256 Mb.
|
||||
!!! Если вам нужны большие листы на домашних роутерах, откатывайтесь на iptables+ipset.
|
||||
для загрузки больших листов. Например, для загона 100K записей в nfset не хватает даже 256 Mb.
|
||||
Если вам нужны большие листы на домашних роутерах, откатывайтесь на iptables+ipset.
|
||||
|
||||
1) Внесите заблокированные домены в ipset/zapret-hosts-user.txt и запустите ipset/get_user.sh
|
||||
|
||||
На выходе получите ipset/zapret-ip-user.txt с IP адресами.
|
||||
|
||||
Cкрипты с названием get_reestr_* оперируют дампом реестра заблокированных сайтов :
|
||||
|
||||
2) ipset/get_reestr_resolve.sh получает список доменов от rublacklist и дальше их ресолвит в ip адреса
|
||||
|
||||
в файл ipset/zapret-ip.txt.gz. В этом списке есть готовые IP адреса, но судя во всему они там в точности в том виде,
|
||||
что вносит в реестр РосКомПозор. Адреса могут меняться, позор не успевает их обновлять, а провайдеры редко
|
||||
банят по IP : вместо этого они банят http запросы с "нехорошим" заголовком "Host:" вне зависимости
|
||||
@ -995,11 +1006,13 @@ ip2net
|
||||
Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей
|
||||
с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в stdout.
|
||||
|
||||
```
|
||||
-4 ; лист - ipv4 (по умолчанию)
|
||||
-6 ; лист - ipv6
|
||||
--prefix-length=min[-max] ; диапазон рассматриваемых длин префиксов. например : 22-30 (ipv4), 56-64 (ipv6)
|
||||
--v4-threshold=mul/div ; ipv4 : включать подсети, в которых заполнено по крайней мере mul/div адресов. например : 3/4
|
||||
--v6-threshold=N ; ipv6 : минимальное количество ip для создания подсети
|
||||
```
|
||||
|
||||
В списке могут присутствовать записи вида ip/prefix и ip1-ip2. Такие записи выкидываются в stdout без изменений.
|
||||
Они принимаются командой ipset. ipset умеет для листов hash:net из ip1-ip2 делать оптимальное покрытие ip/prefix.
|
||||
@ -1013,21 +1026,27 @@ ip2net фильтрует входные данные, выкидывая неп
|
||||
Сначала в указанном диапазоне длин префиксов ищутся подсети, в которых количество адресов - максимально.
|
||||
Если таких сетей найдено несколько, берется наименьшая сеть (префикс больше).
|
||||
Например, заданы параметры v6_threshold=2 prefix_length=32-64, имеются следующие ipv6 :
|
||||
```
|
||||
1234:5678:aaaa::5
|
||||
1234:5678:aaaa::6
|
||||
1234:5678:aaac::5
|
||||
Результат будет :
|
||||
1234:5678:aaa8::/45
|
||||
```
|
||||
Эти адреса так же входят в подсеть /32. Однако, нет смысла проходиться ковровой бомбардировкой,
|
||||
когда те же самые адреса вполне влезают в /45 и их ровно столько же.
|
||||
Если изменить v6_threshold=4, то результат будет :
|
||||
```
|
||||
1234:5678:aaaa::5
|
||||
1234:5678:aaaa::6
|
||||
1234:5678:aaac::5
|
||||
```
|
||||
То есть ip не объединятся в подсеть, потому что их слишком мало.
|
||||
Если изменить prefix_length=56-64, результат будет :
|
||||
```
|
||||
1234:5678:aaaa::/64
|
||||
1234:5678:aaac::5
|
||||
```
|
||||
|
||||
Требуемое процессорное время для вычислений сильно зависит от ширины диапазона длин префиксов, размера искомых подсетей и длины листа.
|
||||
Если ip2net думает слишком долго, не используйте слишком большие подсети и уменьшите диапазон длин префиксов.
|
||||
@ -1052,10 +1071,14 @@ ip2net фильтрует входные данные, выкидывая неп
|
||||
|
||||
В системе запуска это обыграно следующим образом.
|
||||
Присутствуют 2 include списка :
|
||||
```
|
||||
ipset/zapret-hosts-users.txt.gz или ipset/zapret-hosts-users.txt
|
||||
ipset/zapret-hosts.txt.gz или ipset/zapret-hosts.txt
|
||||
```
|
||||
и 1 exclude список
|
||||
```
|
||||
ipset/zapret-hosts-users-exclude.txt.gz или ipset/zapret-hosts-users-exclude.txt
|
||||
```
|
||||
|
||||
При режиме фильтрации MODE_FILTER=hostlist система запуска передает nfqws или tpws все листы, файлы которых присутствуют.
|
||||
Если вдруг листы include присутствуют, но все они пустые, то работа аналогична отсутствию include листа.
|
||||
@ -1065,7 +1088,7 @@ ipset/zapret-hosts-users-exclude.txt.gz или ipset/zapret-hosts-users-exclude.
|
||||
Поддомены учитываются автоматически. Например, строчка "ru" вносит в список "*.ru". Строчка "*.ru" в списке не сработает.
|
||||
|
||||
Список доменов РКН может быть получен скриптами ipset/get_reestr_hostlist.sh или ipset/get_antizapret_domains.sh
|
||||
- кладется в ipset/zapret-hosts.txt.gz.
|
||||
\- кладется в ipset/zapret-hosts.txt.gz.
|
||||
|
||||
Чтобы обновить списки, перезапускать nfqws или tpws не нужно. Обновляете файлы, затем даете сигнал HUP.
|
||||
По HUP листы будут перечитаны. Если вдруг какого-то листа не окажется, процесс завершится с ошибкой.
|
||||
@ -1399,8 +1422,10 @@ FLOWOFFLOAD=donttouch
|
||||
Можно индивидуально отключить ipv4 или ipv6. Если параметр закомментирован или не равен "1",
|
||||
использование протокола разрешено.
|
||||
|
||||
```
|
||||
#DISABLE_IPV4=1
|
||||
DISABLE_IPV6=1
|
||||
```
|
||||
|
||||
Количество потоков для многопоточного DNS ресолвера mdig (1..100).
|
||||
Чем их больше, тем быстрее, но не обидится ли на долбежку ваш DNS сервер ?
|
||||
@ -1415,8 +1440,10 @@ TMPDIR=/opt/zapret/tmp
|
||||
|
||||
Опции для создания ipset-ов и nfset-ов
|
||||
|
||||
```
|
||||
SET_MAXELEM=262144
|
||||
IPSET_OPT="hashsize 262144 maxelem 2097152"
|
||||
```
|
||||
|
||||
Хук, позволяющий внести ip адреса динамически. $1 = имя таблицы
|
||||
Адреса выводятся в stdout. В случае nfset автоматически решается проблема возможного пересечения интервалов.
|
||||
@ -1456,8 +1483,10 @@ GZIP_LISTS=1
|
||||
На BSD системах с PF нет автоматической загрузки. Там нужно указать команду явно : pfctl -f /etc/pf.conf
|
||||
На более новых pfctl (есть в новых FreeBSD, нет в OpenBSD 6.8) можно дать команду загрузки только таблиц : pfctl -Tl -f /etc/pf.conf
|
||||
"-" означает отключение загрузки листов даже при наличии поддерживаемого backend.
|
||||
```
|
||||
#LISTS_RELOAD="pfctl -f /etc/pf.conf"
|
||||
#LISTS_RELOAD=-
|
||||
```
|
||||
|
||||
В openwrt существует сеть по умолчанию 'lan'. Только трафик с этой сети будет перенаправлен на tpws.
|
||||
Но возможно задать другие сети или список сетей :
|
||||
@ -1525,16 +1554,22 @@ nftables сводят практически на нет конфликты ме
|
||||
|
||||
Посмотреть set-ы интерфейсов, относящихся к lan, wan и wan6. По ним идет завертывание трафика.
|
||||
А так же таблицу flow table с именами интерфейсов ingress hook.
|
||||
```
|
||||
/opt/zapret/init.d/sysv/zapret list_ifsets
|
||||
```
|
||||
|
||||
Обновить set-ы интерфейсов, относящихся к lan, wan и wan6.
|
||||
Для традиционных linux список интерфейсов берется из переменных конфига IFACE_LAN, IFACE_WAN.
|
||||
Для openwrt определяется автоматически. Множество lanif может быть расширено параметром OPENWRT_LAN.
|
||||
Все интерфейсы lan и wan так же добавляются в ingress hook от flow table.
|
||||
```
|
||||
/opt/zapret/init.d/sysv/zapret reload_ifsets
|
||||
```
|
||||
|
||||
Просмотр таблицы без содержимого set-ов. Вызывает nft -t list table inet zapret
|
||||
```
|
||||
/opt/zapret/init.d/sysv/zapret list_table
|
||||
```
|
||||
|
||||
Так же возможно прицепиться своим скриптом к любой стадии применения и снятия фаервола со стороны zapret скриптов :
|
||||
|
||||
@ -1912,6 +1947,7 @@ vpn трафик или применить другие типы VPN, более
|
||||
|
||||
VPS можно прибрести в множестве мест. Существуют специализированные на поиске предложений VPS порталы.
|
||||
Например, вот этот : https://vps.today/
|
||||
|
||||
Для персонального VPN сервера обычно достаточно самой минимальной конфигурации, но с безлимитным трафиком или
|
||||
с большим лимитом по трафику (терабайты). Важен и тип VPS. Openvz подойдет для openvpn, но
|
||||
вы не поднимете на нем wireguard, ipsec, то есть все, что требует kernel mode.
|
||||
|
Loading…
Reference in New Issue
Block a user