mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-29 21:40:52 +03:00
Compare commits
11 Commits
f2ea38cf93
...
bbeee9d640
Author | SHA1 | Date | |
---|---|---|---|
|
bbeee9d640 | ||
|
466a142ebe | ||
|
8aa8bb5941 | ||
|
ffa701e497 | ||
|
e0063eecd5 | ||
|
2d530d5f63 | ||
|
95b3830afd | ||
|
0ea3215187 | ||
|
27745a3747 | ||
|
c68b75d4ac | ||
|
f4d31cdcb6 |
@ -1308,3 +1308,10 @@ Dont ask me how to do it. Its different for all firmwares and requires studying.
|
||||
Find manual or reverse engineer yourself.
|
||||
Check for race conditions. Firmware can clear or modify iptables after your startup script.
|
||||
If this is the case then run another script in background and add some delay there.
|
||||
|
||||
## Donations
|
||||
|
||||
Are welcome here :
|
||||
|
||||
<img src=https://cdn-icons-png.flaticon.com/16/14446/14446252.png alt="USDT" style="vertical-align: middle;"/> USDT 0x3d52Ce15B7Be734c53fc9526ECbAB8267b63d66E
|
||||
<img src=https://cdn-icons-png.flaticon.com/16/5968/5968260.png alt="USDT" style="vertical-align: middle;"/> BTC bc1qhqew3mrvp47uk2vevt5sctp7p2x9m7m5kkchve
|
||||
|
130
docs/readme.md
130
docs/readme.md
@ -2,8 +2,53 @@
|
||||
|
||||
# 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)
|
||||
[![en](https://img.shields.io/badge/lang-en-red.svg)](./readme.en.md)
|
||||
[![ru](https://img.shields.io/badge/lang-ru-green.svg)](./readme.md)
|
||||
|
||||
***
|
||||
|
||||
- [Зачем это нужно](#зачем-это-нужно)
|
||||
- [Быстрый старт](#быстрый-старт)
|
||||
- [Как это работает](#как-это-работает)
|
||||
- [Что сейчас происходит в России](#что-сейчас-происходит-в-россии)
|
||||
- [Как это реализовать на практике в системе linux](#как-это-реализовать-на-практике-в-системе-linux)
|
||||
- [Особенности применения ip6tables](#особенности-применения-ip6tables)
|
||||
- [Особенности применения nftables](#особенности-применения-nftables)
|
||||
- [Когда это работать не будет](#когда-это-работать-не-будет)
|
||||
- [nfqws](#nfqws)
|
||||
- [АТАКА ДЕСИНХРОНИЗАЦИИ DPI](#атака-десинхронизации-dpi)
|
||||
- [КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ](#комбинирование-методов-десинхронизации)
|
||||
- [РЕЖИМ SYNACK](#режим-synack)
|
||||
- [РЕЖИМ SYNDATA](#режим-syndata)
|
||||
- [ВИРТУАЛЬНЫЕ МАШИНЫ](#виртуальные-машины)
|
||||
- [CONNTRACK](#conntrack)
|
||||
- [РЕАССЕМБЛИНГ](#реассемблинг)
|
||||
- [ПОДДЕРЖКА UDP](#поддержка-udp)
|
||||
- [IP ФРАГМЕНТАЦИЯ](#ip-фрагментация)
|
||||
- [МНОЖЕСТВЕННЫЕ СТРАТЕГИИ](#множественные-стратегии)
|
||||
- [tpws](#tpws)
|
||||
- [МНОЖЕСТВЕННЫЕ СТРАТЕГИИ](#множественные-стратегии-1)
|
||||
- [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip)
|
||||
- [ip2net](#ip2net)
|
||||
- [mdig](#mdig)
|
||||
- [Фильтрация по именам доменов](#фильтрация-по-именам-доменов)
|
||||
- [Режим фильтрации autohostlist](#режим-фильтрации-autohostlist)
|
||||
- [Проверка провайдера](#проверка-провайдера)
|
||||
- [Выбор параметров](#выбор-параметров)
|
||||
- [Прикручивание к системе управления фаерволом или своей системе запуска](#прикручивание-к-системе-управления-фаерволом-или-своей-системе-запуска)
|
||||
- [Вариант custom](#вариант-custom)
|
||||
- [Простая установка](#простая-установка)
|
||||
- [Простая установка на openwrt](#простая-установка-на-openwrt)
|
||||
- [Установка на openwrt в режиме острой нехватки места на диске](#установка-на-openwrt-в-режиме-острой-нехватки-места-на-диске)
|
||||
- [Android](#android)
|
||||
- [Мобильные модемы и роутеры huawei](#мобильные-модемы-и-роутеры-huawei)
|
||||
- [FreeBSD, OpenBSD, MacOS](#freebsd-openbsd-macos)
|
||||
- [Windows](#windows)
|
||||
- [Другие прошивки](#другие-прошивки)
|
||||
- [Обход блокировки через сторонний хост](#обход-блокировки-через-сторонний-хост)
|
||||
- [Почему стоит вложиться в покупку VPS](#почему-стоит-вложиться-в-покупку-vps)
|
||||
- [Поддержать разработчика](#поддержать-разработчика)
|
||||
***
|
||||
|
||||
## Зачем это нужно
|
||||
|
||||
@ -19,9 +64,9 @@ VPN.
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
> *Linux/openwrt:* docs/quick_start.txt
|
||||
> *Linux/openwrt:* [docs/quick_start.txt](./quick_start.txt)
|
||||
>
|
||||
>*Windows:* docs/quick_start_windows.txt
|
||||
>*Windows:* [docs/quick_start_windows.txt](./quick_start_windows.txt)
|
||||
|
||||
## Как это работает
|
||||
|
||||
@ -49,8 +94,8 @@ VPN.
|
||||
|
||||
Существует и более продвинутая магия, направленная на преодоление DPI на пакетном уровне.
|
||||
|
||||
Подробнее про DPI:
|
||||
https://habr.com/ru/post/335436
|
||||
Подробнее про DPI:\
|
||||
https://habr.com/ru/post/335436 или https://web.archive.org/web/20230331233644/https://habr.com/ru/post/335436/ \
|
||||
https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
|
||||
|
||||
## Что сейчас происходит в России
|
||||
@ -164,7 +209,7 @@ NFQUEUE работает без изменений.
|
||||
|
||||
## Особенности применения nftables
|
||||
|
||||
Более подробно преимущества и недостатки nftables применительно к данной системе описаны в docs/nftables_notes.txt Если
|
||||
Более подробно преимущества и недостатки nftables применительно к данной системе описаны в [docs/nftables_notes.txt](./nftables_notes.txt) Если
|
||||
коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM. Остальные
|
||||
рассматриваемые здесь функции могут быть перенесены на nftables.
|
||||
|
||||
@ -195,7 +240,7 @@ NFQUEUE работает без изменений.
|
||||
## nfqws
|
||||
|
||||
Эта программа - модификатор пакетов и обработчик очереди NFQUEUE. Для BSD систем существует адаптированный вариант -
|
||||
dvtws, собираемый из тех же исходников (см. bsd.txt).
|
||||
dvtws, собираемый из тех же исходников (см. [bsd.txt](./bsd.txt)).
|
||||
|
||||
```
|
||||
@<config_file>|$<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются.
|
||||
@ -257,7 +302,7 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
|
||||
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
|
||||
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
|
||||
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
|
||||
--new ; начало новой стратегии
|
||||
--new ; начало новой стратегии (новый профиль)
|
||||
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
|
||||
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую.
|
||||
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. поддерживается список через запятую.
|
||||
@ -268,8 +313,9 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
|
||||
|
||||
Параметры манипуляции могут сочетаться в любых комбинациях.
|
||||
|
||||
**ЗАМЕЧАНИЕ.** Параметр `--wsize` считается устаревшим и более не поддерживается в скриптах. Функции сплита выполняются в
|
||||
рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
|
||||
> [!TIP]
|
||||
> **ЗАМЕЧАНИЕ.** Параметр `--wsize` считается устаревшим и более не поддерживается в скриптах. Функции сплита выполняются в
|
||||
> рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
|
||||
|
||||
`--debug` позволяет выводить подробный лог действий на консоль, в syslog или в файл. Может быть важен порядок следования
|
||||
опций. `--debug` лучше всего указывать в самом начале. Опции анализируются последовательно. Если ошибка будет при
|
||||
@ -292,8 +338,8 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
|
||||
посылать пакет с инвалидной чексуммой, добавлять tcp option **MD5 signature**, испортить sequence numbers. Все они не
|
||||
лишены недостатков.
|
||||
|
||||
* md5sig работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux.
|
||||
* badsum не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. Наиболее
|
||||
* `md5sig` работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux.
|
||||
* `badsum` не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. Наиболее
|
||||
распространенная настройка NAT роутера в Linux их не пропускает. На Linux построено большинство домашних роутеров.
|
||||
Непропускание обеспечивается так : настройка ядра sysctl по умолчанию
|
||||
`net.netfilter.nf_conntrack_checksum=1` заставляет conntrack проверять tcp и udp чексуммы входящих пакетов и
|
||||
@ -309,14 +355,14 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
|
||||
себя ведут некоторые роутеры на базе mediatek. badsum пакеты уходят с клиентской ОС, но роутером не видятся в br-lan
|
||||
через tcpdump. При этом если nfqws выполняется на самом роутере, обход может работать. badsum нормально уходят с
|
||||
внешнего интерфейса.
|
||||
* Пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence
|
||||
* Пакеты с `badseq` будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence
|
||||
numbers. По умолчанию смещение seq выбирается -10000. Практика показала, что некоторые DPI не пропускают seq вне
|
||||
определенного окна. Однако, такое небольшое смещение может вызвать проблемы при существенной потоковой передаче и
|
||||
потере пакетов. Если вы используете `--dpi-desync-any-protocol`, может понадобится установить badseq increment
|
||||
0x80000000. Это обеспечит надежную гарантию, что поддельный пакет не вклинится в tcp window на сервере. Так же было
|
||||
замечено, что badseq ломает логику некоторых DPI при анализе http, вызывая зависание соединения. Причем на тех же DPI
|
||||
TLS с badseq работает нормально.
|
||||
* TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится
|
||||
* `TTL` казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится
|
||||
дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним. Ситуация усугубляется наличием ТСПУ на
|
||||
магистралах, что вынуждает делать TTL достаточно высоким, увеличивая риск пробоя фейка до сервера. Необходим ip
|
||||
exclude list, заполняемый вручную. Вместе с ttl можно применять md5sig. Это ничего не испортит, зато дает неплохой
|
||||
@ -676,14 +722,16 @@ L7 протокол становится известен обычно посл
|
||||
Нумерация профилей идет с 1 до N. Последним в цепочке создается пустой профиль с номером 0.
|
||||
Он используется, когда никакие условия фильтров не совпали.
|
||||
|
||||
**ВАЖНО:** множественные стратегии создавались только для случаев, когда невозможно обьединить
|
||||
имеющиеся стратегии для разных ресурсов. Копирование стратегий из blockcheck для разных сайтов
|
||||
во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно
|
||||
не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше.
|
||||
> [!IMPORTANT]
|
||||
> Множественные стратегии создавались только для случаев, когда невозможно обьединить
|
||||
> имеющиеся стратегии для разных ресурсов. Копирование стратегий из blockcheck для разных сайтов
|
||||
> во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно
|
||||
> не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше.
|
||||
|
||||
**ВАЖНО:** user-mode реализация ipset создавалась не как удобная замена *nix версии, реализованной в ядре.
|
||||
Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подержки ipset в ядре.
|
||||
Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset.
|
||||
> [!IMPORTANT]
|
||||
> user-mode реализация ipset создавалась не как удобная замена *nix версии, реализованной в ядре.
|
||||
> Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подержки ipset в ядре.
|
||||
> Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset.
|
||||
|
||||
## tpws
|
||||
|
||||
@ -706,7 +754,7 @@ tpws - это transparent proxy.
|
||||
; force : биндаться только на LL
|
||||
--bind-iface4=<iface> ; слушать на первом ipv4 интерфейса iface
|
||||
--bind-iface6=<iface> ; слушать на первом ipv6 интерфейса iface
|
||||
--bind-wait-ifup=<sec> ; ждать до N секунд появления и поднятия интерфейса
|
||||
--bind-wait-ifup=<sec ; ждать до N секунд появления и поднятия интерфейса
|
||||
--bind-wait-ip=<sec> ; ждать до N секунд получения IP адреса (если задан --bind-wait-ifup - время идет после поднятия интерфейса)
|
||||
--bind-wait-ip-linklocal=<sec>
|
||||
; имеет смысл только при задании --bind-wait-ip
|
||||
@ -774,7 +822,7 @@ tpws - это transparent proxy.
|
||||
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
|
||||
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
|
||||
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
|
||||
--new ; начало новой стратегии
|
||||
--new ; начало новой стратегии (новый профиль)
|
||||
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
|
||||
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. поддерживается список через запятую.
|
||||
--filter-l7=[http|tls|quic|wireguard|dht|unknown] ; фильтр протокола L6-L7. поддерживается несколько значений через запятую.
|
||||
@ -1151,7 +1199,7 @@ ipset/get_antizapret_domains.sh
|
||||
ipset/get_reestr_resolvable_domains.sh
|
||||
ipset/get_refilter_domains.sh
|
||||
```
|
||||
Он кладется в ipset/zapret-hosts.txt.gz.
|
||||
Он кладется в `ipset/zapret-hosts.txt.gz`.
|
||||
|
||||
При изменении времени модификации файлов списки перечитываются автоматически.
|
||||
|
||||
@ -1625,9 +1673,10 @@ IFACE_WAN6="henet ipsec0"
|
||||
Несколько интерфейсов могут быть вписаны через пробел.
|
||||
Если IFACE_WAN6 не задан, то берется значение IFACE_WAN.
|
||||
|
||||
**ВАЖНО**: настройка маршрутизации, маскарада и т.д. не входит в задачу zapret.
|
||||
Включаются только режимы, обеспечивающие перехват транзитного трафика.
|
||||
Возможно определить несколько интерфейсов следующим образом:
|
||||
> [!IMPORTANT]
|
||||
> Настройка маршрутизации, маскарада и т.д. не входит в задачу zapret.
|
||||
> Включаются только режимы, обеспечивающие перехват транзитного трафика.
|
||||
> Возможно определить несколько интерфейсов следующим образом:
|
||||
|
||||
`IFACE_LAN="eth0 eth1 eth2"`
|
||||
|
||||
@ -1757,7 +1806,7 @@ zapret_custom_firewall_nft поднимает правила nftables.
|
||||
|
||||
## Простая установка
|
||||
|
||||
`install_easy.sh` автоматизирует ручные варианты процедур установки (см manual_setup.txt).
|
||||
`install_easy.sh` автоматизирует ручные варианты процедур установки (см [manual_setup.txt](./manual_setup.txt)).
|
||||
Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS.
|
||||
|
||||
Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров".
|
||||
@ -1975,9 +2024,9 @@ connbytes придется опускать, поскольку модуля в
|
||||
запускайте из конца autorun.sh через "&". Скрипт должен в начале делать sleep 5, чтобы дождаться
|
||||
поднятия сети и iptables от huawei.
|
||||
|
||||
**ПРЕДУПРЕЖДЕНИЕ.**\
|
||||
На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам.
|
||||
Выглядит это так, если запускать curl с самого модема:
|
||||
> [!WARNING]
|
||||
> На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам.
|
||||
> Выглядит это так, если запускать curl с самого модема:
|
||||
```
|
||||
curl www.ru
|
||||
curl: (7) Failed to connect to www.ru port 80: Host is unreachable
|
||||
@ -1999,17 +2048,17 @@ curl: (7) Failed to connect to www.ru port 80: Host is unreachable
|
||||
Поддержка ipset отсутствует. Значит, все, что можно сделать - создать индивидуальные правила
|
||||
на небольшое количество хостов.
|
||||
|
||||
Некоторые наброски скриптов присутствуют в files/huawei. _Не готовое решение!_ Смотрите, изучайте, приспосабливайте.\
|
||||
Некоторые наброски скриптов присутствуют в [files/huawei](./../files/huawei/). _Не готовое решение!_ Смотрите, изучайте, приспосабливайте.\
|
||||
Здесь можно скачать готовые полезные статические бинарники для arm, включая curl : https://github.com/bol-van/bins
|
||||
|
||||
|
||||
## FreeBSD, OpenBSD, MacOS
|
||||
|
||||
Описано в docs/bsd.txt
|
||||
Описано в [docs/bsd.txt](./bsd.txt)
|
||||
|
||||
## Windows
|
||||
|
||||
Описано в docs/windows.txt
|
||||
Описано в [docs/windows.txt](./windows.txt)
|
||||
|
||||
|
||||
## Другие прошивки
|
||||
@ -2078,8 +2127,8 @@ Openwrt является одной из немногих относительн
|
||||
|
||||
Если не работает автономный обход, приходится перенаправлять трафик через сторонний хост.
|
||||
Предлагается использовать прозрачный редирект через socks5 посредством `iptables+redsocks`, либо `iptables+iproute+vpn`.
|
||||
Настройка варианта с redsocks на openwrt описана в redsocks.txt.
|
||||
Настройка варианта с `iproute+wireguard` - в `wireguard_iproute_openwrt.txt`.
|
||||
Настройка варианта с redsocks на openwrt описана в [redsocks.txt](./redsocks.txt).
|
||||
Настройка варианта с `iproute+wireguard` - в [wireguard_iproute_openwrt.txt](./wireguard/wireguard_iproute_openwrt.txt).
|
||||
|
||||
|
||||
## Почему стоит вложиться в покупку VPS
|
||||
@ -2118,3 +2167,10 @@ VPS можно прибрести в множестве мест. Существ
|
||||
из описанного сделать не сможете, то вы сможете хотя бы использовать динамическое перенаправление портов ssh
|
||||
для получения шифрованного socks proxy и прописать его в броузер. Знания linux не нужны совсем.
|
||||
Это вариант наименее напряжный для чайников, хотя и не самый удобный в использовании.
|
||||
|
||||
## Поддержать разработчика
|
||||
|
||||
[Реквизиты](https://github.com/bol-van/zapret/issues/590):
|
||||
|
||||
<img src=https://cdn-icons-png.flaticon.com/16/14446/14446252.png alt="USDT" style="vertical-align: middle;"/> USDT 0x3d52Ce15B7Be734c53fc9526ECbAB8267b63d66E
|
||||
<img src=https://cdn-icons-png.flaticon.com/16/5968/5968260.png alt="USDT" style="vertical-align: middle;"/> BTC bc1qhqew3mrvp47uk2vevt5sctp7p2x9m7m5kkchve
|
||||
|
Loading…
Reference in New Issue
Block a user