diff --git a/docs/readme.md b/docs/readme.md index 525ae72..aca98b8 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -2,13 +2,11 @@ # Multilanguage README -___ [![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.en.md) [![ru](https://img.shields.io/badge/lang-ru-green.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.md) ## Зачем это нужно -___ Автономное средство противодействия DPI, которое не требует подключения каких-либо сторонних серверов. Может помочь обойти блокировки или замедление сайтов http(s), сигнатурный анализ tcp и udp протоколов, например с целью блокировки VPN. @@ -21,16 +19,12 @@ VPN. ## Быстрый старт -___ - > *Linux/openwrt:* docs/quick_start.txt > >*Windows:* docs/quick_start_windows.txt ## Как это работает -___ - В самом простейшем случае вы имеете дело с пассивным DPI. Пассивный DPI может читать трафик из потока, может инжектить свои пакеты, но не может блокировать проходящие пакеты. Если запрос "плохой", пассивный DPI инжектит пакет RST, опционально дополняя его пакетом http redirect. Если фейк пакет инжектится только для клиента, в этом случае можно @@ -61,8 +55,6 @@ https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf ## Что сейчас происходит в России -___ - Раньше, до внедрения повсеместных систем ТСПУ, использовался зоопарк различных DPI у провайдеров. Какие-то были активными, какие-то пассивными. Сейчас время простых iptables окончательно ушло. Везде активный DPI ТСПУ, но кое-где могут оставаться невыключенными дополнительные старые DPI из зоопарка. В этом случае приходится обходить сразу несколько @@ -73,7 +65,6 @@ DPI. Все больше становится внереестровых бло ## Как это реализовать на практике в системе linux -___ Если кратко, то варианты можно классифицировать по следующей схеме : 1) Пассивный DPI, не отправляющий RST серверу. Помогут индивидуально настраиваемые под провайдера команды iptables. На @@ -162,8 +153,6 @@ offload соединения, которые должны попасть на tp ## Особенности применения ip6tables -___ - ip6tables работают почти точно так же, как и ipv4, но есть ряд важных нюансов. В DNAT следует брать адрес --to в квадратные скобки. Например : @@ -175,8 +164,6 @@ NFQUEUE работает без изменений. ## Особенности применения nftables -___ - Более подробно преимущества и недостатки nftables применительно к данной системе описаны в docs/nftables_notes.txt Если коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM. Остальные рассматриваемые здесь функции могут быть перенесены на nftables. @@ -193,8 +180,6 @@ ___ ## Когда это работать не будет -___ - * Если подменяется DNS. С этой проблемой легко справиться. * Если блокировка осуществляется по IP. * Если соединение проходит через фильтр, способный реконструировать TCP соединение, и который следует всем стандартам. @@ -209,8 +194,6 @@ ___ ## nfqws -___ - Эта программа - модификатор пакетов и обработчик очереди NFQUEUE. Для BSD систем существует адаптированный вариант - dvtws, собираемый из тех же исходников (см. bsd.txt). @@ -299,7 +282,6 @@ dvtws, собираемый из тех же исходников (см. bsd.txt ### АТАКА ДЕСИНХРОНИЗАЦИИ DPI -___ Суть ее в следующем. После выполнения tcp 3-way handshake идет первый пакет с данными от клиента. Там обычно `GET / ...` или TLS ClientHello. Мы дропаем этот пакет, заменяя чем-то другим. Это может быть поддельная версия с безобидным, но валидным запросом http или https (вариант `fake`), пакет сброса соединения (варианты `rst`, `rstack`), разбитый на части @@ -468,7 +450,6 @@ mark нужен, чтобы сгенерированный поддельный 4-6 - на случай ретрансмиссии или запроса длиной в несколько пакетов (TLSClientHello с kyber, например) ### КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ -___ В параметре dpi-desync можно указать до 3 режимов через запятую. 0 фаза предполагает работу на этапе установления соединения. Может быть `synack` или `syndata`. @@ -478,7 +459,7 @@ ___ Может быть полезно, когда у провайдера стоит не один DPI. ### РЕЖИМ SYNACK -___ + В документации по geneva это называется "TCB turnaround". Попытка ввести DPI в заблуждение относительно ролей клиента и сервера. !!! Поскольку режим нарушает работу NAT, техника может сработать только если между атакующим устройством @@ -506,19 +487,19 @@ ip6tables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT Остальные режимы тоже не сработают. Если поймете, что вам synack не нужен, обязательно верните правило дропа INVALID. ### РЕЖИМ SYNDATA -___ + Тут все просто. Добавляются данные в пакет SYN. Все ОС их игнорируют, если не используется TCP fast open (TFO), а DPI может воспринять, не разобравшись есть там TFO или нет. Оригинальные соединения с TFO не трогаются, поскольку это их точно сломает. Без уточняющего параметра добавляются 16 нулевых байтов. ### ВИРТУАЛЬНЫЕ МАШИНЫ -___ + Изнутри VM от virtualbox и vmware в режиме NAT не работают многие техники пакетной магии nfqws. Принудительно заменяется ttl, не проходят фейк пакеты. Необходимо настроить сеть в режиме bridge. ### CONNTRACK -___ + nfqws оснащен ограниченной реализацией слежения за состоянием tcp соединений (conntrack). Он включается для реализации некоторых методов противодействия DPI. conntrack способен следить за фазой соединения : SYN,ESTABLISHED,FIN, количеством пакетов в каждую сторону, @@ -573,7 +554,7 @@ window size итоговый размер окна стал максимальн Если соединение выпало из conntrack и задана опция `--dpi-desync-cutoff`, `dpi desync` применяться не будет. ### РЕАССЕМБЛИНГ -___ + nfqws поддерживает реассемблинг некоторых видов запросов. На текущий момент это TLS и QUIC ClientHello. Они бывает длинными, если в chrome включить пост-квантовую криптографию tls-kyber, и занимают как правило 2 или 3 пакета. kyber включен по умолчанию, начиная с chromium 124. @@ -593,7 +574,7 @@ chrome рандомизирует фингерпринт TLS. SNI может о а последний пакет разбивается на 2 сегмента. В итоге имеем фейк в начале и 3 реальных сегмента. ### ПОДДЕРЖКА UDP -___ + Атаки на udp более ограничены в возможностях. udp нельзя фрагментировать иначе, чем на уровне ip. Для UDP действуют только режимы десинхронизации `fake`, `hopbyhop`, `destopt`, `ipfrag1`, `ipfrag2`, `udplen`, `tamper`. Возможно сочетание `fake`, `hopbyhop`, `destopt` с `ipfrag2`, `fake`, `fakeknown` с udplen и tamper. @@ -613,7 +594,7 @@ ___ По умолчанию fake наполнение - 64 нуля. Можно указать файл в `--dpi-desync-fake-unknown-udp`. ### IP ФРАГМЕНТАЦИЯ -___ + Современная сеть практически не пропускает фрагментированные tcp на уровне ip. На udp с этим дело получше, поскольку некоторые udp протоколы могут опираться на этот механизм (IKE старых версий). Однако, кое-где бывает, что режут и фрагментированный udp. @@ -670,7 +651,7 @@ options ip6table_raw raw_before_defrag=1 Хук должен быть с приоритетом 101 или выше. ### МНОЖЕСТВЕННЫЕ СТРАТЕГИИ -___ + `nfqws` способен по-разному реагировать на различные запросы и применять разные стратегии дурения. Это реализовано посредством поддержки множества профилей дурения. Профили разделяются в командной строке параметром `--new`. Первый профиль создается автоматически. @@ -705,7 +686,6 @@ L7 протокол становится известен обычно посл Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset. ## tpws -___ tpws - это transparent proxy. ``` @@ -952,7 +932,7 @@ TCP_USER_TIMEOUT. Под таймаутом подразумевается вр Поддерживается только на Linux и MacOS. ### МНОЖЕСТВЕННЫЕ СТРАТЕГИИ -___ + Работают аналогично `nfqws`, кроме некоторых моментов. Нет параметра `--filter-udp`, поскольку `tpws` udp не поддерживает. Методы нулевой фазы (`--mss`) могут работать по хостлисту в одном единственном случае: @@ -967,7 +947,6 @@ ___ Смотрите вывод `--debug`, чтобы убедиться в правильности настроек. ## Способы получения списка заблокированных IP -___ !!! nftables не могут работать с ipset-ами. Собственный аналогичный механизм требует огромного количество RAM !!! для загрузки больших листов. Например, для загона 100K записей в nfset не хватает даже 256 Mb. @@ -1065,7 +1044,6 @@ ipfw таблицы в отличие от ipset могут содержать LISTS_RELOAD=- отключает перезагрузку листов. ## ip2net -___ Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в `stdout`. @@ -1117,7 +1095,6 @@ ip2net фильтрует входные данные, выкидывая неп Не надо делать такое: 5000000/10000000. 1/2 - гораздо лучше. ## mdig -___ Программа предназначена для многопоточного ресолвинга больших листов через системный DNS. Она берет из stdin список доменов и выводит в stdout результат ресолвинга. Ошибки выводятся в stderr. @@ -1140,7 +1117,6 @@ mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Conte ``` ## Фильтрация по именам доменов -___ Альтернативой ipset является использование tpws или nfqws со списком доменов. Оба демона принимают неограниченное количество листов include (`--hostlist`) и exclude (`--hostlist-exclude`). @@ -1185,7 +1161,6 @@ tpws и nfqws решают нужно ли применять дурение в Если после запуска демона RAM под завязку или случаются oom, значит нужно отказаться от таких больших списков. ## Режим фильтрации autohostlist -___ Этот режим позволяет проанализировать как запросы со стороны клиента, так и ответы от сервера. Если хост еще не находится ни в каких листах и обнаруживается ситуация, похожая на блокировку, @@ -1259,7 +1234,6 @@ linux, но через раз приобретает статус INVALID в con Можно вести `ipset/zapret-hosts-user.txt`, `ipset/zapret-hosts-user-exclude.txt`. ## Проверка провайдера -___ Перед настройкой нужно провести исследование какую бяку устроил вам ваш провайдер. @@ -1418,7 +1392,6 @@ curl: (28) Connection timed out after 2002 milliseconds ``` ## Выбор параметров -___ Файл `/opt/zapret/config` используется различными компонентами системы и содержит основные настройки. Его нужно просмотреть и при необходимости отредактировать. @@ -1659,7 +1632,6 @@ IFACE_WAN6="henet ipsec0" `IFACE_LAN="eth0 eth1 eth2"` ## Прикручивание к системе управления фаерволом или своей системе запуска -___ Если вы используете какую-то систему управления фаерволом, то она может вступать в конфликт с имеющимся скриптом запуска. При повторном применении правил она могла бы поломать настройки iptables от zapret. @@ -1714,7 +1686,6 @@ nfset-ы принадлежат только одной таблице, след а значит нужно синхронизироваться с применением/снятием правил со стороны zapret скриптов. ## Вариант custom -___ custom скрипты - это маленькие shell программы, управляющие нестандартными режимами применения zapret или частными случаями, которые не могут быть интегрированы в основную часть без загромождения и замусоривания кода. @@ -1785,7 +1756,6 @@ zapret_custom_firewall_nft поднимает правила nftables. типа наличия/отсутствия ipv6, является ли система роутером, имена интерфейсов, ...Хелперы это учитывают. Вам нужно сосредоточиться лишь на фильтрах `{ip,nf}tables` и параметрах демонов. ## Простая установка -___ `install_easy.sh` автоматизирует ручные варианты процедур установки (см manual_setup.txt). Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS. @@ -1820,7 +1790,6 @@ ___ ## Простая установка на openwrt -___ Работает только если у вас на роутере достаточно места. @@ -1841,7 +1810,6 @@ ___ ## Установка на openwrt в режиме острой нехватки места на диске -___ Требуется около 120-200 кб на диске. Придется отказаться от всего, кроме `tpws`. @@ -1898,7 +1866,6 @@ ___ ## Android -___ Без рута забудьте про nfqws и tpws в режиме transparent proxy. tpws будет работать только в режиме `--socks`. @@ -1982,7 +1949,6 @@ Wifi сеть - обычно `wlan0`. ## Мобильные модемы и роутеры huawei -___ Устройства типа E3372, E8372, E5770 разделяют общую идеологию построения системы. Имеются 2 вычислительных ядра. Одно ядро выполняет vxworks, другое - linux. @@ -2038,18 +2004,15 @@ curl: (7) Failed to connect to www.ru port 80: Host is unreachable ## FreeBSD, OpenBSD, MacOS -___ Описано в docs/bsd.txt ## Windows -___ Описано в docs/windows.txt ## Другие прошивки -___ Для статических бинариков не имеет значения на чем они запущены: PC, android, приставка, роутер, любой другой девайс. Подойдет любая прошивка, дистрибутив linux. Статические бинарники запустятся на всем. @@ -2112,7 +2075,6 @@ Openwrt является одной из немногих относительн ## Обход блокировки через сторонний хост -___ Если не работает автономный обход, приходится перенаправлять трафик через сторонний хост. Предлагается использовать прозрачный редирект через socks5 посредством `iptables+redsocks`, либо `iptables+iproute+vpn`. @@ -2121,7 +2083,6 @@ ___ ## Почему стоит вложиться в покупку VPS -___ VPS - это виртуальный сервер. Существует огромное множество датацентров, предлагающих данную услугу. На VPS могут выполняться какие угодно задачи. От простого веб сайта до навороченной системы собственной разработки.