diff --git a/docs/changes.txt b/docs/changes.txt index 39949eb..a8d761f 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -346,3 +346,8 @@ v67: mdig: --dns-make-query, --dns-parse-query for side-channel resolving (DoH) blockcheck: use DoH resolvers if DNS spoof is detected +blockcheck: restring fooling to testing domain's IPs +nfqws,tpws: internal hostlist deduplication to save RAM +nfqws,tpws: hostlist/ipset auto reload on file change. no more HUP. +nfqws,tpws: --filter-tcp, --filter-udp take comma separated port range list +blockcheck: marker diff --git a/docs/quick_start.txt b/docs/quick_start.txt index 2ec1a60..2988697 100644 --- a/docs/quick_start.txt +++ b/docs/quick_start.txt @@ -42,12 +42,8 @@ install_prereq.sh Вас могут спросить о типе фаервола (iptables/nftables) и использовании ipv6. Это нужно для установки правильных пакетов в ОС, чтобы не устанавливать лишнее. -6) Запустите blockcheck.sh. blockcheck.sh в начале проверяет DNS. -Если выводятся сообщения о подмене адресов, то нужно будет решить проблему с DNS. -blockcheck перейдет в этом случае на DoH и будет пытаться получить и использовать реальные IP адреса. -Но если вы не настроите решение этой проблемы, обход будет работать только для тех программ -или ОС, которые сами реализуют механизмы SecureDNS. Для других программ обход работать не будет. - +6) Запустите blockcheck.sh. blockcheck.sh в начале проверяет DNS. Если выводятся сообщения о подмене адресов, то +первым делом нужно решить эту проблему, иначе ничего не будет работать. Решение проблемы DNS выходит за рамки проекта. Обычно она решается либо заменой DNS серверов от провайдера на публичные (1.1.1.1, 8.8.8.8), либо в случае перехвата провайдером обращений к сторонним серверам - через специальные средства шифрования DNS запросов, такие как dnscrypt, DoT, DoH. @@ -111,27 +107,31 @@ badseq может работать только на https и не работа с использованием мультистратегии. Как работают мультистратегии описано в readme.txt. Если кратко, то обычно параметры конструируются так : -"--filter-udp=443 'параметры для quic' --new +"--filter-udp=443 'параметры для quic' --new --filter-tcp=80-443 'обьединенные параметры для http и https' " Или так : -"--filter-udp=443 "параметры для quic" --new +"--filter-udp=443 "параметры для quic" --new --filter-tcp=80 'параметры для http' --new --filter-tcp=443 'параметры для https' " -"" так и пишется. Его не надо на что-то заменять. Это сделают скрипты запуска, если вы выбрали режим -фильтрации по хостлистам, и уберут в противном случае. -Если для какого-то протокола надо дурить все без стандартного хостлиста - просто уберите оттуда "". +"" и "" так и пишутся. Их не надо на что-то заменять. Это сделают скрипты запуска, +если вы выбрали режим фильтрации по хостлистам, и уберут в противном случае. +Если для какого-то протокола надо дурить все без стандартного хостлиста - просто уберите оттуда "" +и "". Можно писать свои параметры --hostlist и --hostlist-exclude для дополнительных хостлистов или в профилях специализаций под конкретный ресурс. В последнем случае стандартный хостлист там не нужен. Следует избегать указания собственных параметров --hostlist на листы из директории ipset. -Эта логика включена в "". +Эта логика включена в "" и "". +Отличие "" в том, что стандартный автолист по этому профилю используется как обычный, +то есть без автоматического добавления доменов. Однако, добавления в других профилях автоматически +отражаются во всех остальных. Если стратегии отличаются по версии ip протокола, и вы не можете их обьединить, фильтр пишется так : -"--filter-l3=ipv4 --filter-udp=443 "параметры для quic ipv4" --new +"--filter-l3=ipv4 --filter-udp=443 "параметры для quic ipv4" --new --filter-l3=ipv4 --filter-tcp=80 'параметры для http ipv4' --new --filter-l3=ipv4 --filter-tcp=443 'параметры для https ipv4' --new ---filter-l3=ipv6 --filter-udp=443 "параметры для quic ipv6" --new +--filter-l3=ipv6 --filter-udp=443 "параметры для quic ipv6" --new --filter-l3=ipv6 --filter-tcp=80 'параметры для http ipv6' --new --filter-l3=ipv6 --filter-tcp=443 'параметры для https ipv6' " diff --git a/docs/quick_start_windows.txt b/docs/quick_start_windows.txt index ce06d5c..756612a 100644 --- a/docs/quick_start_windows.txt +++ b/docs/quick_start_windows.txt @@ -54,19 +54,13 @@ cygwin так же имеет внушительный список несовм 4) Если вы работаете в виртуальной машине, необходимо использовать соединение с сетью в режиме bridge. nat не подходит -5) Запустите blockcheck\blockcheck.cmd. blockcheck в начале проверяет DNS. -Если выводятся сообщения о подмене адресов, то нужно будет решить проблему с DNS. -blockcheck перейдет в этом случае на DoH и будет пытаться получить и использовать реальные IP адреса. -Но если вы не настроите решение этой проблемы, обход будет работать только для тех программ, -которые сами реализуют механизмы SecureDNS. Для других программ обход работать не будет. - +5) Запустите blockcheck\blockcheck.cmd. blockcheck в начале проверяет DNS. Если выводятся сообщения о подмене адресов, то +первым делом нужно решить эту проблему, иначе ничего не будет работать. Решение проблемы DNS выходит за рамки проекта. Обычно она решается либо заменой DNS серверов от провайдера на публичные (1.1.1.1, 8.8.8.8), либо в случае перехвата провайдером обращений к сторонним серверам - через специальные средства шифрования DNS запросов, такие как dnscrypt, DoT, DoH. В современных броузерах чаще всего DoH включен по умолчанию, но curl будет использовать обычный системный DNS. -win11 поддерживает системные DoH из коробки. Они не настроены по умолчанию. -В последних билдах win10 существует неофициальный обходной путь для включения DoH. -Для остальных систем нужно стороннее решение, работающие по принципу DNS proxy. +Новые билды win10 и win11 поддерживают системные DoH из коробки. Они не настроены по умолчанию. Тут все разжевано как и где это включается : https://hackware.ru/?p=13707 diff --git a/docs/readme.eng.md b/docs/readme.eng.md index 0d3bff4..bbd1f53 100644 --- a/docs/readme.eng.md +++ b/docs/readme.eng.md @@ -209,8 +209,8 @@ nfqws takes the following parameters: --hostlist-auto-debug= ; debug auto hostlist positives --new ; begin new strategy --filter-l3=ipv4|ipv6 ; L3 protocol filter. multiple comma separated values allowed. - --filter-tcp=[~]port1[-port2] ; TCP port filter. ~ means negation. setting tcp and not setting udp filter denies udp. - --filter-udp=[~]port1[-port2] ; UDP port filter. ~ means negation. setting udp and not setting tcp filter denies tcp. + --filter-tcp=[~]port1[-port2]|* ; TCP port filter. ~ means negation. setting tcp and not setting udp filter denies udp. comma separated list supported. + --filter-udp=[~]port1[-port2]|* ; UDP port filter. ~ means negation. setting udp and not setting tcp filter denies tcp. comma separated list supported. --filter-l7=[http|tls|quic|wireguard|dht|unknown] ; L6-L7 protocol filter. multiple comma separated values allowed. --ipset= ; ipset include filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) --ipset-exclude= ; ipset exclude filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) @@ -642,7 +642,7 @@ tpws is transparent proxy. --new ; begin new strategy --filter-l3=ipv4|ipv6 ; L3 protocol filter. multiple comma separated values allowed. - --filter-tcp=[~]port1[-port2] ; TCP port filter. ~ means negation + --filter-tcp=[~]port1[-port2]|* ; TCP port filter. ~ means negation. comma separated list supported. --filter-l7=[http|tls|unknown] ; L6-L7 protocol filter. multiple comma separated values allowed. --ipset= ; ipset include filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) --ipset-exclude= ; ipset exclude filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) @@ -854,7 +854,7 @@ If you need "all except" mode you dont have to delete zapret-hosts-users.txt. Ju Subdomains auto apply. For example, "ru" in the list affects "*.ru" . -tpws and nfqws reread lists on HUP signal. +tpws and nfqws automatically reload lists if their modification date is changed. When filtering by domain name, daemons should run without filtering by ipset. When using large regulator lists estimate the amount of RAM on the router ! @@ -864,7 +864,7 @@ When using large regulator lists estimate the amount of RAM on the router ! This mode analyzes both client requests and server replies. If a host is not in any list and a situation similar to block occurs host is automatically added to the special list both in memory and file. Use exclude hostlist to prevent autohostlist triggering. -If it did happen - delete the undesired record from the file and restart tpws/nfqws or send them SIGHUP to force lists reload. +If it did happen - delete the undesired record from the file. In case of nfqws it's required to redirect both incoming and outgoing traffic to the queue. It's strongly recommended to use connbytes filter or nfqws will process gigabytes of incoming traffic. @@ -892,7 +892,7 @@ Otherwise it's nothing to lose. However false positives still can occur in case target website is behaving abnormally (may be due to DDoS attack or server malfunction). If it happens bypass strategy may start to break the website. This situation can only be controlled manually. -Remove undesired domain from the autohostlist file, restart nfqws/tpws or send them SIGHUP. +Remove undesired domain from the autohostlist file. Use exclude hostlist to prevent further auto additions. It's possible to use one auto hostlist with multiple processes. All processes check for file modification time. @@ -935,6 +935,8 @@ To use standard updatable hostlists from the `ipset` dir use `` placeh with hostlist parameters if `MODE_FILTER` variable enables hostlists and is removed otherwise. Standard hostlists are expected in final (fallback) strategies closing groups of filter parameters. Don't use `` in highly specialized profiles. Use your own filter or hostlist(s). +`` marker uses standard autohostlist as usual hostlist thus disabling auto additions in this profile. +If any other profile adds something this profile accepts the change automatically. `tpws` socks proxy mode switch @@ -1009,7 +1011,7 @@ It's advised also to remove these ports from `connbytes`-limited interception li NFQWS_OPT=" --filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-fooling=md5sig --new --filter-tcp=443 --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig --new ---filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 +--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 " ``` @@ -1199,7 +1201,8 @@ Note that DNS check is mostly Russia targeted. It checks several pre-defined blo verifies system DNS answers with public DNS answers. Because ISP can block public DNS or redirect any DNS queries to their servers `blockcheck.sh` also checks that all returned answers are unique. Usually if DNS is blocked ISP returns single ip for all blocked domains to redirect you to their "access denied" page. -`blockcheck.sh` works in Linux and FreeBSD. +DoH servers are used automatically for checks if DNS spoof is detected. +`blockcheck.sh` works on all systems supported by `zapret`. ### desktop linux system diff --git a/docs/readme.txt b/docs/readme.txt index e623e2b..fbc3c7c 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -1,4 +1,4 @@ -zapret v.66 +zapret v.67 English ------- @@ -269,8 +269,14 @@ 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= ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются. + ; в файле должен быть хост на каждой строке. + ; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. + ; при изменении времени модификации файла он перечитывается автоматически по необходимости + ; список может быть запакован в gzip. формат автоматически распознается и разжимается + ; списков может быть множество. пустой общий лист = его отсутствие + ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. + --hostlist-exclude= ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам. --hostlist-auto= ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto-fail-threshold= ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-time= ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) @@ -278,11 +284,11 @@ nfqws --hostlist-auto-debug= ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. --new ; начало новой стратегии --filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии - --filter-tcp=[~]port1[-port2] ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. - --filter-udp=[~]port1[-port2] ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. + --filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую. + --filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. поддерживается список через запятую. --filter-l7=[http|tls|quic|wireguard|dht|unknown] ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. - --ipset= ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. - --ipset-exclude= ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. + --ipset= ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. + --ipset-exclude= ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. Параметры манипуляции могут сочетаться в любых комбинациях. @@ -773,22 +779,22 @@ tpws - это transparent proxy. --tamper-cutoff=[n] ; закончить дурение на указанной байтовой позиции или номере блока исходящего потока (считается позиция начала принятого блока) --hostlist= ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются. ; в файле должен быть хост на каждой строке. - ; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. - ; по сигналу HUP список будет перечитан при следующем принятом соединении + ; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. + ; при изменении времени модификации файла он перечитывается автоматически по необходимости ; список может быть запакован в gzip. формат автоматически распознается и разжимается - ; списков может быть множество, они объединяются. пустой общий лист = его отсутствие + ; списков может быть множество. пустой общий лист = его отсутствие ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. - --hostlist-exclude= ; не применять дурение к доменам из листа. может быть множество листов, они объединяются + --hostlist-exclude= ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам. --hostlist-auto= ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto-fail-threshold= ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-time= ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) --hostlist-auto-debug= ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. --new ; начало новой стратегии --filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии - --filter-tcp=[~]port1[-port2] ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. + --filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. поддерживается список через запятую. --filter-l7=[http|tls|quic|wireguard|dht|unknown] ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. - --ipset= ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. - --ipset-exclude= ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. + --ipset= ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. + --ipset-exclude= ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. --debug позволяет выводить подробный лог действий на консоль, в syslog или в файл. @@ -1154,9 +1160,7 @@ ipset/get_reestr_resolvable_domains.sh ipset/get_refilter_domains.sh - кладется в ipset/zapret-hosts.txt.gz. -Чтобы обновить списки, перезапускать nfqws или tpws не нужно. Обновляете файлы, затем даете сигнал HUP. -По HUP листы будут перечитаны. Если вдруг какого-то листа не окажется, процесс завершится с ошибкой. -Скрипты получения листов из ipset сами выдают HUP в конце. +При изменении времени модификации файлов списки перечитываются автоматически. При фильтрации по именам доменов демон должен запускаться без фильтрации по ipset. tpws и nfqws решают нужно ли применять дурение в зависимости от хоста, полученного из протокола прикладного уровня (http, tls, quic). @@ -1230,7 +1234,7 @@ nfqws и tpws могут сечь варианты 1-3, 4 они не распо По логу можно понять как избежать ложных срабатываний и подходит ли вообще вам этот режим. Можно использовать один autohostlist с множеством процессов. Все процессы проверяют время модификации файла. -Если файл был изменен в другом процессе, то происходит перечитывание всех include листов, включая autohostlist. +Если файл был изменен в другом процессе, происходит его перечитывание. Все процессы должны работать под одним uid, чтобы были права доступа на файл. Скрипты zapret ведут autohostlist в ipset/zapret-hosts-auto.txt. @@ -1252,6 +1256,7 @@ install_easy.sh при апгрейде zapret сохраняет этот фа Если DNS подменяется и провайдер перехватывает обращения к сторонним DNS, настройте dnscrypt. Еще один эффективный вариант - использовать ресолвер от yandex 77.88.8.88 на нестандартном порту 1253. Многие провайдеры не анализируют обращения к DNS на нестандартных портах. +blockcheck если видит подмену DNS автоматически переключается на DoH сервера. Следует прогнать blockcheck по нескольким заблокированным сайтам и выявить общий характер блокировок. Разные сайты могут быть заблокированы по-разному, нужно искать такую технику, которая работает на большинстве. @@ -1276,6 +1281,24 @@ Blockcheck имеет 3 уровня сканирования. standard дает возможность провести исследование как и на что реагирует DPI в плане методов обхода. force дает максимум проверок даже в случаях, когда ресурс работает без обхода или с более простыми стратегиями. +Есть ряд других параметров, которые не будут спрашиваться в диалоге, но которые можно переопределить через +переменные. Переопределение работает только из рутового шелла. При повышении привилегий через su/sudo переменные теряются. + +DOMAINS - список тестируемых доменов через пробел +CURL_MAX_TIME - время таймаута curl в секундах +CURL_MAX_TIME_QUIC - время таймаута curl для quic. если не задано, используется значение CURL_MAX_TIME +HTTP_PORT, HTTPS_PORT, QUIC_PORT - номера портов для соответствующих протоколов +SKIP_DNSCHECK=1 - отказ от проверки DNS +SKIP_TPWS=1 - отказ от тестов tpws +SKIP_PKTWS=1 - отказ от тестов nfqws/dvtws/winws +PKTWS_EXTRA, TPWS_EXTRA - дополнительные параметры nfqws/dvtws/winws и tpws +PKTWS_EXTRA_1 .. PKTWS_EXTRA_9, TPWS_EXTRA_1 .. TPWS_EXTRA_9 - отдельно дополнительные параметры, содержащие пробелы +SECURE_DNS=0|1 - принудительно выключить или включить DoH +DOH_SERVERS - список URL DoH через пробел для автоматического выбора работающего сервера +DOH_SERVER - конкретный DoH URL, отказ от поиска + +Пример запуска с переменными : SECURE_DNS=1 SKIP_TPWS=1 CURL_MAX_TIME=1 ./blockcheck.sh + СКАН ПОРТОВ Если в системе присутствует совместимый netcat (ncat от nmap или openbsd ncat. в openwrt по умолчанию нет.), то выполняется сканирование портов http или https всех IP адресов домена. @@ -1417,6 +1440,9 @@ tpws-socks требует настройки параметров tpws, но н группе параметров фильтра. Таких мест может быть несколько. Не нужно использовать в узких специализациях и в тех профилях, по которым точно не будет проходить трафик с известными протоколами, откуда поддерживается извлечение имени хоста (http, tls, quic). + - это вариация, при которой стандартный автолист используется как обычный. +То есть на этом профиле не происходит автоматическое добавление заблокированных доменов. +Но если на другом профиле что-то будет добавлено, то этот профиль примет изменения автоматически. # включение стандартной опции tpws в режиме socks TPWS_SOCKS_ENABLE=0 @@ -1462,7 +1488,7 @@ NFQWS_UDP_PKT_IN=0 NFQWS_OPT=" --filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-fooling=md5sig --new --filter-tcp=443 --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig --new ---filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 +--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 " diff --git a/docs/windows.txt b/docs/windows.txt index 809189b..6ef488b 100644 --- a/docs/windows.txt +++ b/docs/windows.txt @@ -175,7 +175,7 @@ blockcheck.sh написан на posix shell и требует некоторы Далее все как в *nix : 1 раз ./install_bin.sh , затем ./blockcheck.sh. WSL использовать нельзя, это не то же самое. -cygwin для обычной работы winws не нужен. Разве что вы хотите посылать winws SIGHUP для перечитки листов без перезапуска. +cygwin для обычной работы winws не нужен. автозапуск winws ----------------