readme: remove ___

This commit is contained in:
bol-van 2024-11-03 16:56:39 +03:00
parent 1987209613
commit 4559169e78

View File

@ -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 могут выполняться какие угодно задачи. От простого веб сайта до навороченной системы собственной разработки.