diff --git a/docs/readme.txt b/docs/readme.txt index 733293b..a2a8f68 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -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 в десятки, если не сотни раз, а следовательно не покупать очень дорогие решения, обойдясь чем-то существенно более дешевым. @@ -259,7 +259,7 @@ nfqws --dpi-desync-badack-increment= ; инкремент ack sequence number для badseq. по умолчанию -66000 --dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello 1=по всем непустым пакетам данных --dpi-desync-fake-http=|0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному www.iana.org - --dpi-desync-fake-tls=|0xHEX ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному www.iana.org + --dpi-desync-fake-tls=|0xHEX ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному --dpi-desync-fake-unknown=|0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт --dpi-desync-fake-syndata=|0xHEX ; файл, содержащий фейковый пейлоад пакета SYN для режима десинхронизации syndata --dpi-desync-fake-quic=|0xHEX ; файл, содержащий фейковый QUIC Initial @@ -269,8 +269,8 @@ nfqws --dpi-desync-udplen-pattern=|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= ; применять дурение только к хостам из листа. может быть множество листов, они обьединяются. пустой обший лист = его отсутствие - --hostlist-exclude= ; не применять дурение к хостам из листа. может быть множество листов, они обьединяются + --hostlist= ; применять дурение только к хостам из листа. может быть множество листов, они объединяются. пустой обший лист = его отсутствие + --hostlist-exclude= ; не применять дурение к хостам из листа. может быть множество листов, они объединяются --hostlist-auto= ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto-fail-threshold= ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-time= ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) @@ -281,7 +281,6 @@ nfqws --filter-tcp=[~]port1[-port2] ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. --filter-udp=[~]port1[-port2] ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. - Параметры манипуляции могут сочетаться в любых комбинациях. ЗАМЕЧАНИЕ. Параметр --wsize считается устаревшим и более не поддерживается в скриптах. @@ -363,14 +362,13 @@ fakeknown отличается от fake тем, что применяется сервера. Берутся базовые значения TTL 64,128,255, смотрится входящий пакет (да, требуется направить первый входящий пакет на nfqws !). Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию), - то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученый TTL больше длины пути, + то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученный TTL больше длины пути, то автоматизм не сработал и берутся фиксированные значения TTL для атаки. Техника позволяет решить вопрос, когда вся сеть перегорожена шлагбаумами (DPI, ТСПУ) везде где только можно, включая магистралов. Но потенциально может давать сбои. - Например, при ассиметрии входящего и исходящего канала до конкретного сервера. + Например, при асимметрии входящего и исходящего канала до конкретного сервера. На каких-то провайдерах эта техника будет работать неплохо, на других доставит больше проблем, чем пользы. Где-то может потребоваться тюнинг параметров. Лучше использовать с дополнительным ограничителем. - Не рекомендуется для BSD систем, поскольку там нельзя ограничить количество входящих пакетов через connbytes. Режимы дурения могут сочетаться в любых комбинациях. --dpi-desync-fooling берет множество значений через запятую. @@ -596,7 +594,7 @@ chrome рандомизирует фингерпринт TLS. SNI может о udplen увеличивает размер udp пакета на указанное в --dpi-desync-udplen-increment количество байтов. Паддинг заполняется нулями по умолчанию, но можно задать свой паттерн. Предназначено для обмана DPI, ориентирующегося на размеры пакетов. -Может сработать, если пользовательсткий протокол не привязан жестко к размеру udp пейлоада. +Может сработать, если пользовательский протокол не привязан жестко к размеру udp пейлоада. Режим tamper означает модификацию пакетов известных протоколов особенным для протокола образом. На текущий момент работает только с DHT. Поддерживается определение пакетов QUIC Initial с расшифровкой содержимого и имени хоста, то есть параметр @@ -686,6 +684,7 @@ nfqws способен по-разному реагировать на разл во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше. + tpws ----- @@ -701,7 +700,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= ; слушать на первом ipv4 интерфейса iface --bind-iface6= ; слушать на первом ipv6 интерфейса iface @@ -724,7 +723,7 @@ tpws - это transparent proxy. --maxfiles= ; макс количество файловых дескрипторов (setrlimit). мин требование (X*connections+16), где X=6 в tcp proxy mode, X=4 в режиме тамперинга. ; стоит сделать запас с коэффициентом как минимум 1.5. по умолчанию maxfiles (X*connections)*1.5+16 --max-orphan-time=; если вы запускаете через tpws торрент-клиент с множеством раздач, он пытается установить очень много исходящих соединений, - ; большая часть из которых отваливается по таймату (юзера сидят за NAT, firewall, ...) + ; большая часть из которых отваливается по таймауту (юзера сидят за NAT, firewall, ...) ; установление соединения в linux может длиться очень долго. локальный конец отвалился, перед этим послав блок данных, ; tpws ждет подключения удаленного конца, чтобы отослать ему этот блок, и зависает надолго. ; настройка позволяет сбрасывать такие подключения через N секунд, теряя блок данных. по умолчанию 5 сек. 0 означает отключить функцию @@ -766,9 +765,9 @@ tpws - это transparent proxy. ; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. ; по сигналу HUP список будет перечитан при следующем принятом соединении ; список может быть запакован в gzip. формат автоматически распознается и разжимается - ; списков может быть множество, они обьединяются. пустой общий лист = его отсутствие + ; списков может быть множество, они объединяются. пустой общий лист = его отсутствие ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. - --hostlist-exclude= ; не применять дурение к доменам из листа. может быть множество листов, они обьединяются + --hostlist-exclude= ; не применять дурение к доменам из листа. может быть множество листов, они объединяются --hostlist-auto= ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto-fail-threshold= ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-time= ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) @@ -885,7 +884,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 без ограничителей вряд ли целесообразно. @@ -994,7 +993,7 @@ ipset, это длительная операция на больших лист Список РКН уже достиг внушительных размеров в сотни тысяч IP адресов. Поэтому для оптимизации ipset применяется утилита ip2net. Она берет список отдельных IP адресов и пытается интеллектуально создать из него подсети для сокращения -количества адресов. ip2net отсекает неправильные записи в листах, гарантируя осутствие ошибок при их загрузке. +количества адресов. ip2net отсекает неправильные записи в листах, гарантируя отсутствие ошибок при их загрузке. ip2net написан на языке C, поскольку операция ресурсоемкая. Иные способы роутер может не потянуть. Можно внести список доменов в ipset/zapret-hosts-user-ipban.txt. Их ip адреса будут помещены @@ -1070,7 +1069,7 @@ ip2net фильтрует входные данные, выкидывая неп Альтернативой ipset является использование tpws или nfqws со списком доменов. Оба демона принимают неограниченное количество листов include (--hostlist) и exclude (--hostlist-exclude). -Все листы одного типа обьединяются, и таким образом остаются только 2 листа. +Все листы одного типа объединяются, и таким образом остаются только 2 листа. Прежде всего проверяется exclude list. При вхождении в него происходит отказ от дурения. Далее при наличии include list проверяется домен на вхождение в него. При невхождении в список отказ от дурения. Пустой список приравнивается к его отсутствию. @@ -1228,7 +1227,7 @@ force дает максимум проверок даже в случаях, к из списка. ПРОВЕРКА НА ЧАСТИЧНЫЙ IP block -Под частичным блоком подразумевается ситуация, когда конект на порты есть, но по определенному транспортному +Под частичным блоком подразумевается ситуация, когда коннект на порты есть, но по определенному транспортному или прикладному протоколу всегда идет реакция DPI вне зависимости от запрашиваемого домена. Эта проверка так же не выдаст автоматического вердикта/решения, потому что может быть очень много вариаций. Вместо этого анализ происходящего возложен на самого пользователя или тех, кто будет читать лог. @@ -1240,7 +1239,7 @@ force дает максимум проверок даже в случаях, к Ошибка сертификата может говорить как о реакции DPI с MiTM атакой (подмена сертификата), так и о том, что принимающий сервер неблокированного домена все равно принимает ваш TLS handshake с чужим доменом, пытаясь при этом выдать сертификат без запрошенного домена. Требуется дополнительный анализ. -Если на заблокированный домен есть реакция на всех IP адресах, значит есть блокировака по домену. +Если на заблокированный домен есть реакция на всех IP адресах, значит есть блокировка по домену. Если на неблокированный домен есть реакция на IP адресах блокированного домена, значит имеет место блок по IP. Соответственно, если есть и то, и другое, значит есть и блок по IP, и блок по домену. Неблокированный домен первым делом проверяется на доступность на оригинальном адресе. @@ -1392,14 +1391,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). Поместите сюда название скрипта, который будете использовать для обновления листов. @@ -1574,16 +1573,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 пакеты. Можно форсировать режим компиляции следующим вызовом : @@ -1591,8 +1590,8 @@ install_easy.sh автоматизирует ручные варианты пр Под openwrt все уже сразу готово для использования системы в качестве роутера. Имена интерфейсов WAN и LAN известны из настроек системы. -Под другими системами роутер вы настраиваете самостоятельно. Инсталятор в это не вмешивается. -Инсталятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы. +Под другими системами роутер вы настраиваете самостоятельно. инсталлятор в это не вмешивается. +инсталлятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы. Нужно понимать, что заворот проходящего трафика на tpws в прозрачном режиме происходит до выполнения маршрутизации, следовательно возможна фильтрация по LAN и невозможна по WAN. Решение о завороте на tpws локального исходящего трафика принимается после выполнения маршрутизации, @@ -1600,7 +1599,7 @@ install_easy.sh автоматизирует ручные варианты пр Заворот на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN. Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера. -Деинсталяция выполняется через uninstall_easy.sh +Деинсталляция выполняется через uninstall_easy.sh Простая установка на openwrt @@ -1617,7 +1616,7 @@ install_easy.sh автоматизирует ручные варианты пр После успешной установки можно удалить zapret из tmp для освобождения RAM : rm -r /tmp/zapret -Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров". +Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров". Система простой инсталяции заточена на любое умышленное или неумышленное изменение прав доступа на файлы. Устойчива к репаку под windows. После копирования в /opt права будут принудительно восстановлены. @@ -1685,7 +1684,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. @@ -1708,7 +1707,7 @@ Wifi сеть - обычно wlan0. Устройства типа E3372, E8372, E5770 разделяют общую идеологию построения системы. Имеются 2 вычислительных ядра. Одно ядро выполняет vxworks, другое - linux. -На 4pda имеются модицифированные прошивки с telnet и adb. Их и нужно использовать. +На 4pda имеются модифицированные прошивки с telnet и adb. Их и нужно использовать. Дальнейшие утверждения проверены на E8372. На других может быть аналогично или похоже. Присутствуют дополнительные аппаратные блоки для offload-а сетевых функций. @@ -1723,7 +1722,7 @@ nfqueue поломан. можно собрать фиксящий модуль С помощью этих исходников умельцы могут собрать модуль unfuck_nfqueue.ko. После его применения NFQUEUE и nfqws для arm работают нормально. -Чтобы избежать проблемы с offload-ом при использвании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws. +Чтобы избежать проблемы с offload-ом при использовании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws. Правила NFQUEUE пишутся для цепочки OUTPUT. connbytes придется опускать, поскольку модуля в ядре нет. Но это не смертельно. @@ -1754,7 +1753,7 @@ connbytes придется опускать, поскольку модуля в на небольшое количество хостов. Некоторые наброски скриптов присутствуют в files/huawei. Не готовое решение ! Смотрите, изучайте, приспосабливайте. -Здесь можно скачать готовые полезные статические бинарики для arm, включая curl : https://github.com/bol-van/bins +Здесь можно скачать готовые полезные статические бинарники для arm, включая curl : https://github.com/bol-van/bins FreeBSD, OpenBSD, MacOS @@ -1773,7 +1772,7 @@ Windows --------------- Для статических бинариков не имеет значения на чем они запущены : PC, android, приставка, роутер, любой другой девайс. -Подойдет любая прошивка, дистрибутив linux. Статические бинарики запустятся на всем. +Подойдет любая прошивка, дистрибутив linux. Статические бинарники запустятся на всем. Им нужно только ядро с необходимыми опциями сборки или модулями. Но кроме бинариков в проекте используются еще и скрипты, в которых задействуются некоторые стандартные программы. @@ -1859,7 +1858,7 @@ VPN провайдер предоставляет _простую_ и _дост Возможен китайский расклад, при котором DPI выявляет vpn протоколы и динамически банит IP серверов, предоставляющих нелицензированный VPN. Но имея знания, голову, вы всегда можете обфусцировать vpn трафик или применить другие типы VPN, более устойчивые к анализу на DPI или просто менее широкоизвестные, -а следовательно с меньшей вероятностью обнаруживамые регулятором. +а следовательно с меньшей вероятностью обнаруживаемые регулятором. У вас есть свобода делать на вашем VPS все что вы захотите, адаптируясь к новым условиям. Да, это потребует знаний. Вам выбирать учиться и держать ситуацию под контролем, когда вам ничего запретить не могут, или покориться системе.