diff --git a/docs/readme.en.md b/docs/readme.en.md index ece0ab9c..c8bf082d 100644 --- a/docs/readme.en.md +++ b/docs/readme.en.md @@ -1,4 +1,4 @@ -# zapret v71 +# zapret v71.1 # SCAMMER WARNING @@ -35,6 +35,7 @@ ___ - [UDP support](#udp-support) - [IP fragmentation](#ip-fragmentation) - [Multiple strategies](#multiple-strategies) + - [WIFI filtering](#wifi-filtering) - [Virtual machines](#virtual-machines) - [IPTABLES for nfqws](#iptables-for-nfqws) - [NFTABLES for nfqws](#nftables-for-nfqws) @@ -229,6 +230,7 @@ nfqws takes the following parameters: --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= ; L6-L7 protocol filter. multiple comma separated values allowed. proto: http tls quic wireguard dht discord stun unknown + --filter-ssid=ssid1[,ssid2,ssid3,...] ; per profile wifi SSID filter --ipset= ; ipset include filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) --ipset-ip= ; comma separated fixed subnet list --ipset-exclude= ; ipset exclude filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) @@ -659,6 +661,28 @@ This way you may never unblock all resources and only confuse yourself. IMPORTANT : user-mode ipset implementation was not designed as a kernel version replacement. Kernel version is much more effective. It's for the systems that lack ipset support : Windows and Linux without nftables and ipset kernel modules (Android, for example). +### WIFI filtering + +Wifi interface name is not related to connected SSID. +It's possible to connect interface to different SSIDs. +They may require different strategies. How to solve this problem ? + +You can run and stop nfqws instances manually. But you can also automate this. +Windows version `winws` has global filter `--ssid-filter`. +It connects or disconnects `winws` depending on connected SSIDs. +Routing is not take into account. This approach is possible because windivert can have multiple handlers with intersecting filter. +If SSID changes one `winws` connects and others disconnect. + +`winws` solution is hard to implement in Linux because one nfqueue can have only one handler and it's impossible to pass same traffic to multiple queues. +One must connect when others have already disconnected. +Instead, `nfqws` has per-profile `--filter-ssid` parameter. Like `--ssid-filter` it takes comma separated SSID list. +`nfqws` maintains ifname->SSID list which is updated not faster than once a second. +When a packet comes incoming or outgoing interface name is matched to the SSID and then used in profile selection algorithm. + +SSID info is taken the same way as `iw dev info` does. +In practice this command not always returns SSID name for reasons not known yet. If it does not display SSID then `--filter-ssid` will also not work. +Before using it check iw command output. + ### Virtual machines Most of nfqws packet magic does not work from VMs powered by virtualbox and vmware when network is NATed. diff --git a/docs/readme.md b/docs/readme.md index 7c32a494..f300ca5e 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,4 +1,4 @@ -# zapret v71 +# zapret v71.1 # ВНИМАНИЕ, остерегайтесь мошенников @@ -39,6 +39,7 @@ zapret является свободным и open source. - [ПОДДЕРЖКА UDP](#поддержка-udp) - [IP ФРАГМЕНТАЦИЯ](#ip-фрагментация) - [МНОЖЕСТВЕННЫЕ СТРАТЕГИИ](#множественные-стратегии) + - [ФИЛЬТРАЦИЯ ПО WIFI](#фильтрация-по-wifi) - [IPTABLES ДЛЯ NFQWS](#iptables-для-nfqws) - [NFTABLES ДЛЯ NFQWS](#nftables-для-nfqws) - [FLOW OFFLOADING](#flow-offloading) @@ -256,6 +257,7 @@ dvtws, собираемый из тех же исходников (см. [док --filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую. --filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает tcp. поддерживается список через запятую. --filter-l7= ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. proto : http tls quic wireguard dht discord stun unknown +--filter-ssid=ssid1[,ssid2,ssid3,...] ; фильтр по имени wifi сети (только для linux) --ipset= ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. --ipset-ip= ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей. --ipset-exclude= ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. @@ -772,6 +774,33 @@ L7 протокол становится известен обычно посл > Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подд3ержки ipset в ядре. > Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset. +### ФИЛЬТРАЦИЯ ПО WIFI + +Имя wifi сети никак не связано с сетевым интерфейсом адаптера wifi. +Интерфейс один, подключиться можно к любой сети. Для разных сетей разные стратегии. +Стратегия от сети A не работает или ломает сеть B. Что делать ? + +Можно вручную запускать и снимать инстансы nfqws. Но можно поступить иначе. +В windows версии winws есть глобальный фильтр `--ssid-filter`. +Он включает или отключает инстанс winws в зависимости от подключенности любого адаптера к конкретной wifi сети. +При этом не учитывается маршрутизация. Такой подход возможен потому, что к windivert можно прицепить несколько инстансов winws на пересекающихся фильтрах. +При смене wifi сети одни будут включаться, другие выключаться. + +Для linux применяется иное решение. Фильтр `--filter-ssid` относится к конкретному профилю. +Невозможно повесить несколько инстансов nfqws на одну и ту же очередь или направить один и тот же трафик на несколько очередей. +Подключение и отключение от очереди разных инстансов сопряжено со сложностями синхронизации между ними. +Поэтому обрабатывать трафик должен один инстанс, и он должен уметь работать с разными wifi сетями. +Это и реализовано в параметре `--filter-ssid`. Он берет список имен wifi сетей (SSID) через запятую аналогично `--ssid-filter` для winws. +Но при выборе профиля имеет значение куда идет конкретный обрабатываемый пакет. На какой интерфейс. Или с какого интерфейса пакет пришел, если он считается входящим. +Поэтому даже если у вас часть трафика идет на одну сеть, часть на другую, а часть вообще не идет по wifi, то все это можно настроить. + +Информация о подключенных сетях берется способом, используемым командой `iw dev info`. +Как показывает опыт, не всегда возвращается SSID. Пока не выяснено с чем это связано. +Перед использованием `--filter-ssid` удостоверьтесь, что iw возвращает имя сети. Иначе работать не будет. + +Сканируются все wifi интерфейсы, составляется список interface->SSID. Он обновляется по мере поступления +пакетов, но не чаще 1 раза в секунду. + ### IPTABLES ДЛЯ NFQWS iptables для задействования атаки на первые пакеты данных в tcp соединении : @@ -2287,7 +2316,7 @@ chcon u:object_r:system_file:s0 /data/local/tmp/zapret/tpws Если компа нет, то развертка chroot - единственный вариант, хотя и неудобный. Подойдет что-то легковесное, например, alpine или даже OpenWrt. Если это не эмулятор android, то универсальная архитектура - arm (любой вариант). -Если вы точно знаете, что ОС у вас 64-разрядная, то лучше вместо arm - aarch64. +Если вы точно знаете, что ОС у вас 64-разрядная, то лучше вместо arm - arm64. Выяснить архитектуру можно командой `uname -a`. ``` diff --git a/docs/windows.en.md b/docs/windows.en.md index 04922d24..bb8c1e5b 100644 --- a/docs/windows.en.md +++ b/docs/windows.en.md @@ -83,7 +83,7 @@ You must choose to install `curl`. To compile from sources install `gcc-core`,`m Make from directory `nfq` using `make cygwin64` or `make cygwin32` for 64 and 32 bit versions. `winws` requires `cygwin1.dll`, `windivert.dll`, `windivert64.sys` or `windivert32.sys`. -You can take them from `binaries/win64` or `binaries/win32`. +You can take them from `binaries/windows-x86_64` or `binaries/windows-x86`. There's no `arm64` signed `windivert` driver and no `cygwin`. But it's possible to use unsigned driver version in test mode and user mode components with x64 emulation. @@ -128,19 +128,6 @@ If you want to run `winws` from `cygwin` delete, rename or move `cygwin1.dll`. To simplify things it's advised to use `zapret-win-bundle`. -### auto start - -To start `winws` with windows use windows task scheduler. There are `task_*.cmd` batch files in `binaries/win64/zapret-winws`. -They create, remove, start and stop scheduled task `winws1`. They must be run as administrator. - -Edit `task_create.cmd` and write your `winws` parameters to `%WINWS1%` variable. If you need multiple `winws` instances -clone the code in all cmd files to support multiple tasks `winws1,winws2,winws3,...`. - -Tasks can also be controlled from GUI `taskschd.msc`. - -Also you can use windows services the same way with `service_*.cmd`. - - ### zapret-win-bundle To make your life easier there's ready to use [bundle](https://github.com/bol-van/zapret-win-bundle) with `cygwin`,`blockcheck` and `winws`. @@ -166,3 +153,15 @@ unix2dos winws.log `winws.log` will be in `cygwin/home/`. `unix2dos` helps with `windows 7` notepad. It's not necessary in `Windows 10` and later. Because 32-bit systems are rare nowadays `zapret-win-bundle` exists only for `Windows x64/arm64`. + +### auto start + +To start `winws` with windows use windows task scheduler. There are `task_*.cmd` batch files in `binaries/windows-x86-64/zapret-winws`. +They create, remove, start and stop scheduled task `winws1`. They must be run as administrator. + +Edit `task_create.cmd` and write your `winws` parameters to `%WINWS1%` variable. If you need multiple `winws` instances +clone the code in all cmd files to support multiple tasks `winws1,winws2,winws3,...`. + +Tasks can also be controlled from GUI `taskschd.msc`. + +Also you can use windows services the same way with `service_*.cmd`. diff --git a/docs/windows.md b/docs/windows.md index 024a12d0..e0d7f3b3 100644 --- a/docs/windows.md +++ b/docs/windows.md @@ -125,7 +125,7 @@ network locations в win10/11. Кое-что есть в **powershell**. Существует неочевидный момент, каcаемый запуска **winws** из cygwin shell\`а. Если в директории, где находится winws, находится копия `cygwin1.dll`, **winws** не запустится. -Если нужен запуск под cygwin, то следует удалить или переместить `cygwin1.dll` из `binaries/win64`. Это нужно для работы blockcheck. +Если нужен запуск под cygwin, то следует удалить или переместить `cygwin1.dll` из `binaries/windows-x86_64`. Это нужно для работы blockcheck. Из cygwin шелла можно посылать winws сигналы через `kill` точно так же, как в `*nix`. Как получить совместимый с windows 7 и winws cygwin : @@ -203,22 +203,6 @@ _cygwin_ для обычной работы **winws** не нужен. Однако, хотя такой способ и работает, использование **winws** сильно облегчает [zapret-win-bundle](https://github.com/bol-van/zapret-win-bundle). Там нет проблемы с `cygwin.dll`. -## Автозапуск winws - -Для запуска **winws** вместе с windows есть 2 варианта. Планировщик задач или службы windows. - -Можно создавать задачи и управлять ими через консольную программу schtasks. -В директории `binaries/win64/winws` подготовлены файлы `task_*.cmd` . -В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной `%WINWS1%`. -Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код -для задач _winws1_,_winws2_,_winws3_,_..._ - -Аналогично настраивается вариант запуска через службы windows. Смотрите `service_*.cmd`. - -Все батники требуется запускать от имени администратора. - -Управлять задачами можно так же из графической программы управления планировщиком `taskschd.msc` - ## Zapret-win-bundle Можно не возиться с _cygwin_, а взять готовый пакет, включающий в себя _cygwin_ и _blockcheck_ : https://github.com/bol-van/zapret-win-bundle @@ -257,3 +241,19 @@ _zapret-winws_ - это отдельный комплект для повсед > [!CAUTION] > Поскольку 32-битные windows мало востребованы, _zapret-win-bundle_ существует только в варианте для windows _x64/arm64_. + +## Автозапуск winws + +Для запуска **winws** вместе с windows есть 2 варианта. Планировщик задач или службы windows. + +Можно создавать задачи и управлять ими через консольную программу schtasks. +В директории `binaries/windows-x86_64/winws` подготовлены файлы `task_*.cmd` . +В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной `%WINWS1%`. +Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код +для задач _winws1_,_winws2_,_winws3_,_..._ + +Аналогично настраивается вариант запуска через службы windows. Смотрите `service_*.cmd`. + +Все батники требуется запускать от имени администратора. + +Управлять задачами можно так же из графической программы управления планировщиком `taskschd.msc`