doc: fix migrating to .md. iter 2

This commit is contained in:
UnkwUsr 2024-08-05 03:36:40 +03:00
parent f00474ed12
commit 483158f286

View File

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