mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-21 14:32:57 +03:00
Compare commits
No commits in common. "00bf5f680c28e2c3fb5d8c3a08ac9cef5f520ff2" and "dee9c04d2ad70c1fa583075efab1409e96fbad70" have entirely different histories.
00bf5f680c
...
dee9c04d2a
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -185,9 +185,9 @@ The setup is similar to OpenBSD, but there are important nuances.
|
|||||||
use it for redirection target.
|
use it for redirection target.
|
||||||
3. pf.conf syntax is a bit different from OpenBSD.
|
3. pf.conf syntax is a bit different from OpenBSD.
|
||||||
4. How to set maximum table size : sysctl net.pf.request_maxcount=2000000
|
4. How to set maximum table size : sysctl net.pf.request_maxcount=2000000
|
||||||
5. `divert-to` is broken. Loop avoidance scheme does not work.
|
5. The word 'divert-packet' is absent in the pfctl binary, divert-packet rules
|
||||||
This makes `dvtws` unusable with pf.
|
are not working. 'divert-to' is not the same thing. Looks like its not
|
||||||
Someone posted kernel patch but 14-RELEASE is still broken.
|
possible to use `dvtws` with PF in FreeBSD.
|
||||||
|
|
||||||
`/etc/pf.conf`:
|
`/etc/pf.conf`:
|
||||||
```
|
```
|
||||||
@ -303,8 +303,6 @@ rdr pass on em1 inet6 proto tcp from any to any port = http -> fe80::20c:29ff:5a
|
|||||||
rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5ae3:4821 port 988
|
rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5ae3:4821 port 988
|
||||||
```
|
```
|
||||||
|
|
||||||
Also there's a way to add redirect in the pfsense UI and start `tpws` from cron using `@reboot` prefix.
|
|
||||||
This way avoids modification of pfsense code.
|
|
||||||
|
|
||||||
## OpenBSD
|
## OpenBSD
|
||||||
|
|
||||||
@ -427,7 +425,8 @@ Then write the line:
|
|||||||
|
|
||||||
Initially, the kernel of this OS was based on BSD. That's why it is still BSD
|
Initially, the kernel of this OS was based on BSD. That's why it is still BSD
|
||||||
but a lot was modified by Apple. As usual a mass commercial project priorities
|
but a lot was modified by Apple. As usual a mass commercial project priorities
|
||||||
differ from their free counterparts. Apple guys do what they want.
|
differ from their free counterparts. Apple guys do what they want. What
|
||||||
|
everyone have updated long ago they keep old like a mammoth. But who cares?
|
||||||
|
|
||||||
MacOS used to have ipfw but it was removed later and replaced by PF. It looks
|
MacOS used to have ipfw but it was removed later and replaced by PF. It looks
|
||||||
like divert sockets are internally replaced with raw. Its possible to request a
|
like divert sockets are internally replaced with raw. Its possible to request a
|
||||||
|
42
docs/bsd.txt
42
docs/bsd.txt
@ -47,6 +47,15 @@ BSD не содержит системного вызова splice. tpws раб
|
|||||||
Управление асинхронными сокетами в tpws основано на linux-specific механизме epoll.
|
Управление асинхронными сокетами в tpws основано на linux-specific механизме epoll.
|
||||||
В BSD для его эмуляции используется epoll-shim - прослойка для эмуляции epoll на базе kqueue.
|
В BSD для его эмуляции используется epoll-shim - прослойка для эмуляции epoll на базе kqueue.
|
||||||
|
|
||||||
|
Некоторые функции dvtws пришлось реализовывать через хаки.
|
||||||
|
В BSD много ограничений, особенностей и багов при работе с низкоуровневой сетью, в особенности в области ipv6.
|
||||||
|
Казалось бы столько лет прошло, а в коде все еще сидят ограничители 15-20 летней давности.
|
||||||
|
Прямая отсылка ipv6 фреймов с измененным source address и вовсе невозможна через raw sockets.
|
||||||
|
OpenBSD не дает отсылать через raw sockets tcp фреймы.
|
||||||
|
Там, где функции нельзя было реализовать напрямую, либо их реализация привела бы к залезанию в низкоуровневые дебри,
|
||||||
|
используются те же divert сокеты. Оказывается через них можно скармливать ядру любые пакеты, обходя ограничения
|
||||||
|
raw sockets. Не знаю насколько это легально, но пока это работает. Однако, имейте в виду. Что-то может сломаться.
|
||||||
|
|
||||||
mdig и ip2net полностью работоспособны в BSD. В них нет ничего системо-зависимого.
|
mdig и ip2net полностью работоспособны в BSD. В них нет ничего системо-зависимого.
|
||||||
|
|
||||||
FreeBSD
|
FreeBSD
|
||||||
@ -113,10 +122,10 @@ ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
|||||||
|
|
||||||
Для всего трафика :
|
Для всего трафика :
|
||||||
ipfw delete 100
|
ipfw delete 100
|
||||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||||
# required for autottl mode only
|
# required for autottl mode only
|
||||||
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted recv em0
|
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
/opt/zapret/nfq/dvtws --port=989 ---dpi-desync=split2
|
||||||
|
|
||||||
Для трафика только на таблицу zapret, за исключением таблицы nozapret :
|
Для трафика только на таблицу zapret, за исключением таблицы nozapret :
|
||||||
ipfw delete 100
|
ipfw delete 100
|
||||||
@ -126,6 +135,15 @@ ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted
|
|||||||
ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||||
|
|
||||||
|
Недопущение зацикливания - повторного вхождения фейк пакетов на обработку.
|
||||||
|
FreeBSD игнорирует sockarg в ipv6.
|
||||||
|
Это искусственное ограничение в коде ядра, которое тянется уже лет 10-20.
|
||||||
|
Кто-то в свое время посчитал код сырым, и до сих пор никто не удосужился поправить.
|
||||||
|
dvtws в FreeBSD отсылает ipv4 фреймы через raw socket. Такие пакеты не 'diverted'. Они отсекаются по 'sockarg'.
|
||||||
|
Для отсылки ipv6 фейков используется divert socket, потому что ipv6 raw сокеты в BSD не дают самому
|
||||||
|
формировать IP заголовок и подменять source address. Фейки в ipv6 'diverted'. Они отсекаются по 'diverted'.
|
||||||
|
В linux nfqws для недопущения зацикливания используется fwmark.
|
||||||
|
|
||||||
|
|
||||||
PF в FreeBSD:
|
PF в FreeBSD:
|
||||||
Настройка аналогична OpenBSD, но есть важные нюансы.
|
Настройка аналогична OpenBSD, но есть важные нюансы.
|
||||||
@ -134,10 +152,8 @@ PF в FreeBSD:
|
|||||||
Смотрите через ifconfig адрес fe80:... и добавляете в правило
|
Смотрите через ifconfig адрес fe80:... и добавляете в правило
|
||||||
3) Синтаксис pf.conf немного отличается. Более новая версия PF.
|
3) Синтаксис pf.conf немного отличается. Более новая версия PF.
|
||||||
4) Лимит на количество элементов таблиц задается так : sysctl net.pf.request_maxcount=2000000
|
4) Лимит на количество элементов таблиц задается так : sysctl net.pf.request_maxcount=2000000
|
||||||
5) divert-to сломан. Он работает, но не работает механизм предотвращения зацикливаний.
|
5) Слово 'divert-packet' отсутствует в бинарике pfctl, правила divert-packet выдают ошибку.
|
||||||
Кто-то уже написал патч, но в 14-RELEASE проблема все еще есть.
|
'divert-to' - это не то. Не похоже, что в FreeBSD можно завести dvtws через PF.
|
||||||
Следовательно, на данный момент работа dvtws через pf невозможна.
|
|
||||||
|
|
||||||
/etc/pf.conf
|
/etc/pf.conf
|
||||||
-----------
|
-----------
|
||||||
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::31c:29ff:dee2:1c4d port 988
|
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::31c:29ff:dee2:1c4d port 988
|
||||||
@ -152,7 +168,7 @@ pfsense
|
|||||||
-------
|
-------
|
||||||
|
|
||||||
pfsense основано на FreeBSD.
|
pfsense основано на FreeBSD.
|
||||||
pfsense использует фаервол pf, а он имеет проблемы с divert.
|
pfsense использует фаервол pf, а он не поддерживает divert.
|
||||||
К счастью, модули ipfw и ipdivert присутствуют в поставке последних версий pfsense.
|
К счастью, модули ipfw и ipdivert присутствуют в поставке последних версий pfsense.
|
||||||
Их можно подгрузить через kldload.
|
Их можно подгрузить через kldload.
|
||||||
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов через sysctl, сделав ipfw первым.
|
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов через sysctl, сделав ipfw первым.
|
||||||
@ -188,7 +204,7 @@ sysctl net.inet6.ip6.pfil.outbound=ipfw,pf
|
|||||||
sysctl net.inet6.ip6.pfil.inbound=ipfw,pf
|
sysctl net.inet6.ip6.pfil.inbound=ipfw,pf
|
||||||
|
|
||||||
ipfw delete 100
|
ipfw delete 100
|
||||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||||
pkill ^dvtws$
|
pkill ^dvtws$
|
||||||
dvtws --daemon --port 989 --dpi-desync=split2
|
dvtws --daemon --port 989 --dpi-desync=split2
|
||||||
|
|
||||||
@ -245,9 +261,6 @@ rdr pass on em1 inet6 proto tcp from any to any port = http -> fe80::20c:29ff:5a
|
|||||||
rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5ae3:4821 port 988
|
rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5ae3:4821 port 988
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
Так же есть более элегантный способ запуска tpws через @reboot в cron и правило перенаправления в UI.
|
|
||||||
Это позволит не редактировать код pfsense.
|
|
||||||
|
|
||||||
|
|
||||||
OpenBSD
|
OpenBSD
|
||||||
-------
|
-------
|
||||||
@ -338,7 +351,10 @@ MacOS
|
|||||||
|
|
||||||
Иначально ядро этой ОС "darwin" основывалось на BSD, потому в ней много похожего на другие версии BSD.
|
Иначально ядро этой ОС "darwin" основывалось на BSD, потому в ней много похожего на другие версии BSD.
|
||||||
Однако, как и в других массовых коммерческих проектах, приоритеты смещаются в сторону от оригинала.
|
Однако, как и в других массовых коммерческих проектах, приоритеты смещаются в сторону от оригинала.
|
||||||
Яблочники что хотят, то и творят.
|
Яблочники что хотят, то и творят. Меняют, убирают, оставляют какие-то безумно старые версии API и утилит.
|
||||||
|
То, что уже давно везде обновили, может быть еще древним как мамонт в самой последней версии MacOS.
|
||||||
|
Но кого это волнует ?
|
||||||
|
|
||||||
Раньше был ipfw, потом его убрали, заменили на PF.
|
Раньше был ipfw, потом его убрали, заменили на PF.
|
||||||
Есть сомнения, что divert сокеты в ядре остались. Попытка создать divert socket не выдает ошибок,
|
Есть сомнения, что divert сокеты в ядре остались. Попытка создать divert socket не выдает ошибок,
|
||||||
но полученный сокет ведет себя точно так же, как raw, со всеми его унаследованными косяками + еще яблочно специфическими.
|
но полученный сокет ведет себя точно так же, как raw, со всеми его унаследованными косяками + еще яблочно специфическими.
|
||||||
|
@ -19,16 +19,22 @@ ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
|||||||
/opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
/opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
||||||
|
|
||||||
|
|
||||||
|
; Loop avoidance.
|
||||||
|
; FreeBSD artificially ignores sockarg for ipv6 in the kernel.
|
||||||
|
; This limitation is coming from the ipv6 early age. Code is still in "testing" state. 10-20 years. Everybody forgot about it.
|
||||||
|
; dvtws sends ipv6 forged frames using another divert socket (HACK). they can be filtered out using 'diverted'.
|
||||||
|
|
||||||
|
|
||||||
ipfw delete 100
|
ipfw delete 100
|
||||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||||
; required for autottl mode
|
; required for autottl mode
|
||||||
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted recv em0
|
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||||
; udp
|
; udp
|
||||||
ipfw add 100 divert 989 udp from any to any 443 out not diverted xmit em0
|
ipfw add 100 divert 989 udp from any to any 443 out not diverted not sockarg xmit em0
|
||||||
|
|
||||||
ipfw delete 100
|
ipfw delete 100
|
||||||
ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
||||||
ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted xmit em0
|
ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted not sockarg xmit em0
|
||||||
|
|
||||||
/opt/zapret/nfq/dvtws --port=989 --debug --dpi-desync=split
|
/opt/zapret/nfq/dvtws --port=989 --debug --dpi-desync=split
|
||||||
|
|
||||||
|
@ -299,12 +299,3 @@ v60
|
|||||||
|
|
||||||
blockcheck: port block test, partial ip block test
|
blockcheck: port block test, partial ip block test
|
||||||
nfqws: seqovl split/disorder modes
|
nfqws: seqovl split/disorder modes
|
||||||
|
|
||||||
v61
|
|
||||||
|
|
||||||
C code cleanups
|
|
||||||
dvtws: do not use raw sockets. use divert.
|
|
||||||
nfqws,tpws: detect TLS 1.2 ClientHello from very old libraries with SSL 3.0 version in record layer
|
|
||||||
nfqws,tpws: debug log to file and syslog
|
|
||||||
tpws: --connect-bind-addr option
|
|
||||||
tpws: log local endpoint (including source port number) for remote leg
|
|
||||||
|
@ -130,7 +130,7 @@ NFQWS_OPT_DESYNC_HTTP и NFQWS_OPT_DESYNC_HTTPS заменяют стратег
|
|||||||
9) На все остальные вопросы install_easy.sh отвечайте согласно выводимой аннонтации.
|
9) На все остальные вопросы install_easy.sh отвечайте согласно выводимой аннонтации.
|
||||||
|
|
||||||
10) Если ломаются отдельные незаблокированные ресурсы, следует вносить их в исключения, либо пользоваться ограничивающим
|
10) Если ломаются отдельные незаблокированные ресурсы, следует вносить их в исключения, либо пользоваться ограничивающим
|
||||||
ipset или хост листом. Читайте основной талмуд readme.txt ради подробностей.
|
ipset или хост листом. Читайте основной толмуд readme.txt ради подробностей.
|
||||||
|
|
||||||
Это минимальная инструкция, чтобы соориентироваться с чего начать. Однако, это - не панацея.
|
Это минимальная инструкция, чтобы соориентироваться с чего начать. Однако, это - не панацея.
|
||||||
В некоторых случаях вы не обойдетесь без знаний и основного "талмуда".
|
В некоторых случаях вы не обойдетесь без знаний и основного "талмуда".
|
||||||
|
@ -571,8 +571,7 @@ You need to use nftables instead with hook priority 101 or higher.
|
|||||||
tpws is transparent proxy.
|
tpws is transparent proxy.
|
||||||
|
|
||||||
```
|
```
|
||||||
--debug=0|1|2|syslog|@<filename> ; 1 and 2 means log to console and set debug level. for other targets use --debug-level.
|
--debug=0|1|2 ; 0(default)=silent 1=verbose 2=debug
|
||||||
--debug-level=0|1|2 ; specify debug level for syslog and @<filename>
|
|
||||||
--bind-addr=<v4_addr>|<v6_addr>; for v6 link locals append %interface_name : fe80::1%br-lan
|
--bind-addr=<v4_addr>|<v6_addr>; for v6 link locals append %interface_name : fe80::1%br-lan
|
||||||
--bind-iface4=<interface_name> ; bind to the first ipv4 addr of interface
|
--bind-iface4=<interface_name> ; bind to the first ipv4 addr of interface
|
||||||
--bind-iface6=<interface_name> ; bind to the first ipv6 addr of interface
|
--bind-iface6=<interface_name> ; bind to the first ipv6 addr of interface
|
||||||
@ -585,7 +584,6 @@ tpws is transparent proxy.
|
|||||||
--bind-wait-ip=<sec> ; after ifup wait for ip address to appear up to N seconds
|
--bind-wait-ip=<sec> ; after ifup wait for ip address to appear up to N seconds
|
||||||
--bind-wait-ip-linklocal=<sec> ; accept only link locals first N seconds then any
|
--bind-wait-ip-linklocal=<sec> ; accept only link locals first N seconds then any
|
||||||
--bind-wait-only ; wait for bind conditions satisfaction then exit. return code 0 if success.
|
--bind-wait-only ; wait for bind conditions satisfaction then exit. return code 0 if success.
|
||||||
--connect-bind-addr=<v4_addr>|<v6_addr> ; address for outbound connections. for v6 link locals append %%interface_name
|
|
||||||
--port=<port> ; port number to listen on
|
--port=<port> ; port number to listen on
|
||||||
--socks ; implement socks4/5 proxy instead of transparent proxy
|
--socks ; implement socks4/5 proxy instead of transparent proxy
|
||||||
--local-rcvbuf=<bytes> ; SO_RCVBUF for local legs
|
--local-rcvbuf=<bytes> ; SO_RCVBUF for local legs
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
zapret v.61
|
zapret v.60
|
||||||
|
|
||||||
English
|
English
|
||||||
-------
|
-------
|
||||||
@ -60,7 +60,7 @@ For english version refer to docs/readme.eng.txt
|
|||||||
Что сейчас происходит в России
|
Что сейчас происходит в России
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Раньше, до внедрения повсеместных систем ТСПУ, использовался зоопарк различных DPI
|
Раньше , до внедрения повсеместных систем ТСПУ, использовался зоопарк различных DPI
|
||||||
у провайдеров. Какие-то были активными, какие-то пассивными.
|
у провайдеров. Какие-то были активными, какие-то пассивными.
|
||||||
Сейчас время простых iptables окончательно ушло. Везде активный DPI ТСПУ, но кое-где
|
Сейчас время простых iptables окончательно ушло. Везде активный DPI ТСПУ, но кое-где
|
||||||
могут оставаться невыключенными дополнительные старые DPI из зоопарка.
|
могут оставаться невыключенными дополнительные старые DPI из зоопарка.
|
||||||
@ -102,7 +102,7 @@ DNAT на localhost работает в цепочке OUTPUT, но не раб
|
|||||||
|
|
||||||
sysctl -w net.ipv4.conf.<внутренний_интерфейс>.route_localnet=1
|
sysctl -w net.ipv4.conf.<внутренний_интерфейс>.route_localnet=1
|
||||||
|
|
||||||
Можно использовать "-j REDIRECT --to-port 988" вместо DNAT, однако в этом случае процесс transparent proxy
|
Можно использовать "-j REDIRECT --to-port 988" вместо DNAT , однако в этом случае процесс transparent proxy
|
||||||
должен слушать на ip адресе входящего интерфейса или на всех адресах. Слушать на всех - не есть хорошо
|
должен слушать на ip адресе входящего интерфейса или на всех адресах. Слушать на всех - не есть хорошо
|
||||||
с точки зрения безопасности. Слушать на одном (локальном) можно, но в случае автоматизированного
|
с точки зрения безопасности. Слушать на одном (локальном) можно, но в случае автоматизированного
|
||||||
скрипта придется его узнавать, потом динамически вписывать в команду. В любом случае требуются дополнительные усилия.
|
скрипта придется его узнавать, потом динамически вписывать в команду. В любом случае требуются дополнительные усилия.
|
||||||
@ -282,18 +282,6 @@ nfqws
|
|||||||
ЗАМЕЧАНИЕ. Параметр --wsize считается устаревшим и более не поддерживается в скриптах.
|
ЗАМЕЧАНИЕ. Параметр --wsize считается устаревшим и более не поддерживается в скриптах.
|
||||||
Функции сплита выполняются в рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
|
Функции сплита выполняются в рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
|
||||||
|
|
||||||
--debug позволяет выводить подробный лог действий на консоль, в syslog или в файл.
|
|
||||||
Может быть важен порядок следования опций. --debug лучше всего указывать в самом начале.
|
|
||||||
Опции анализируются последовательно. Если ошибка будет при проверке опции, а до анализа --debug еще дело не дошло,
|
|
||||||
то сообщения не будут выведены в файл или syslog.
|
|
||||||
При логировании в файл процесс не держит файл открытым. Ради каждой записи файл открывается и потом закрывается.
|
|
||||||
Так что файл можно удалить в любой момент, и он будет создан заново при первом же сообщении в лог.
|
|
||||||
Но имейте в виду, что если вы запускаете процесс под root, то будет сменен UID на не-root.
|
|
||||||
В начале на лог файл меняется owner, иначе запись будет невозможна. Если вы потом удалите файл,
|
|
||||||
и у процесса не будет прав на создание файла в его директории, лог больше не будет вестись.
|
|
||||||
Вместо удаления лучше использовать truncate.
|
|
||||||
В шелле это можно сделать через команду ": >filename"
|
|
||||||
|
|
||||||
АТАКА ДЕСИНХРОНИЗАЦИИ DPI
|
АТАКА ДЕСИНХРОНИЗАЦИИ DPI
|
||||||
Суть ее в следующем. После выполнения tcp 3-way handshake идет первый пакет с данными от клиента.
|
Суть ее в следующем. После выполнения tcp 3-way handshake идет первый пакет с данными от клиента.
|
||||||
Там обычно "GET / ..." или TLS ClientHello. Мы дропаем этот пакет, заменяя чем-то другим.
|
Там обычно "GET / ..." или TLS ClientHello. Мы дропаем этот пакет, заменяя чем-то другим.
|
||||||
@ -360,7 +348,7 @@ fakeknown отличается от fake тем, что применяется
|
|||||||
Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию),
|
Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию),
|
||||||
то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученый TTL больше длины пути,
|
то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученый TTL больше длины пути,
|
||||||
то автоматизм не сработал и берутся фиксированные значения TTL для атаки.
|
то автоматизм не сработал и берутся фиксированные значения TTL для атаки.
|
||||||
Техника позволяет решить вопрос, когда вся сеть перегорожена шлагбаумами (DPI, ТСПУ) везде где только можно,
|
Техника позволяет решить вопрос , когда вся сеть перегорожена шлагбаумами (DPI, ТСПУ) везде где только можно,
|
||||||
включая магистралов. Но потенциально может давать сбои.
|
включая магистралов. Но потенциально может давать сбои.
|
||||||
Например, при ассиметрии входящего и исходящего канала до конкретного сервера.
|
Например, при ассиметрии входящего и исходящего канала до конкретного сервера.
|
||||||
На каких-то провайдерах эта техника будет работать неплохо, на других доставит больше проблем, чем пользы.
|
На каких-то провайдерах эта техника будет работать неплохо, на других доставит больше проблем, чем пользы.
|
||||||
@ -417,7 +405,7 @@ Windows оставляет старые данные, поэтому disorder с
|
|||||||
split/disorder вместо split2/disorder2 по-прежнему добавляют дополнительные отдельные фейки.
|
split/disorder вместо split2/disorder2 по-прежнему добавляют дополнительные отдельные фейки.
|
||||||
|
|
||||||
Режимы десинхронизации hopbyhop, destopt и ipfrag1 (не путать с fooling !) относятся только к ipv6 и заключается
|
Режимы десинхронизации hopbyhop, destopt и ipfrag1 (не путать с fooling !) относятся только к ipv6 и заключается
|
||||||
в добавлении хедера "hop-by-hop options", "destination options" или "fragment" во все пакеты, попадающие под десинхронизацию.
|
в добавлении хедера "hop-by-hop options" , "destination options" или "fragment" во все пакеты, попадающие под десинхронизацию.
|
||||||
Здесь надо обязательно понимать, что добавление хедера увеличивает размер пакета, потому не может быть применено
|
Здесь надо обязательно понимать, что добавление хедера увеличивает размер пакета, потому не может быть применено
|
||||||
к пакетам максимального размера. Это имеет место при передаче больших сообщений.
|
к пакетам максимального размера. Это имеет место при передаче больших сообщений.
|
||||||
В случае невозможности отослать пакет дурение будет отменено, пакет будет выслан в оригинале.
|
В случае невозможности отослать пакет дурение будет отменено, пакет будет выслан в оригинале.
|
||||||
@ -514,7 +502,7 @@ ip6tables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT
|
|||||||
CONNTRACK
|
CONNTRACK
|
||||||
nfqws оснащен ограниченной реализацией слежения за состоянием tcp соединений (conntrack).
|
nfqws оснащен ограниченной реализацией слежения за состоянием tcp соединений (conntrack).
|
||||||
Он включается для реализации некоторых методов противодействия DPI.
|
Он включается для реализации некоторых методов противодействия DPI.
|
||||||
conntrack способен следить за фазой соединения : SYN,ESTABLISHED,FIN, количеством пакетов в каждую сторону,
|
conntrack способен следить за фазой соединения : SYN,ESTABLISHED,FIN , количеством пакетов в каждую сторону,
|
||||||
sequence numbers. conntrack способен "кормиться" пакетами в обе или только в одну сторону.
|
sequence numbers. conntrack способен "кормиться" пакетами в обе или только в одну сторону.
|
||||||
Соединение попадает в таблицу при обнаружении пакетов с выставленными флагами SYN или SYN,ACK.
|
Соединение попадает в таблицу при обнаружении пакетов с выставленными флагами SYN или SYN,ACK.
|
||||||
Поэтому если необходим conntrack, в правилах перенаправления iptables соединение должно идти на nfqws с самого первого
|
Поэтому если необходим conntrack, в правилах перенаправления iptables соединение должно идти на nfqws с самого первого
|
||||||
@ -659,8 +647,7 @@ tpws
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
tpws - это transparent proxy.
|
tpws - это transparent proxy.
|
||||||
--debug=0|1|2|syslog|@<filename> ; 0,1,2 = логирование на косоль : 0=тихо, 1(default)=подробно, 2=отладка.
|
--debug=0|1|2 ; Количество буковок в output : 0(default)=тихо, 1=подробно, 2=отладка
|
||||||
--debug-level=0|1|2 ; указать уровень логирования для syslog и @<filename>
|
|
||||||
--daemon ; демонизировать прогу
|
--daemon ; демонизировать прогу
|
||||||
--pidfile=<file> ; сохранить PID в файл
|
--pidfile=<file> ; сохранить PID в файл
|
||||||
--user=<username> ; менять uid процесса
|
--user=<username> ; менять uid процесса
|
||||||
@ -681,10 +668,6 @@ tpws - это transparent proxy.
|
|||||||
; --bind-linklocal=unwanted : согласиться на LL после N секунд
|
; --bind-linklocal=unwanted : согласиться на LL после N секунд
|
||||||
; --bind-linklocal=prefer : согласиться на global address после N секунд
|
; --bind-linklocal=prefer : согласиться на global address после N секунд
|
||||||
--bind-wait-only ; подождать все бинды и выйти. результат 0 в случае успеха, иначе не 0.
|
--bind-wait-only ; подождать все бинды и выйти. результат 0 в случае успеха, иначе не 0.
|
||||||
--connect-bind-addr ; с какого адреса подключаться во внешнюю сеть. может быть ipv4 или ipv6 адрес
|
|
||||||
; если указан ipv6 link local, то требуется указать с какого он интерфейса : fe80::1%br-lan
|
|
||||||
; опция может повторяться для v4 и v6 адресов
|
|
||||||
; опция не отменяет правил маршрутизации ! выбор интерфейса определяется лишь правилами маршрутизации, кроме случая v6 link local.
|
|
||||||
--socks ; вместо прозрачного прокси реализовать socks4/5 proxy
|
--socks ; вместо прозрачного прокси реализовать socks4/5 proxy
|
||||||
--no-resolve ; запретить ресолвинг имен через socks5
|
--no-resolve ; запретить ресолвинг имен через socks5
|
||||||
--resolve-threads ; количество потоков ресолвера
|
--resolve-threads ; количество потоков ресолвера
|
||||||
@ -742,22 +725,6 @@ tpws - это transparent proxy.
|
|||||||
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
|
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
|
||||||
|
|
||||||
|
|
||||||
--debug позволяет выводить подробный лог действий на консоль, в syslog или в файл.
|
|
||||||
Может быть важен порядок следования опций. --debug лучше всего указывать в самом начале.
|
|
||||||
Опции анализируются последовательно. Если ошибка будет при проверке опции, а до анализа --debug еще дело не дошло,
|
|
||||||
то сообщения не будут выведены в файл или syslog.
|
|
||||||
--debug=0|1|2 позволяют сразу в одном параметре включить логирование на консоль и указать уровень.
|
|
||||||
Сохранено для совместимости с более старыми версиями. Для выбора уровня в режиме syslog или file используйте
|
|
||||||
отдельный параметр --debug-level. Если в этих режимах --debug не указывать уровень через --debug-level, то
|
|
||||||
автоматически назначается уровень 1.
|
|
||||||
При логировании в файл процесс не держит файл открытым. Ради каждой записи файл открывается и потом закрывается.
|
|
||||||
Так что файл можно удалить в любой момент, и он будет создан заново при первом же сообщении в лог.
|
|
||||||
Но имейте в виду, что если вы запускаете процесс под root, то будет сменен UID на не-root.
|
|
||||||
В начале на лог файл меняется owner, иначе запись будет невозможна. Если вы потом удалите файл,
|
|
||||||
и у процесса не будет прав на создание файла в его директории, лог больше не будет вестись.
|
|
||||||
Вместо удаления лучше использовать truncate.
|
|
||||||
В шелле это можно сделать через команду ": >filename"
|
|
||||||
|
|
||||||
Параметры манипуляции могут сочетаться в любых комбинациях.
|
Параметры манипуляции могут сочетаться в любых комбинациях.
|
||||||
|
|
||||||
В случае http запроса split-http-req имеет преимущество над split-pos.
|
В случае http запроса split-http-req имеет преимущество над split-pos.
|
||||||
@ -836,7 +803,7 @@ tpws поддерживает эту возможность асинхронно
|
|||||||
Если при этом критический размер padding около MTU, значит скорее всего DPI не выполняет реассемблинг пакетов, и лучше будет использовать обычные опции --split-…
|
Если при этом критический размер padding около MTU, значит скорее всего DPI не выполняет реассемблинг пакетов, и лучше будет использовать обычные опции --split-…
|
||||||
Если все же реассемблинг выполняется, то критический размер будет около размера буфера DPI. Он может быть 4K или 8K, возможны и другие значения.
|
Если все же реассемблинг выполняется, то критический размер будет около размера буфера DPI. Он может быть 4K или 8K, возможны и другие значения.
|
||||||
|
|
||||||
--disorder - это попытка симулировать режим disorder2 nfqws, используя особенности ОС по реализации stream сокетов.
|
--disorder - это попытка симулировать режим disorder2 nfqws , используя особенности ОС по реализации stream сокетов.
|
||||||
Однако, в отличие от nfqws, здесь не требуются повышенные привилегии.
|
Однако, в отличие от nfqws, здесь не требуются повышенные привилегии.
|
||||||
Реализовано это следующим образом. У сокета есть возможность выставить TTL. Все пакеты будут отправляться с ним.
|
Реализовано это следующим образом. У сокета есть возможность выставить TTL. Все пакеты будут отправляться с ним.
|
||||||
Перед отправкой первого сегмента ставим TTL=1. Пакет будет дропнут на первом же роутере, он не дойдет ни до DPI, ни до сервера.
|
Перед отправкой первого сегмента ставим TTL=1. Пакет будет дропнут на первом же роутере, он не дойдет ни до DPI, ни до сервера.
|
||||||
@ -1439,7 +1406,7 @@ IFACE_WAN6="henet ipsec0"
|
|||||||
Несколько интерфейсов могут быть вписаны через пробел.
|
Несколько интерфейсов могут быть вписаны через пробел.
|
||||||
Если IFACE_WAN6 не задан, то берется значение IFACE_WAN.
|
Если IFACE_WAN6 не задан, то берется значение IFACE_WAN.
|
||||||
|
|
||||||
ВАЖНО : настройка маршрутизации, маскарада и т.д. не входит в задачу zapret.
|
ВАЖНО : настройка маршрутизации , маскарада и т.д. не входит в задачу zapret.
|
||||||
Включаются только режимы, обеспечивающие перехват транзитного трафика.
|
Включаются только режимы, обеспечивающие перехват транзитного трафика.
|
||||||
Возможно определить несколько интерфейсов следующим образом : IFACE_LAN="eth0 eth1 eth2"
|
Возможно определить несколько интерфейсов следующим образом : IFACE_LAN="eth0 eth1 eth2"
|
||||||
|
|
||||||
@ -1511,7 +1478,7 @@ zapret_custom_firewall_nft
|
|||||||
Смотрите как там сделано добавление iptables или запуск демонов.
|
Смотрите как там сделано добавление iptables или запуск демонов.
|
||||||
Используя хелпер функции, вы избавитесь от необходимости учитывать все возможные случаи
|
Используя хелпер функции, вы избавитесь от необходимости учитывать все возможные случаи
|
||||||
типа наличия/отсутствия ipv6, является ли система роутером, имена интерфейсов, ...
|
типа наличия/отсутствия ipv6, является ли система роутером, имена интерфейсов, ...
|
||||||
Хелперы это учитывают, вам нужно сосредоточиться лишь на фильтрах {ip,nf}tables и
|
Хелперы это учитывают , вам нужно сосредоточиться лишь на фильтрах {ip,nf}tables и
|
||||||
параметрах демонов.
|
параметрах демонов.
|
||||||
|
|
||||||
Код для openwrt и sysv немного отличается. В sysv нужно обрабатывать и запуск, и остановку демонов.
|
Код для openwrt и sysv немного отличается. В sysv нужно обрабатывать и запуск, и остановку демонов.
|
||||||
@ -1610,7 +1577,7 @@ nfqws может иметь такой глюк. При запуске с uid п
|
|||||||
Так же возможно, что глюк связан с кривым драйвером сотового интерфейса от китайцев, поскольку при использовании
|
Так же возможно, что глюк связан с кривым драйвером сотового интерфейса от китайцев, поскольку при использовании
|
||||||
wifi такого не наблюдается. suspend обработчика nfqueue на обычном linux не вызывает подобных фатальных последствий.
|
wifi такого не наблюдается. suspend обработчика nfqueue на обычном linux не вызывает подобных фатальных последствий.
|
||||||
Изменение UID на низкий (--uid 1 подойдет) позволяет решить эту проблему.
|
Изменение UID на низкий (--uid 1 подойдет) позволяет решить эту проблему.
|
||||||
Глюк был замечен на android 8.1 на девайсе, основанном на платформе mediatek.
|
Глюк был замечен на android 8.1 на девайсе , основанном на платформе mediatek.
|
||||||
|
|
||||||
Ответ на вопрос куда поместить tpws на android без рута, чтобы потом его запускать из приложений.
|
Ответ на вопрос куда поместить tpws на android без рута, чтобы потом его запускать из приложений.
|
||||||
Файл заливаем через adb shell в /data/local/tmp/, лучше всего в субфолдер.
|
Файл заливаем через adb shell в /data/local/tmp/, лучше всего в субфолдер.
|
||||||
@ -1650,7 +1617,7 @@ iptables -S
|
|||||||
Далее качаем zapret в /opt/zapret. Обычные действия с install_prereq.sh, install_bin.sh, blockcheck.sh.
|
Далее качаем zapret в /opt/zapret. Обычные действия с install_prereq.sh, install_bin.sh, blockcheck.sh.
|
||||||
|
|
||||||
Учтите, что стратегии обхода сотового оператора и домашнего wifi вероятно будут разные.
|
Учтите, что стратегии обхода сотового оператора и домашнего wifi вероятно будут разные.
|
||||||
Выделить сотового оператора легко через параметр iptables -o <имя интерфейса>. Имя может быть, например, ccmni0.
|
Выделить сотового оператора легко через параметр iptables -o <имя интерфейса>. Имя может быть , например, ccmni0.
|
||||||
Его легко увидеть через ifconfig.
|
Его легко увидеть через ifconfig.
|
||||||
Wifi сеть - обычно wlan0.
|
Wifi сеть - обычно wlan0.
|
||||||
|
|
||||||
@ -1806,10 +1773,10 @@ Openwrt является одной из немногих относительн
|
|||||||
VPS - это виртуальный сервер. Существует огромное множество датацентров, предлагающих данную услугу.
|
VPS - это виртуальный сервер. Существует огромное множество датацентров, предлагающих данную услугу.
|
||||||
На VPS могут выполняться какие угодно задачи. От простого веб сайта до навороченной системы собственной разработки.
|
На VPS могут выполняться какие угодно задачи. От простого веб сайта до навороченной системы собственной разработки.
|
||||||
Можно использовать VPS и для поднятия собственного vpn или прокси.
|
Можно использовать VPS и для поднятия собственного vpn или прокси.
|
||||||
Сама широта возможных способов применения, распространенность услуги сводят к минимуму возможности
|
Сама широта возможных способов применения , распространенность услуги сводят к минимуму возможности
|
||||||
регуляторов по бану сервисов такого типа. Да, если введут белые списки, то решение загнется, но это будет уже другая
|
регуляторов по бану сервисов такого типа. Да, если введут белые списки, то решение загнется, но это будет уже другая
|
||||||
реальность, в которой придется изобретать иные решения.
|
реальность, в которой придется изобретать иные решения.
|
||||||
Пока этого не сделали, никто не будет банить хостинги просто потому, что они предоставляют хостинг услуги.
|
Пока этого не сделали, никто не будет банить хостинги просто потому , что они предоставляют хостинг услуги.
|
||||||
Вы как индивидуум скорее всего никому не нужны. Подумайте чем вы отличаетесь от известного VPN провайдера.
|
Вы как индивидуум скорее всего никому не нужны. Подумайте чем вы отличаетесь от известного VPN провайдера.
|
||||||
VPN провайдер предоставляет _простую_ и _доступную_ услугу по обходу блокировок для масс.
|
VPN провайдер предоставляет _простую_ и _доступную_ услугу по обходу блокировок для масс.
|
||||||
Этот факт делает его первоочередной целью блокировки. РКН направит уведомление, после отказа сотрудничать
|
Этот факт делает его первоочередной целью блокировки. РКН направит уведомление, после отказа сотрудничать
|
||||||
|
@ -730,12 +730,12 @@ void parse_params(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if (params.droproot && chown(params.debug_logfile, params.uid, -1))
|
if (params.droproot && chown(params.debug_logfile, params.uid, -1))
|
||||||
fprintf(stderr, "could not chown %s. log file may not be writable after privilege drop\n", params.debug_logfile);
|
fprintf(stderr, "could not chown %s. log file may not be writable after privilege drop\n", params.debug_logfile);
|
||||||
if (!params.debug) params.debug = 1;
|
params.debug = 1;
|
||||||
params.debug_target = LOG_TARGET_FILE;
|
params.debug_target = LOG_TARGET_FILE;
|
||||||
}
|
}
|
||||||
else if (!strcmp(optarg,"syslog"))
|
else if (!strcmp(optarg,"syslog"))
|
||||||
{
|
{
|
||||||
if (!params.debug) params.debug = 1;
|
params.debug = 1;
|
||||||
params.debug_target = LOG_TARGET_SYSLOG;
|
params.debug_target = LOG_TARGET_SYSLOG;
|
||||||
openlog("tpws",LOG_PID,LOG_USER);
|
openlog("tpws",LOG_PID,LOG_USER);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user