mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-26 12:10:53 +03:00
readme: remove ___
This commit is contained in:
parent
1987209613
commit
4559169e78
@ -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 могут выполняться какие угодно задачи. От простого веб сайта до навороченной системы собственной разработки.
|
||||
|
Loading…
Reference in New Issue
Block a user