Skip to content

Commit 54dd060

Browse files
author
bol-van
committed
doc works
1 parent 0be4cbf commit 54dd060

4 files changed

Lines changed: 86 additions & 34 deletions

File tree

docs/readme.en.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# zapret v71
1+
# zapret v71.1
22

33
# SCAMMER WARNING
44

@@ -35,6 +35,7 @@ ___
3535
- [UDP support](#udp-support)
3636
- [IP fragmentation](#ip-fragmentation)
3737
- [Multiple strategies](#multiple-strategies)
38+
- [WIFI filtering](#wifi-filtering)
3839
- [Virtual machines](#virtual-machines)
3940
- [IPTABLES for nfqws](#iptables-for-nfqws)
4041
- [NFTABLES for nfqws](#nftables-for-nfqws)
@@ -229,6 +230,7 @@ nfqws takes the following parameters:
229230
--filter-tcp=[~]port1[-port2]|* ; TCP port filter. ~ means negation. setting tcp and not setting udp filter denies udp. comma separated list supported.
230231
--filter-udp=[~]port1[-port2]|* ; UDP port filter. ~ means negation. setting udp and not setting tcp filter denies tcp. comma separated list supported.
231232
--filter-l7=<proto> ; L6-L7 protocol filter. multiple comma separated values allowed. proto: http tls quic wireguard dht discord stun unknown
233+
--filter-ssid=ssid1[,ssid2,ssid3,...] ; per profile wifi SSID filter
232234
--ipset=<filename> ; ipset include filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed)
233235
--ipset-ip=<ip_list> ; comma separated fixed subnet list
234236
--ipset-exclude=<filename> ; 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.
659661
IMPORTANT : user-mode ipset implementation was not designed as a kernel version replacement. Kernel version is much more effective.
660662
It's for the systems that lack ipset support : Windows and Linux without nftables and ipset kernel modules (Android, for example).
661663

664+
### WIFI filtering
665+
666+
Wifi interface name is not related to connected SSID.
667+
It's possible to connect interface to different SSIDs.
668+
They may require different strategies. How to solve this problem ?
669+
670+
You can run and stop nfqws instances manually. But you can also automate this.
671+
Windows version `winws` has global filter `--ssid-filter`.
672+
It connects or disconnects `winws` depending on connected SSIDs.
673+
Routing is not take into account. This approach is possible because windivert can have multiple handlers with intersecting filter.
674+
If SSID changes one `winws` connects and others disconnect.
675+
676+
`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.
677+
One must connect when others have already disconnected.
678+
Instead, `nfqws` has per-profile `--filter-ssid` parameter. Like `--ssid-filter` it takes comma separated SSID list.
679+
`nfqws` maintains ifname->SSID list which is updated not faster than once a second.
680+
When a packet comes incoming or outgoing interface name is matched to the SSID and then used in profile selection algorithm.
681+
682+
SSID info is taken the same way as `iw dev <ifname> info` does.
683+
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.
684+
Before using it check iw command output.
685+
662686
### Virtual machines
663687

664688
Most of nfqws packet magic does not work from VMs powered by virtualbox and vmware when network is NATed.

docs/readme.md

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# zapret v71
1+
# zapret v71.1
22

33
# ВНИМАНИЕ, остерегайтесь мошенников
44

@@ -39,6 +39,7 @@ zapret является свободным и open source.
3939
- [ПОДДЕРЖКА UDP](#поддержка-udp)
4040
- [IP ФРАГМЕНТАЦИЯ](#ip-фрагментация)
4141
- [МНОЖЕСТВЕННЫЕ СТРАТЕГИИ](#множественные-стратегии)
42+
- [ФИЛЬТРАЦИЯ ПО WIFI](#фильтрация-по-wifi)
4243
- [IPTABLES ДЛЯ NFQWS](#iptables-для-nfqws)
4344
- [NFTABLES ДЛЯ NFQWS](#nftables-для-nfqws)
4445
- [FLOW OFFLOADING](#flow-offloading)
@@ -256,6 +257,7 @@ dvtws, собираемый из тех же исходников (см. [док
256257
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую.
257258
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает tcp. поддерживается список через запятую.
258259
--filter-l7=<proto> ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. proto : http tls quic wireguard dht discord stun unknown
260+
--filter-ssid=ssid1[,ssid2,ssid3,...] ; фильтр по имени wifi сети (только для linux)
259261
--ipset=<filename> ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
260262
--ipset-ip=<ip_list> ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей.
261263
--ipset-exclude=<filename> ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
@@ -772,6 +774,33 @@ L7 протокол становится известен обычно посл
772774
> Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подд3ержки ipset в ядре.
773775
> Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset.
774776
777+
### ФИЛЬТРАЦИЯ ПО WIFI
778+
779+
Имя wifi сети никак не связано с сетевым интерфейсом адаптера wifi.
780+
Интерфейс один, подключиться можно к любой сети. Для разных сетей разные стратегии.
781+
Стратегия от сети A не работает или ломает сеть B. Что делать ?
782+
783+
Можно вручную запускать и снимать инстансы nfqws. Но можно поступить иначе.
784+
В windows версии winws есть глобальный фильтр `--ssid-filter`.
785+
Он включает или отключает инстанс winws в зависимости от подключенности любого адаптера к конкретной wifi сети.
786+
При этом не учитывается маршрутизация. Такой подход возможен потому, что к windivert можно прицепить несколько инстансов winws на пересекающихся фильтрах.
787+
При смене wifi сети одни будут включаться, другие выключаться.
788+
789+
Для linux применяется иное решение. Фильтр `--filter-ssid` относится к конкретному профилю.
790+
Невозможно повесить несколько инстансов nfqws на одну и ту же очередь или направить один и тот же трафик на несколько очередей.
791+
Подключение и отключение от очереди разных инстансов сопряжено со сложностями синхронизации между ними.
792+
Поэтому обрабатывать трафик должен один инстанс, и он должен уметь работать с разными wifi сетями.
793+
Это и реализовано в параметре `--filter-ssid`. Он берет список имен wifi сетей (SSID) через запятую аналогично `--ssid-filter` для winws.
794+
Но при выборе профиля имеет значение куда идет конкретный обрабатываемый пакет. На какой интерфейс. Или с какого интерфейса пакет пришел, если он считается входящим.
795+
Поэтому даже если у вас часть трафика идет на одну сеть, часть на другую, а часть вообще не идет по wifi, то все это можно настроить.
796+
797+
Информация о подключенных сетях берется способом, используемым командой `iw dev <ifname> info`.
798+
Как показывает опыт, не всегда возвращается SSID. Пока не выяснено с чем это связано.
799+
Перед использованием `--filter-ssid` удостоверьтесь, что iw возвращает имя сети. Иначе работать не будет.
800+
801+
Сканируются все wifi интерфейсы, составляется список interface->SSID. Он обновляется по мере поступления
802+
пакетов, но не чаще 1 раза в секунду.
803+
775804
### IPTABLES ДЛЯ NFQWS
776805

777806
iptables для задействования атаки на первые пакеты данных в tcp соединении :
@@ -2287,7 +2316,7 @@ chcon u:object_r:system_file:s0 /data/local/tmp/zapret/tpws
22872316
Если компа нет, то развертка chroot - единственный вариант, хотя и неудобный.
22882317
Подойдет что-то легковесное, например, alpine или даже OpenWrt.
22892318
Если это не эмулятор android, то универсальная архитектура - arm (любой вариант).
2290-
Если вы точно знаете, что ОС у вас 64-разрядная, то лучше вместо arm - aarch64.
2319+
Если вы точно знаете, что ОС у вас 64-разрядная, то лучше вместо arm - arm64.
22912320
Выяснить архитектуру можно командой `uname -a`.
22922321

22932322
```

docs/windows.en.md

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ You must choose to install `curl`. To compile from sources install `gcc-core`,`m
8383
Make from directory `nfq` using `make cygwin64` or `make cygwin32` for 64 and 32 bit versions.
8484

8585
`winws` requires `cygwin1.dll`, `windivert.dll`, `windivert64.sys` or `windivert32.sys`.
86-
You can take them from `binaries/win64` or `binaries/win32`.
86+
You can take them from `binaries/windows-x86_64` or `binaries/windows-x86`.
8787

8888
There's no `arm64` signed `windivert` driver and no `cygwin`.
8989
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`.
128128

129129
To simplify things it's advised to use `zapret-win-bundle`.
130130

131-
### auto start
132-
133-
To start `winws` with windows use windows task scheduler. There are `task_*.cmd` batch files in `binaries/win64/zapret-winws`.
134-
They create, remove, start and stop scheduled task `winws1`. They must be run as administrator.
135-
136-
Edit `task_create.cmd` and write your `winws` parameters to `%WINWS1%` variable. If you need multiple `winws` instances
137-
clone the code in all cmd files to support multiple tasks `winws1,winws2,winws3,...`.
138-
139-
Tasks can also be controlled from GUI `taskschd.msc`.
140-
141-
Also you can use windows services the same way with `service_*.cmd`.
142-
143-
144131
### zapret-win-bundle
145132

146133
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
166153
`winws.log` will be in `cygwin/home/<username>`. `unix2dos` helps with `windows 7` notepad. It's not necessary in `Windows 10` and later.
167154

168155
Because 32-bit systems are rare nowadays `zapret-win-bundle` exists only for `Windows x64/arm64`.
156+
157+
### auto start
158+
159+
To start `winws` with windows use windows task scheduler. There are `task_*.cmd` batch files in `binaries/windows-x86-64/zapret-winws`.
160+
They create, remove, start and stop scheduled task `winws1`. They must be run as administrator.
161+
162+
Edit `task_create.cmd` and write your `winws` parameters to `%WINWS1%` variable. If you need multiple `winws` instances
163+
clone the code in all cmd files to support multiple tasks `winws1,winws2,winws3,...`.
164+
165+
Tasks can also be controlled from GUI `taskschd.msc`.
166+
167+
Also you can use windows services the same way with `service_*.cmd`.

docs/windows.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ network locations в win10/11. Кое-что есть в **powershell**.
125125

126126
Существует неочевидный момент, каcаемый запуска **winws** из cygwin shell\`а. Если в директории, где находится winws, находится
127127
копия `cygwin1.dll`, **winws** не запустится.
128-
Если нужен запуск под cygwin, то следует удалить или переместить `cygwin1.dll` из `binaries/win64`. Это нужно для работы blockcheck.
128+
Если нужен запуск под cygwin, то следует удалить или переместить `cygwin1.dll` из `binaries/windows-x86_64`. Это нужно для работы blockcheck.
129129
Из cygwin шелла можно посылать winws сигналы через `kill` точно так же, как в `*nix`.
130130

131131
Как получить совместимый с windows 7 и winws cygwin :
@@ -203,22 +203,6 @@ _cygwin_ для обычной работы **winws** не нужен.
203203
Однако, хотя такой способ и работает, использование **winws** сильно облегчает [zapret-win-bundle](https://github.com/bol-van/zapret-win-bundle).
204204
Там нет проблемы с `cygwin.dll`.
205205

206-
## Автозапуск winws
207-
208-
Для запуска **winws** вместе с windows есть 2 варианта. Планировщик задач или службы windows.
209-
210-
Можно создавать задачи и управлять ими через консольную программу schtasks.
211-
В директории `binaries/win64/winws` подготовлены файлы `task_*.cmd` .
212-
В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной `%WINWS1%`.
213-
Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код
214-
для задач _winws1_,_winws2_,_winws3_,_..._
215-
216-
Аналогично настраивается вариант запуска через службы windows. Смотрите `service_*.cmd`.
217-
218-
Все батники требуется запускать от имени администратора.
219-
220-
Управлять задачами можно так же из графической программы управления планировщиком `taskschd.msc`
221-
222206
## Zapret-win-bundle
223207

224208
Можно не возиться с _cygwin_, а взять готовый пакет, включающий в себя _cygwin_ и _blockcheck_ : https://github.com/bol-van/zapret-win-bundle
@@ -257,3 +241,19 @@ _zapret-winws_ - это отдельный комплект для повсед
257241

258242
> [!CAUTION]
259243
> Поскольку 32-битные windows мало востребованы, _zapret-win-bundle_ существует только в варианте для windows _x64/arm64_.
244+
245+
## Автозапуск winws
246+
247+
Для запуска **winws** вместе с windows есть 2 варианта. Планировщик задач или службы windows.
248+
249+
Можно создавать задачи и управлять ими через консольную программу schtasks.
250+
В директории `binaries/windows-x86_64/winws` подготовлены файлы `task_*.cmd` .
251+
В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной `%WINWS1%`.
252+
Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код
253+
для задач _winws1_,_winws2_,_winws3_,_..._
254+
255+
Аналогично настраивается вариант запуска через службы windows. Смотрите `service_*.cmd`.
256+
257+
Все батники требуется запускать от имени администратора.
258+
259+
Управлять задачами можно так же из графической программы управления планировщиком `taskschd.msc`

0 commit comments

Comments
 (0)