mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-26 12:10:53 +03:00
Merge branch 'master' of https://github.com/bol-van/zapret
This commit is contained in:
commit
9e0bf35daf
@ -40,7 +40,7 @@ For english version refer to docs/readme.eng.txt
|
||||
Активный DPI ставится в разрез провода и может дропать пакеты по любым критериям,
|
||||
в том числе распознавать TCP потоки и блокировать любые пакеты, принадлежащие потоку.
|
||||
|
||||
Как не допустить срабатывания триггера запрета ? Послать то, на что DPI не расчитывает
|
||||
Как не допустить срабатывания триггера запрета ? Послать то, на что DPI не рассчитывает
|
||||
и что ломает ему алгоритм распознавания запросов и их блокировки.
|
||||
|
||||
Некоторые DPI не могут распознать http запрос, если он разделен на TCP сегменты.
|
||||
@ -146,7 +146,7 @@ iptables -t mangle -I POSTROUTING -o <внешний_интерфейс> -p tcp
|
||||
|
||||
iptables -t mangle -I PREROUTING -i <внешний_интерфейс> -p tcp --sport 80 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:6 -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass
|
||||
|
||||
Получаемые пакеты будут фильтровться по входящему интерфейсу, порту и IP источника, то есть наоборот прямому правилу.
|
||||
Получаемые пакеты будут фильтроваться по входящему интерфейсу, порту и IP источника, то есть наоборот прямому правилу.
|
||||
|
||||
Некоторые техники, ломающие NAT, не всегда можно реализовать через iptables. Требуются nftables.
|
||||
|
||||
@ -211,7 +211,7 @@ NFQUEUE работает без изменений.
|
||||
операционной системы, фрагментация отпадает сразу как средство обхода. Squid правильный, он все найдет
|
||||
как надо, обманывать его бесполезно.
|
||||
НО. Заворачивать на squid могут позволить себе лишь небольшие провайдеры, поскольку это очень ресурсоемко.
|
||||
Большие компании обычно используют DPI, который расчитан на гораздо большую пропускную способность.
|
||||
Большие компании обычно используют DPI, который рассчитан на гораздо большую пропускную способность.
|
||||
Может применяться комбинированный подход, когда на DPI заворачивают только IP из "плохого" списка,
|
||||
и дальше уже DPI решает пропускать или нет. Так можно снизить нагрузку на DPI в десятки, если не сотни раз,
|
||||
а следовательно не покупать очень дорогие решения, обойдясь чем-то существенно более дешевым.
|
||||
@ -269,8 +269,8 @@ nfqws
|
||||
--dpi-desync-udplen-pattern=<filename>|0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули
|
||||
--dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
|
||||
--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
||||
--hostlist=<filename> ; применять дурение только к хостам из листа. может быть множество листов, они обьединяются. пустой обший лист = его отсутствие
|
||||
--hostlist-exclude=<filename> ; не применять дурение к хостам из листа. может быть множество листов, они обьединяются
|
||||
--hostlist=<filename> ; применять дурение только к хостам из листа. может быть множество листов, они объединяются. пустой обший лист = его отсутствие
|
||||
--hostlist-exclude=<filename> ; не применять дурение к хостам из листа. может быть множество листов, они объединяются
|
||||
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
|
||||
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
|
||||
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
|
||||
@ -358,11 +358,11 @@ fakeknown отличается от fake тем, что применяется
|
||||
сервера. Берутся базовые значения TTL 64,128,255, смотрится входящий пакет
|
||||
(да, требуется направить первый входящий пакет на nfqws !).
|
||||
Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию),
|
||||
то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученый TTL больше длины пути,
|
||||
то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученный TTL больше длины пути,
|
||||
то автоматизм не сработал и берутся фиксированные значения TTL для атаки.
|
||||
Техника позволяет решить вопрос, когда вся сеть перегорожена шлагбаумами (DPI, ТСПУ) везде где только можно,
|
||||
включая магистралов. Но потенциально может давать сбои.
|
||||
Например, при ассиметрии входящего и исходящего канала до конкретного сервера.
|
||||
Например, при асимметрии входящего и исходящего канала до конкретного сервера.
|
||||
На каких-то провайдерах эта техника будет работать неплохо, на других доставит больше проблем, чем пользы.
|
||||
Где-то может потребоваться тюнинг параметров. Лучше использовать с дополнительным ограничителем.
|
||||
Не рекомендуется для BSD систем, поскольку там нельзя ограничить количество входящих пакетов через connbytes.
|
||||
@ -591,7 +591,7 @@ chrome рандомизирует фингерпринт TLS. SNI может о
|
||||
udplen увеличивает размер udp пакета на указанное в --dpi-desync-udplen-increment количество байтов.
|
||||
Паддинг заполняется нулями по умолчанию, но можно задать свой паттерн.
|
||||
Предназначено для обмана DPI, ориентирующегося на размеры пакетов.
|
||||
Может сработать, если пользовательсткий протокол не привязан жестко к размеру udp пейлоада.
|
||||
Может сработать, если пользовательский протокол не привязан жестко к размеру udp пейлоада.
|
||||
Режим tamper означает модификацию пакетов известных протоколов особенным для протокола образом.
|
||||
На текущий момент работает только с DHT.
|
||||
Поддерживается определение пакетов QUIC Initial с расшифровкой содержимого и имени хоста, то есть параметр
|
||||
@ -670,7 +670,7 @@ tpws - это transparent proxy.
|
||||
--bind-linklocal=no|unwanted|prefer|force
|
||||
; no : биндаться только на global ipv6
|
||||
; unwanted (default) : предпочтительно global, если нет - LL
|
||||
; prefer : предпочительно LL, если нет - global
|
||||
; prefer : предпочтительно LL, если нет - global
|
||||
; force : биндаться только на LL
|
||||
--bind-iface4=<iface> ; слушать на первом ipv4 интерфейса iface
|
||||
--bind-iface6=<iface> ; слушать на первом ipv6 интерфейса iface
|
||||
@ -693,7 +693,7 @@ tpws - это transparent proxy.
|
||||
--maxfiles=<max_open_files> ; макс количество файловых дескрипторов (setrlimit). мин требование (X*connections+16), где X=6 в tcp proxy mode, X=4 в режиме тамперинга.
|
||||
; стоит сделать запас с коэффициентом как минимум 1.5. по умолчанию maxfiles (X*connections)*1.5+16
|
||||
--max-orphan-time=<sec>; если вы запускаете через tpws торрент-клиент с множеством раздач, он пытается установить очень много исходящих соединений,
|
||||
; большая часть из которых отваливается по таймату (юзера сидят за NAT, firewall, ...)
|
||||
; большая часть из которых отваливается по таймауту (юзера сидят за NAT, firewall, ...)
|
||||
; установление соединения в linux может длиться очень долго. локальный конец отвалился, перед этим послав блок данных,
|
||||
; tpws ждет подключения удаленного конца, чтобы отослать ему этот блок, и зависает надолго.
|
||||
; настройка позволяет сбрасывать такие подключения через N секунд, теряя блок данных. по умолчанию 5 сек. 0 означает отключить функцию
|
||||
@ -735,9 +735,9 @@ tpws - это transparent proxy.
|
||||
; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.
|
||||
; по сигналу HUP список будет перечитан при следующем принятом соединении
|
||||
; список может быть запакован в gzip. формат автоматически распознается и разжимается
|
||||
; списков может быть множество, они обьединяются. пустой общий лист = его отсутствие
|
||||
; списков может быть множество, они объединяются. пустой общий лист = его отсутствие
|
||||
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
|
||||
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов, они обьединяются
|
||||
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов, они объединяются
|
||||
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
|
||||
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
|
||||
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
|
||||
@ -854,7 +854,7 @@ tpws поддерживает эту возможность асинхронно
|
||||
структуры данных. В случае отсутствия SNI разбиение отменяется.
|
||||
--tlsrec-pos режет на указанной позиции. Если длина блока данных TLS меньше указанной позиции, режем на позиции 1.
|
||||
Параметр сочетается с --split-pos. В этом случае происходит сначала разделение на уровне TLS record layer, потом на уровне TCP.
|
||||
Самая изорщенная атака --tlsrec, --split-pos и --disorder вместе.
|
||||
Самая изощрённая атака --tlsrec, --split-pos и --disorder вместе.
|
||||
--tlsrec ломает значительное количество сайтов. Криптобиблиотеки (openssl, ...) на оконечных http серверах
|
||||
без проблем принимают разделенные tls сегменты, но мидлбоксы - не всегда. К мидлбоксам можно отнести CDN
|
||||
или системы ddos-защиты. Поэтому применение --tlsrec без ограничителей вряд ли целесообразно.
|
||||
@ -963,7 +963,7 @@ ipset, это длительная операция на больших лист
|
||||
|
||||
Список РКН уже достиг внушительных размеров в сотни тысяч IP адресов. Поэтому для оптимизации ipset
|
||||
применяется утилита ip2net. Она берет список отдельных IP адресов и пытается интеллектуально создать из него подсети для сокращения
|
||||
количества адресов. ip2net отсекает неправильные записи в листах, гарантируя осутствие ошибок при их загрузке.
|
||||
количества адресов. ip2net отсекает неправильные записи в листах, гарантируя отсутствие ошибок при их загрузке.
|
||||
ip2net написан на языке C, поскольку операция ресурсоемкая. Иные способы роутер может не потянуть.
|
||||
|
||||
Можно внести список доменов в ipset/zapret-hosts-user-ipban.txt. Их ip адреса будут помещены
|
||||
@ -1039,7 +1039,7 @@ ip2net фильтрует входные данные, выкидывая неп
|
||||
|
||||
Альтернативой ipset является использование tpws или nfqws со списком доменов.
|
||||
Оба демона принимают неограниченное количество листов include (--hostlist) и exclude (--hostlist-exclude).
|
||||
Все листы одного типа обьединяются, и таким образом остаются только 2 листа.
|
||||
Все листы одного типа объединяются, и таким образом остаются только 2 листа.
|
||||
Прежде всего проверяется exclude list. При вхождении в него происходит отказ от дурения.
|
||||
Далее при наличии include list проверяется домен на вхождение в него. При невхождении в список отказ от дурения.
|
||||
Пустой список приравнивается к его отсутствию.
|
||||
@ -1197,7 +1197,7 @@ force дает максимум проверок даже в случаях, к
|
||||
из списка.
|
||||
|
||||
ПРОВЕРКА НА ЧАСТИЧНЫЙ IP block
|
||||
Под частичным блоком подразумевается ситуация, когда конект на порты есть, но по определенному транспортному
|
||||
Под частичным блоком подразумевается ситуация, когда коннект на порты есть, но по определенному транспортному
|
||||
или прикладному протоколу всегда идет реакция DPI вне зависимости от запрашиваемого домена.
|
||||
Эта проверка так же не выдаст автоматического вердикта/решения, потому что может быть очень много вариаций.
|
||||
Вместо этого анализ происходящего возложен на самого пользователя или тех, кто будет читать лог.
|
||||
@ -1209,7 +1209,7 @@ force дает максимум проверок даже в случаях, к
|
||||
Ошибка сертификата может говорить как о реакции DPI с MiTM атакой (подмена сертификата), так и
|
||||
о том, что принимающий сервер неблокированного домена все равно принимает ваш TLS handshake с чужим доменом,
|
||||
пытаясь при этом выдать сертификат без запрошенного домена. Требуется дополнительный анализ.
|
||||
Если на заблокированный домен есть реакция на всех IP адресах, значит есть блокировака по домену.
|
||||
Если на заблокированный домен есть реакция на всех IP адресах, значит есть блокировка по домену.
|
||||
Если на неблокированный домен есть реакция на IP адресах блокированного домена, значит имеет место блок по IP.
|
||||
Соответственно, если есть и то, и другое, значит есть и блок по IP, и блок по домену.
|
||||
Неблокированный домен первым делом проверяется на доступность на оригинальном адресе.
|
||||
@ -1361,14 +1361,14 @@ NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop"
|
||||
Если NFQWS_OPT_DESYNC_QUIC6 не задано, то берется NFQWS_OPT_DESYNC_QUIC.
|
||||
|
||||
Настройка системы управления выборочным traffic offload (только если поддерживается)
|
||||
donttouch : выборочное управление отключено, используется системная настройка, простой инсталятор выключает системную настройку, если она не совместима с выбранным режимом
|
||||
none : выборочное управление отключено, простой инсталятор выключает системную настройку
|
||||
software : выборочное управление включено в режиме software, простой инсталятор выключает системную настройку
|
||||
hardware : выборочное управление включено в режиме hardware, простой инсталятор выключает системную настройку
|
||||
donttouch : выборочное управление отключено, используется системная настройка, простой инсталлятор выключает системную настройку, если она не совместима с выбранным режимом
|
||||
none : выборочное управление отключено, простой инсталлятор выключает системную настройку
|
||||
software : выборочное управление включено в режиме software, простой инсталлятор выключает системную настройку
|
||||
hardware : выборочное управление включено в режиме hardware, простой инсталлятор выключает системную настройку
|
||||
|
||||
FLOWOFFLOAD=donttouch
|
||||
|
||||
Параметр GETLIST указывает инсталятору install_easy.sh какой скрипт дергать
|
||||
Параметр GETLIST указывает инсталлятору install_easy.sh какой скрипт дергать
|
||||
для обновления списка заблокированных ip или хостов.
|
||||
Он же вызывается через get_config.sh из запланированных заданий (crontab или systemd timer).
|
||||
Поместите сюда название скрипта, который будете использовать для обновления листов.
|
||||
@ -1543,16 +1543,16 @@ tpws к http и nfqws к https. При этом поддерживаются у
|
||||
install_easy.sh автоматизирует ручные варианты процедур установки (см manual_setup.txt).
|
||||
Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS.
|
||||
|
||||
Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".
|
||||
Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров".
|
||||
|
||||
Если система запуска поддерживается, но используется не поддерживаемый инсталятором менеджер пакетов
|
||||
или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную.
|
||||
Если система запуска поддерживается, но используется не поддерживаемый инсталлятором менеджер пакетов
|
||||
или названия пакетов не соответствуют прописанным в инсталлятор, пакеты нужно установить вручную.
|
||||
Всегда требуется curl. ipset - только для режима iptables, для nftables - не нужен.
|
||||
|
||||
Для совсем обрезанных дистрибутивов (alpine) требуется отдельно установить iptables и ip6tables, либо nftables.
|
||||
|
||||
В комплекте идут статические бинарики для большинства архитектур. Какой-то из них подойдет
|
||||
с вероятностью 99%. Но если у вас экзотическая система, инсталятор попробует собрать бинарики сам
|
||||
В комплекте идут статические бинарники для большинства архитектур. Какой-то из них подойдет
|
||||
с вероятностью 99%. Но если у вас экзотическая система, инсталлятор попробует собрать бинарники сам
|
||||
через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим
|
||||
компиляции следующим вызовом :
|
||||
|
||||
@ -1560,8 +1560,8 @@ install_easy.sh автоматизирует ручные варианты пр
|
||||
|
||||
Под openwrt все уже сразу готово для использования системы в качестве роутера.
|
||||
Имена интерфейсов WAN и LAN известны из настроек системы.
|
||||
Под другими системами роутер вы настраиваете самостоятельно. Инсталятор в это не вмешивается.
|
||||
Инсталятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы.
|
||||
Под другими системами роутер вы настраиваете самостоятельно. инсталлятор в это не вмешивается.
|
||||
инсталлятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы.
|
||||
Нужно понимать, что заворот проходящего трафика на tpws в прозрачном режиме происходит до выполнения маршрутизации,
|
||||
следовательно возможна фильтрация по LAN и невозможна по WAN.
|
||||
Решение о завороте на tpws локального исходящего трафика принимается после выполнения маршрутизации,
|
||||
@ -1569,7 +1569,7 @@ install_easy.sh автоматизирует ручные варианты пр
|
||||
Заворот на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN.
|
||||
Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера.
|
||||
|
||||
Деинсталяция выполняется через uninstall_easy.sh
|
||||
Деинсталляция выполняется через uninstall_easy.sh
|
||||
|
||||
|
||||
Простая установка на openwrt
|
||||
@ -1586,7 +1586,7 @@ install_easy.sh автоматизирует ручные варианты пр
|
||||
После успешной установки можно удалить zapret из tmp для освобождения RAM :
|
||||
rm -r /tmp/zapret
|
||||
|
||||
Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".
|
||||
Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров".
|
||||
|
||||
Система простой инсталяции заточена на любое умышленное или неумышленное изменение прав доступа на файлы.
|
||||
Устойчива к репаку под windows. После копирования в /opt права будут принудительно восстановлены.
|
||||
@ -1654,7 +1654,7 @@ echo nameserver 1.1.1.1 >/etc/resolv.conf
|
||||
который как правило присутствует по умолчанию. В ядре android нет nftables.
|
||||
ls -la $(which iptables)
|
||||
Линк должен указывать на legacy вариант.
|
||||
Если нет, значит устанавливайте нужные пакеты вашего дестрибутива, и убеждайтесь в правильности ссылок.
|
||||
Если нет, значит устанавливайте нужные пакеты вашего дистрибутива, и убеждайтесь в правильности ссылок.
|
||||
iptables -S
|
||||
Так можно проверить, что ваш iptables увидел то, что туда насовал android. iptables-nft выдаст ошибку.
|
||||
Далее качаем zapret в /opt/zapret. Обычные действия с install_prereq.sh, install_bin.sh, blockcheck.sh.
|
||||
@ -1677,7 +1677,7 @@ Wifi сеть - обычно wlan0.
|
||||
|
||||
Устройства типа E3372, E8372, E5770 разделяют общую идеологию построения системы.
|
||||
Имеются 2 вычислительных ядра. Одно ядро выполняет vxworks, другое - linux.
|
||||
На 4pda имеются модицифированные прошивки с telnet и adb. Их и нужно использовать.
|
||||
На 4pda имеются модифицированные прошивки с telnet и adb. Их и нужно использовать.
|
||||
|
||||
Дальнейшие утверждения проверены на E8372. На других может быть аналогично или похоже.
|
||||
Присутствуют дополнительные аппаратные блоки для offload-а сетевых функций.
|
||||
@ -1692,7 +1692,7 @@ nfqueue поломан. можно собрать фиксящий модуль
|
||||
С помощью этих исходников умельцы могут собрать модуль unfuck_nfqueue.ko.
|
||||
После его применения NFQUEUE и nfqws для arm работают нормально.
|
||||
|
||||
Чтобы избежать проблемы с offload-ом при использвании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws.
|
||||
Чтобы избежать проблемы с offload-ом при использовании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws.
|
||||
Правила NFQUEUE пишутся для цепочки OUTPUT.
|
||||
connbytes придется опускать, поскольку модуля в ядре нет. Но это не смертельно.
|
||||
|
||||
@ -1723,7 +1723,7 @@ connbytes придется опускать, поскольку модуля в
|
||||
на небольшое количество хостов.
|
||||
|
||||
Некоторые наброски скриптов присутствуют в files/huawei. Не готовое решение ! Смотрите, изучайте, приспосабливайте.
|
||||
Здесь можно скачать готовые полезные статические бинарики для arm, включая curl : https://github.com/bol-van/bins
|
||||
Здесь можно скачать готовые полезные статические бинарники для arm, включая curl : https://github.com/bol-van/bins
|
||||
|
||||
|
||||
FreeBSD, OpenBSD, MacOS
|
||||
@ -1742,7 +1742,7 @@ Windows
|
||||
---------------
|
||||
|
||||
Для статических бинариков не имеет значения на чем они запущены : PC, android, приставка, роутер, любой другой девайс.
|
||||
Подойдет любая прошивка, дистрибутив linux. Статические бинарики запустятся на всем.
|
||||
Подойдет любая прошивка, дистрибутив linux. Статические бинарники запустятся на всем.
|
||||
Им нужно только ядро с необходимыми опциями сборки или модулями.
|
||||
Но кроме бинариков в проекте используются еще и скрипты, в которых задействуются некоторые
|
||||
стандартные программы.
|
||||
@ -1828,7 +1828,7 @@ VPN провайдер предоставляет _простую_ и _дост
|
||||
Возможен китайский расклад, при котором DPI выявляет vpn протоколы и динамически банит IP серверов,
|
||||
предоставляющих нелицензированный VPN. Но имея знания, голову, вы всегда можете обфусцировать
|
||||
vpn трафик или применить другие типы VPN, более устойчивые к анализу на DPI или просто менее широкоизвестные,
|
||||
а следовательно с меньшей вероятностью обнаруживамые регулятором.
|
||||
а следовательно с меньшей вероятностью обнаруживаемые регулятором.
|
||||
У вас есть свобода делать на вашем VPS все что вы захотите, адаптируясь к новым условиям.
|
||||
Да, это потребует знаний. Вам выбирать учиться и держать ситуацию под контролем, когда вам ничего запретить
|
||||
не могут, или покориться системе.
|
||||
|
Loading…
Reference in New Issue
Block a user