|
|
|
@ -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. |
|
|
|
|