mirror of https://github.com/bol-van/zapret/
30 changed files with 3372 additions and 3493 deletions
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.
@ -1,21 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2016-2021 bol-van |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
|||
MIT License |
|||
|
|||
Copyright (c) 2016-2021 bol-van |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
|||
|
@ -1,95 +1,95 @@ |
|||
WAN=em0 LAN=em1 |
|||
|
|||
FreeBSD IPFW : |
|||
|
|||
ipfw delete 100 |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from me to any 80,443 proto ip4 xmit em0 not uid daemon |
|||
ipfw add 100 fwd ::1,988 tcp from me to any 80,443 proto ip6 xmit em0 not uid daemon |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1 |
|||
ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1 |
|||
|
|||
ipfw delete 100 |
|||
ipfw add 100 allow tcp from me to table\(nozapret\) 80,443 |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from me to table\(zapret\) 80,443 proto ip4 xmit em0 not uid daemon |
|||
ipfw add 100 fwd ::1,988 tcp from me to table\(zapret\) 80,443 proto ip6 xmit em0 not uid daemon |
|||
ipfw add 100 allow tcp from any to table\(nozapret\) 80,443 recv em1 |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1 |
|||
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 |
|||
|
|||
|
|||
; 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 add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0 |
|||
ipfw add 100 divert 989 udp from any to any 443 out not diverted not sockarg xmit em0 |
|||
|
|||
ipfw delete 100 |
|||
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 not sockarg xmit em0 |
|||
|
|||
/opt/zapret/nfq/dvtws --port=989 --debug --dpi-desync=split |
|||
|
|||
|
|||
sample ipfw NAT setup : |
|||
|
|||
WAN=em0 |
|||
LAN=em1 |
|||
ipfw -q flush |
|||
ipfw -q nat 1 config if $WAN unreg_only reset |
|||
ipfw -q add 10 allow ip from any to any via $LAN |
|||
ipfw -q add 20 allow ip from any to any via lo0 |
|||
ipfw -q add 300 nat 1 ip4 from any to any in recv $WAN |
|||
ipfw -q add 301 check-state |
|||
ipfw -q add 350 skipto 390 tcp from any to any out xmit $WAN setup keep-state |
|||
ipfw -q add 350 skipto 390 udp from any to any out xmit $WAN keep-state |
|||
ipfw -q add 360 allow all from any to me in recv $WAN |
|||
ipfw -q add 390 nat 1 ip4 from any to any out xmit $WAN |
|||
ipfw -q add 10000 allow ip from any to any |
|||
|
|||
Forwarding : |
|||
sysctl net.inet.ip.forwarding=1 |
|||
sysctl net.inet6.ip6.forwarding=1 |
|||
|
|||
|
|||
OpenBSD PF : |
|||
|
|||
; dont know how to rdr-to from local system. doesn't seem to work. only works for routed traffic. |
|||
|
|||
/etc/pf.conf |
|||
pass in quick on em1 inet proto tcp to port {80,443} rdr-to 127.0.0.1 port 988 |
|||
pass in quick on em1 inet6 proto tcp to port {80,443} rdr-to ::1 port 988 |
|||
pfctl -f /etc/pf.conf |
|||
/opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1 |
|||
|
|||
; dvtws works both for routed and local |
|||
|
|||
pass in quick on em0 proto tcp from port {80,443} no state |
|||
pass out quick on em0 proto tcp to port {80,443} divert-packet port 989 no state |
|||
pfctl -f /etc/pf.conf |
|||
./dvtws --port=989 --dpi-desync=split2 |
|||
|
|||
; dvtws with table limitations : to zapret,zapret6 but not to nozapret,nozapret6 |
|||
; reload tables : pfctl -f /etc/pf.conf |
|||
set limit table-entries 2000000 |
|||
table <zapret> file "/opt/zapret/ipset/zapret-ip.txt" |
|||
table <zapret-user> file "/opt/zapret/ipset/zapret-ip-user.txt" |
|||
table <nozapret> file "/opt/zapret/ipset/zapret-ip-exclude.txt" |
|||
pass out quick on em0 inet proto tcp to <nozapret> port {80,443} |
|||
pass in quick on em0 inet proto tcp from <zapret> port {80,443} no state |
|||
pass out quick on em0 inet proto tcp to <zapret> port {80,443} divert-packet port 989 no state |
|||
pass in quick on em0 inet proto tcp from <zapret-user> port {80,443} no state |
|||
pass out quick on em0 inet proto tcp to <zapret-user> port {80,443} divert-packet port 989 no state |
|||
table <zapret6> file "/opt/zapret/ipset/zapret-ip6.txt" |
|||
table <zapret6-user> file "/opt/zapret/ipset/zapret-ip-user6.txt" |
|||
table <nozapret6> file "/opt/zapret/ipset/zapret-ip-exclude6.txt" |
|||
pass out quick on em0 inet6 proto tcp to <nozapret6> port {80,443} |
|||
pass in quick on em0 inet6 proto tcp from <zapret6> port {80,443} no state |
|||
pass out quick on em0 inet6 proto tcp to <zapret6> port {80,443} divert-packet port 989 no state |
|||
pass in quick on em0 inet6 proto tcp from <zapret6-user> port {80,443} no state |
|||
pass out quick on em0 inet6 proto tcp to <zapret6-user> port {80,443} divert-packet port 989 no state |
|||
WAN=em0 LAN=em1 |
|||
|
|||
FreeBSD IPFW : |
|||
|
|||
ipfw delete 100 |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from me to any 80,443 proto ip4 xmit em0 not uid daemon |
|||
ipfw add 100 fwd ::1,988 tcp from me to any 80,443 proto ip6 xmit em0 not uid daemon |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1 |
|||
ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1 |
|||
|
|||
ipfw delete 100 |
|||
ipfw add 100 allow tcp from me to table\(nozapret\) 80,443 |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from me to table\(zapret\) 80,443 proto ip4 xmit em0 not uid daemon |
|||
ipfw add 100 fwd ::1,988 tcp from me to table\(zapret\) 80,443 proto ip6 xmit em0 not uid daemon |
|||
ipfw add 100 allow tcp from any to table\(nozapret\) 80,443 recv em1 |
|||
ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1 |
|||
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 |
|||
|
|||
|
|||
; 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 add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0 |
|||
ipfw add 100 divert 989 udp from any to any 443 out not diverted not sockarg xmit em0 |
|||
|
|||
ipfw delete 100 |
|||
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 not sockarg xmit em0 |
|||
|
|||
/opt/zapret/nfq/dvtws --port=989 --debug --dpi-desync=split |
|||
|
|||
|
|||
sample ipfw NAT setup : |
|||
|
|||
WAN=em0 |
|||
LAN=em1 |
|||
ipfw -q flush |
|||
ipfw -q nat 1 config if $WAN unreg_only reset |
|||
ipfw -q add 10 allow ip from any to any via $LAN |
|||
ipfw -q add 20 allow ip from any to any via lo0 |
|||
ipfw -q add 300 nat 1 ip4 from any to any in recv $WAN |
|||
ipfw -q add 301 check-state |
|||
ipfw -q add 350 skipto 390 tcp from any to any out xmit $WAN setup keep-state |
|||
ipfw -q add 350 skipto 390 udp from any to any out xmit $WAN keep-state |
|||
ipfw -q add 360 allow all from any to me in recv $WAN |
|||
ipfw -q add 390 nat 1 ip4 from any to any out xmit $WAN |
|||
ipfw -q add 10000 allow ip from any to any |
|||
|
|||
Forwarding : |
|||
sysctl net.inet.ip.forwarding=1 |
|||
sysctl net.inet6.ip6.forwarding=1 |
|||
|
|||
|
|||
OpenBSD PF : |
|||
|
|||
; dont know how to rdr-to from local system. doesn't seem to work. only works for routed traffic. |
|||
|
|||
/etc/pf.conf |
|||
pass in quick on em1 inet proto tcp to port {80,443} rdr-to 127.0.0.1 port 988 |
|||
pass in quick on em1 inet6 proto tcp to port {80,443} rdr-to ::1 port 988 |
|||
pfctl -f /etc/pf.conf |
|||
/opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1 |
|||
|
|||
; dvtws works both for routed and local |
|||
|
|||
pass in quick on em0 proto tcp from port {80,443} no state |
|||
pass out quick on em0 proto tcp to port {80,443} divert-packet port 989 no state |
|||
pfctl -f /etc/pf.conf |
|||
./dvtws --port=989 --dpi-desync=split2 |
|||
|
|||
; dvtws with table limitations : to zapret,zapret6 but not to nozapret,nozapret6 |
|||
; reload tables : pfctl -f /etc/pf.conf |
|||
set limit table-entries 2000000 |
|||
table <zapret> file "/opt/zapret/ipset/zapret-ip.txt" |
|||
table <zapret-user> file "/opt/zapret/ipset/zapret-ip-user.txt" |
|||
table <nozapret> file "/opt/zapret/ipset/zapret-ip-exclude.txt" |
|||
pass out quick on em0 inet proto tcp to <nozapret> port {80,443} |
|||
pass in quick on em0 inet proto tcp from <zapret> port {80,443} no state |
|||
pass out quick on em0 inet proto tcp to <zapret> port {80,443} divert-packet port 989 no state |
|||
pass in quick on em0 inet proto tcp from <zapret-user> port {80,443} no state |
|||
pass out quick on em0 inet proto tcp to <zapret-user> port {80,443} divert-packet port 989 no state |
|||
table <zapret6> file "/opt/zapret/ipset/zapret-ip6.txt" |
|||
table <zapret6-user> file "/opt/zapret/ipset/zapret-ip-user6.txt" |
|||
table <nozapret6> file "/opt/zapret/ipset/zapret-ip-exclude6.txt" |
|||
pass out quick on em0 inet6 proto tcp to <nozapret6> port {80,443} |
|||
pass in quick on em0 inet6 proto tcp from <zapret6> port {80,443} no state |
|||
pass out quick on em0 inet6 proto tcp to <zapret6> port {80,443} divert-packet port 989 no state |
|||
pass in quick on em0 inet6 proto tcp from <zapret6-user> port {80,443} no state |
|||
pass out quick on em0 inet6 proto tcp to <zapret6-user> port {80,443} divert-packet port 989 no state |
|||
|
@ -1,245 +1,249 @@ |
|||
v1 |
|||
|
|||
Initial release |
|||
|
|||
v2 |
|||
|
|||
nfqws : command line options change. now using standard getopt. |
|||
nfqws : added options for window size changing and "Host:" case change |
|||
ISP support : tested on mns.ru and beeline (corbina) |
|||
init scripts : rewritten init scripts for simple choise of ISP |
|||
create_ipset : now using 'ipset restore', it works much faster |
|||
readme : updated. now using UTF-8 charset. |
|||
|
|||
v3 |
|||
|
|||
tpws : added transparent proxy (supports TPROXY and DNAT). |
|||
can help when ISP tracks whole HTTP session, not only the beginning |
|||
ipset : added zapret-hosts-user.txt which contain user defined host names to be resolved |
|||
and added to zapret ip list |
|||
ISP support : dom.ru support via TPROXY/DNAT |
|||
ISP support : successfully tested sknt.ru on 'domru' configuration |
|||
other configs will probably also work, but cannot test |
|||
compile : openwrt compile howto |
|||
|
|||
v4 |
|||
|
|||
tpws : added ability to insert extra space after http method : "GET /" => "GET /" |
|||
ISP support : TKT support |
|||
|
|||
v5 |
|||
|
|||
nfqws : ipv6 support in nfqws |
|||
|
|||
v6 |
|||
|
|||
ipset : added "get_antizapret.sh" |
|||
|
|||
v7 |
|||
|
|||
tpws : added ability to insert "." after Host: name |
|||
|
|||
v8 |
|||
|
|||
openwrt init : removed hotplug.d/firewall because of race conditions. now only use /etc/firewall.user |
|||
|
|||
v9 |
|||
|
|||
ipban : added ipban ipset. place domains banned by ip to zapret-hosts-user-ipban.txt |
|||
these IPs must be soxified for both http and https |
|||
ISP support : tiera support |
|||
ISP support : added DNS filtering to ubuntu and debian scripts |
|||
|
|||
v10 |
|||
|
|||
tpws : added split-pos option. split every message at specified position |
|||
|
|||
v11 |
|||
|
|||
ipset : scripts optimizations |
|||
|
|||
v12 |
|||
|
|||
nfqws : fix wrong tcp checksum calculation if packet length is odd and platform is big-endian |
|||
|
|||
v13 |
|||
|
|||
added binaries |
|||
|
|||
v14 |
|||
|
|||
change get_antizapret script to work with https://github.com/zapret-info/z-i/raw/master/dump.csv |
|||
filter out 192.168.*, 127.*, 10.* from blocked ips |
|||
|
|||
v15 |
|||
|
|||
added --hostspell option to nfqws and tpws |
|||
ISP support : beeline now catches "host" but other spellings still work |
|||
openwrt/LEDE : changed init script to work with procd |
|||
tpws, nfqws : minor cosmetic fixes |
|||
|
|||
v16 |
|||
|
|||
tpws: split-http-req=method : split inside method name, not after |
|||
ISP support : mns.ru changed split pos to 3 (got redirect page with HEAD req : curl -I ej.ru) |
|||
|
|||
v17 |
|||
|
|||
ISP support : athome moved from nfqws to tpws because of instability and http request hangs |
|||
tpws : added options unixeol,methodeol,hosttab |
|||
|
|||
v18 |
|||
|
|||
tpws,nfqws : added hostnospace option |
|||
|
|||
v19 |
|||
|
|||
tpws : added hostlist option |
|||
|
|||
v20 |
|||
|
|||
added ip2net. ip2net groups ips from iplist into subnets and reduces ipset size twice |
|||
|
|||
v21 |
|||
|
|||
added mdig. get_reestr.sh is *real* again |
|||
|
|||
v22 |
|||
|
|||
total review of init script logic |
|||
dropped support of older debian 7 and ubuntu 12/14 systems |
|||
install_bin.sh : auto binaries preparation |
|||
docs: readme review. some new topics added, others deleted |
|||
docs: VPN setup with policy based routing using wireguard |
|||
docs: wireguard modding guide |
|||
|
|||
v23 |
|||
|
|||
major init system rewrite |
|||
openwrt : separate firewall include /etc/firewall.zapret |
|||
install_easy.sh : easy setup on openwrt, debian, ubuntu, centos, fedora, opensuse |
|||
|
|||
v24 |
|||
|
|||
separate config from init scripts |
|||
gzip support in ipset/*.sh and tpws |
|||
|
|||
v25 |
|||
|
|||
init : move to native systemd units |
|||
use links to units, init scripts and firewall includes, no more copying |
|||
|
|||
v26 |
|||
|
|||
ipv6 support |
|||
tpws : advanced bind options |
|||
|
|||
v27 |
|||
|
|||
tpws : major connection code rewrite. originally it was derived from not top quality example , with many bugs and potential problems. |
|||
next generation connection code uses nonblocking sockets. now its in EXPERIMENTAL state. |
|||
|
|||
v28 |
|||
|
|||
tpws : added socks5 support |
|||
ipset : major RKN getlist rewrite. added antifilter.network support |
|||
|
|||
v29 |
|||
|
|||
nfqws : DPI desync attack |
|||
ip exclude system |
|||
|
|||
v30 |
|||
|
|||
nfqws : DPI desync attack modes : fake,rst |
|||
|
|||
v31 |
|||
|
|||
nfqws : DPI desync attack modes : disorder,disorder2,split,split2. |
|||
nfqws : DPI desync fooling mode : badseq. multiple modes supported |
|||
|
|||
v32 |
|||
|
|||
tpws : multiple binds |
|||
init scripts : run only one instance of tpws in any case |
|||
|
|||
v33 |
|||
|
|||
openwrt : flow offloading support |
|||
config : MODE refactoring |
|||
|
|||
v34 |
|||
|
|||
nfqws : dpi-desync 2 mode combos |
|||
nfqws : dpi-desync without parameter no more supported. previously it meant "fake" |
|||
nfqws : custom fake http request and tls client hello |
|||
|
|||
v35 |
|||
|
|||
limited FreeBSD and OpenBSD support |
|||
|
|||
v36 |
|||
|
|||
full FreeBSD and OpenBSD support |
|||
|
|||
v37 |
|||
|
|||
limited MacOS support |
|||
|
|||
v38 |
|||
|
|||
MacOS easy install |
|||
|
|||
v39 |
|||
|
|||
nfqws: conntrack, wssize |
|||
|
|||
v40 |
|||
|
|||
init scripts : IFACE_LAN, IFACE_WAN now accept multiple interfaces |
|||
init scripts : openwrt uses now OPENWRT_LAN parameter to override incoming interfaces for tpws |
|||
|
|||
v41 |
|||
|
|||
install_easy : openrc support |
|||
|
|||
v42 |
|||
|
|||
blockcheck.sh |
|||
|
|||
v43 |
|||
|
|||
nfqws: UDP desync with conntrack support (any-protocol only for now) |
|||
|
|||
v44 |
|||
|
|||
nfqws: ipfrag |
|||
|
|||
v45 |
|||
|
|||
nfqws: hop-by-hop ipv6 desync and fooling |
|||
|
|||
v46 |
|||
|
|||
big startup script refactoring to support nftables and new openwrt snapshot builds with firewall4 |
|||
|
|||
v47 |
|||
|
|||
nfqws: QUIC initial decryption |
|||
nfqws: udplen, fakeknown dpi desync modes |
|||
|
|||
v48 |
|||
|
|||
nfqws, tpws : multiple --hostlist and --hostlist-exclude support |
|||
launch system, ipset : no more list merging. all lists are passed separately to nfqws and tpws |
|||
nfqws : udplen fooling supports packet shrinking (negative increment value) |
|||
|
|||
v49 |
|||
|
|||
QUIC support integrated to the main system and setup |
|||
|
|||
v50 |
|||
|
|||
DHT protocol support. |
|||
DPI desync mode 'tamper' for DHT. |
|||
HEX string support in addition to binary files. |
|||
v1 |
|||
|
|||
Initial release |
|||
|
|||
v2 |
|||
|
|||
nfqws : command line options change. now using standard getopt. |
|||
nfqws : added options for window size changing and "Host:" case change |
|||
ISP support : tested on mns.ru and beeline (corbina) |
|||
init scripts : rewritten init scripts for simple choise of ISP |
|||
create_ipset : now using 'ipset restore', it works much faster |
|||
readme : updated. now using UTF-8 charset. |
|||
|
|||
v3 |
|||
|
|||
tpws : added transparent proxy (supports TPROXY and DNAT). |
|||
can help when ISP tracks whole HTTP session, not only the beginning |
|||
ipset : added zapret-hosts-user.txt which contain user defined host names to be resolved |
|||
and added to zapret ip list |
|||
ISP support : dom.ru support via TPROXY/DNAT |
|||
ISP support : successfully tested sknt.ru on 'domru' configuration |
|||
other configs will probably also work, but cannot test |
|||
compile : openwrt compile howto |
|||
|
|||
v4 |
|||
|
|||
tpws : added ability to insert extra space after http method : "GET /" => "GET /" |
|||
ISP support : TKT support |
|||
|
|||
v5 |
|||
|
|||
nfqws : ipv6 support in nfqws |
|||
|
|||
v6 |
|||
|
|||
ipset : added "get_antizapret.sh" |
|||
|
|||
v7 |
|||
|
|||
tpws : added ability to insert "." after Host: name |
|||
|
|||
v8 |
|||
|
|||
openwrt init : removed hotplug.d/firewall because of race conditions. now only use /etc/firewall.user |
|||
|
|||
v9 |
|||
|
|||
ipban : added ipban ipset. place domains banned by ip to zapret-hosts-user-ipban.txt |
|||
these IPs must be soxified for both http and https |
|||
ISP support : tiera support |
|||
ISP support : added DNS filtering to ubuntu and debian scripts |
|||
|
|||
v10 |
|||
|
|||
tpws : added split-pos option. split every message at specified position |
|||
|
|||
v11 |
|||
|
|||
ipset : scripts optimizations |
|||
|
|||
v12 |
|||
|
|||
nfqws : fix wrong tcp checksum calculation if packet length is odd and platform is big-endian |
|||
|
|||
v13 |
|||
|
|||
added binaries |
|||
|
|||
v14 |
|||
|
|||
change get_antizapret script to work with https://github.com/zapret-info/z-i/raw/master/dump.csv |
|||
filter out 192.168.*, 127.*, 10.* from blocked ips |
|||
|
|||
v15 |
|||
|
|||
added --hostspell option to nfqws and tpws |
|||
ISP support : beeline now catches "host" but other spellings still work |
|||
openwrt/LEDE : changed init script to work with procd |
|||
tpws, nfqws : minor cosmetic fixes |
|||
|
|||
v16 |
|||
|
|||
tpws: split-http-req=method : split inside method name, not after |
|||
ISP support : mns.ru changed split pos to 3 (got redirect page with HEAD req : curl -I ej.ru) |
|||
|
|||
v17 |
|||
|
|||
ISP support : athome moved from nfqws to tpws because of instability and http request hangs |
|||
tpws : added options unixeol,methodeol,hosttab |
|||
|
|||
v18 |
|||
|
|||
tpws,nfqws : added hostnospace option |
|||
|
|||
v19 |
|||
|
|||
tpws : added hostlist option |
|||
|
|||
v20 |
|||
|
|||
added ip2net. ip2net groups ips from iplist into subnets and reduces ipset size twice |
|||
|
|||
v21 |
|||
|
|||
added mdig. get_reestr.sh is *real* again |
|||
|
|||
v22 |
|||
|
|||
total review of init script logic |
|||
dropped support of older debian 7 and ubuntu 12/14 systems |
|||
install_bin.sh : auto binaries preparation |
|||
docs: readme review. some new topics added, others deleted |
|||
docs: VPN setup with policy based routing using wireguard |
|||
docs: wireguard modding guide |
|||
|
|||
v23 |
|||
|
|||
major init system rewrite |
|||
openwrt : separate firewall include /etc/firewall.zapret |
|||
install_easy.sh : easy setup on openwrt, debian, ubuntu, centos, fedora, opensuse |
|||
|
|||
v24 |
|||
|
|||
separate config from init scripts |
|||
gzip support in ipset/*.sh and tpws |
|||
|
|||
v25 |
|||
|
|||
init : move to native systemd units |
|||
use links to units, init scripts and firewall includes, no more copying |
|||
|
|||
v26 |
|||
|
|||
ipv6 support |
|||
tpws : advanced bind options |
|||
|
|||
v27 |
|||
|
|||
tpws : major connection code rewrite. originally it was derived from not top quality example , with many bugs and potential problems. |
|||
next generation connection code uses nonblocking sockets. now its in EXPERIMENTAL state. |
|||
|
|||
v28 |
|||
|
|||
tpws : added socks5 support |
|||
ipset : major RKN getlist rewrite. added antifilter.network support |
|||
|
|||
v29 |
|||
|
|||
nfqws : DPI desync attack |
|||
ip exclude system |
|||
|
|||
v30 |
|||
|
|||
nfqws : DPI desync attack modes : fake,rst |
|||
|
|||
v31 |
|||
|
|||
nfqws : DPI desync attack modes : disorder,disorder2,split,split2. |
|||
nfqws : DPI desync fooling mode : badseq. multiple modes supported |
|||
|
|||
v32 |
|||
|
|||
tpws : multiple binds |
|||
init scripts : run only one instance of tpws in any case |
|||
|
|||
v33 |
|||
|
|||
openwrt : flow offloading support |
|||
config : MODE refactoring |
|||
|
|||
v34 |
|||
|
|||
nfqws : dpi-desync 2 mode combos |
|||
nfqws : dpi-desync without parameter no more supported. previously it meant "fake" |
|||
nfqws : custom fake http request and tls client hello |
|||
|
|||
v35 |
|||
|
|||
limited FreeBSD and OpenBSD support |
|||
|
|||
v36 |
|||
|
|||
full FreeBSD and OpenBSD support |
|||
|
|||
v37 |
|||
|
|||
limited MacOS support |
|||
|
|||
v38 |
|||
|
|||
MacOS easy install |
|||
|
|||
v39 |
|||
|
|||
nfqws: conntrack, wssize |
|||
|
|||
v40 |
|||
|
|||
init scripts : IFACE_LAN, IFACE_WAN now accept multiple interfaces |
|||
init scripts : openwrt uses now OPENWRT_LAN parameter to override incoming interfaces for tpws |
|||
|
|||
v41 |
|||
|
|||
install_easy : openrc support |
|||
|
|||
v42 |
|||
|
|||
blockcheck.sh |
|||
|
|||
v43 |
|||
|
|||
nfqws: UDP desync with conntrack support (any-protocol only for now) |
|||
|
|||
v44 |
|||
|
|||
nfqws: ipfrag |
|||
|
|||
v45 |
|||
|
|||
nfqws: hop-by-hop ipv6 desync and fooling |
|||
|
|||
v46 |
|||
|
|||
big startup script refactoring to support nftables and new openwrt snapshot builds with firewall4 |
|||
|
|||
v47 |
|||
|
|||
nfqws: QUIC initial decryption |
|||
nfqws: udplen, fakeknown dpi desync modes |
|||
|
|||
v48 |
|||
|
|||
nfqws, tpws : multiple --hostlist and --hostlist-exclude support |
|||
launch system, ipset : no more list merging. all lists are passed separately to nfqws and tpws |
|||
nfqws : udplen fooling supports packet shrinking (negative increment value) |
|||
|
|||
v49 |
|||
|
|||
QUIC support integrated to the main system and setup |
|||
|
|||
v50 |
|||
|
|||
DHT protocol support. |
|||
DPI desync mode 'tamper' for DHT. |
|||
HEX string support in addition to binary files. |
|||
|
|||
v51 |
|||
|
|||
tpws --tlsrec attack. |
@ -1,63 +1,63 @@ |
|||
For window size changing : |
|||
|
|||
iptables -t mangle -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass |
|||
|
|||
For outgoing data manipulation ("Host:" case changing) : |
|||
|
|||
iptables -t mangle -I POSTROUTING -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I POSTROUTING -p tcp --dport 80 -m set --match-set zapret dst -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:5 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
|
|||
For dpi desync attack : |
|||
|
|||
iptables -t mangle -I POSTROUTING -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 2:4 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I POSTROUTING -p tcp --dport 443 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I POSTROUTING -p udp --dport 443 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
|
|||
|
|||
For TPROXY : |
|||
|
|||
sysctl -w net.ipv4.ip_forward=1 |
|||
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
|||
|
|||
ip -f inet rule add fwmark 1 lookup 100 |
|||
ip -f inet route add local default dev lo table 100 |
|||
# prevent loop |
|||
iptables -t filter -I INPUT -p tcp --dport 988 -j REJECT |
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j MARK --set-mark 1 |
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 988 |
|||
|
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -m set --match-set zapret dst -j MARK --set-mark 1 |
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -m mark --mark 0x1/0x1 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 988 |
|||
|
|||
For DNAT : |
|||
|
|||
# run tpws as user "tpws". its required to avoid loops. |
|||
sysctl -w net.ipv4.conf.eth1.route_localnet=1 |
|||
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.127:988 |
|||
iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to 127.0.0.127:988 |
|||
|
|||
|
|||
Reset all iptable rules : |
|||
|
|||
iptables -F |
|||
iptables -X |
|||
iptables -t nat -F |
|||
iptables -t nat -X |
|||
iptables -t mangle -F |
|||
iptables -t mangle -X |
|||
iptables -t raw -F |
|||
iptables -t raw -X |
|||
For window size changing : |
|||
|
|||
iptables -t mangle -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass |
|||
|
|||
For outgoing data manipulation ("Host:" case changing) : |
|||
|
|||
iptables -t mangle -I POSTROUTING -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I POSTROUTING -p tcp --dport 80 -m set --match-set zapret dst -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:5 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
|
|||
For dpi desync attack : |
|||
|
|||
iptables -t mangle -I POSTROUTING -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 2:4 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I POSTROUTING -p tcp --dport 443 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
iptables -t mangle -I POSTROUTING -p udp --dport 443 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass |
|||
|
|||
|
|||
For TPROXY : |
|||
|
|||
sysctl -w net.ipv4.ip_forward=1 |
|||
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
|||
|
|||
ip -f inet rule add fwmark 1 lookup 100 |
|||
ip -f inet route add local default dev lo table 100 |
|||
# prevent loop |
|||
iptables -t filter -I INPUT -p tcp --dport 988 -j REJECT |
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j MARK --set-mark 1 |
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 988 |
|||
|
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -m set --match-set zapret dst -j MARK --set-mark 1 |
|||
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -m mark --mark 0x1/0x1 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 988 |
|||
|
|||
For DNAT : |
|||
|
|||
# run tpws as user "tpws". its required to avoid loops. |
|||
sysctl -w net.ipv4.conf.eth1.route_localnet=1 |
|||
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.127:988 |
|||
iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to 127.0.0.127:988 |
|||
|
|||
|
|||
Reset all iptable rules : |
|||
|
|||
iptables -F |
|||
iptables -X |
|||
iptables -t nat -F |
|||
iptables -t nat -X |
|||
iptables -t mangle -F |
|||
iptables -t mangle -X |
|||
iptables -t raw -F |
|||
iptables -t raw -X |
|||
|
|||
Reset iptable policies : |
|||
|
|||
iptables -P INPUT ACCEPT |
|||
iptables -P FORWARD ACCEPT |
|||
iptables -P OUTPUT ACCEPT |
|||
iptables -t mangle -P POSTROUTING ACCEPT |
|||
iptables -t mangle -P PREROUTING ACCEPT |
|||
iptables -t mangle -P INPUT ACCEPT |
|||
iptables -t mangle -P FORWARD ACCEPT |
|||
iptables -t mangle -P OUTPUT ACCEPT |
|||
iptables -t raw -P PREROUTING ACCEPT |
|||
iptables -t raw -P OUTPUT ACCEPT |
|||
iptables -P INPUT ACCEPT |
|||
iptables -P FORWARD ACCEPT |
|||
iptables -P OUTPUT ACCEPT |
|||
iptables -t mangle -P POSTROUTING ACCEPT |
|||
iptables -t mangle -P PREROUTING ACCEPT |
|||
iptables -t mangle -P INPUT ACCEPT |
|||
iptables -t mangle -P FORWARD ACCEPT |
|||
iptables -t mangle -P OUTPUT ACCEPT |
|||
iptables -t raw -P PREROUTING ACCEPT |
|||
iptables -t raw -P OUTPUT ACCEPT |
|||
|
@ -1,266 +1,266 @@ |
|||
Пример ручной установки на debian-подобную систему |
|||
-------------------------------------------------- |
|||
|
|||
На debian основано большое количество дистрибутивов linux, включая ubuntu. |
|||
Здесь рассматриваются прежде всего Debian 8+ и Ubuntu 16+. |
|||
Но с большой вероятностью может сработать и на производных от них. |
|||
Главное условие - наличие systemd, apt и нескольких стандартных пакетов в репозитории. |
|||
|
|||
Установить пакеты : |
|||
apt-get update |
|||
apt-get install ipset curl dnsutils git |
|||
|
|||
Если хотите использовать nftables, то нужен пакет nftables, а ipset не обязателен. |
|||
|
|||
Скопировать директорию zapret в /opt или скачать через git : |
|||
cd /opt |
|||
git clone --depth 1 https://github.com/bol-van/zapret |
|||
|
|||
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики. |
|||
/opt/zapret/install_bin.sh |
|||
АЛЬТЕРНАТИВА : make -C /opt/zapret. Получите динамические бинарики под вашу ось. |
|||
Для сборки требуются dev пакеты : zlib1g-dev libcap-dev libnetfilter-queue-dev |
|||
|
|||
Настроить параметры согласно разделу "Выбор параметров". |
|||
|
|||
Создать ссылку на service unit в systemd : |
|||
ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system |
|||
|
|||
Удалить старые листы, если они были созданы ранее : |
|||
/opt/zapret/ipset/clear_lists.sh |
|||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены. |
|||
Выполнить скрипт обновления листа : |
|||
/opt/zapret/ipset/get_config.sh |
|||
Настроить таймер systemd для обновления листа : |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /lib/systemd/system |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /lib/systemd/system |
|||
|
|||
Принять изменения в systemd : |
|||
systemctl daemon-reload |
|||
|
|||
Включить автозапуск службы : |
|||
systemctl enable zapret |
|||
|
|||
Включить таймер обновления листа : |
|||
systemctl enable zapret-list-update.timer |
|||
|
|||
Запустить службу : |
|||
systemctl start zapret |
|||
|
|||
Шпаргалка по управлению службой и таймером : |
|||
|
|||
enable auto start : systemctl enable zapret |
|||
disable auto start : systemctl disable zapret |
|||
start : systemctl start zapret |
|||
stop : systemctl stop zapret |
|||
status, output messages : systemctl status zapret |
|||
timer info : systemctl list-timer |
|||
delete service : systemctl disable zapret ; rm /lib/systemd/system/zapret.service |
|||
delete timer : systemctl disable zapret-list-update.timer ; rm /lib/systemd/system/zapret-list-update.* |
|||
|
|||
Centos 7+, Fedora |
|||
----------------- |
|||
|
|||
Centos с 7 версии и более-менее новые федоры построены на systemd. |
|||
В качестве пакетного менеджера используется yum. |
|||
|
|||
Установить пакеты : |
|||
yum install -y curl ipset dnsutils git |
|||
|
|||
Далее все аналогично debian. |
|||
|
|||
OpenSUSE |
|||
-------- |
|||
|
|||
Новые OpenSUSE основаны на systemd и менеджере пакетов zypper. |
|||
|
|||
Установить пакеты : |
|||
zypper --non-interactive install curl ipset |
|||
|
|||
Далее все аналогично debian, кроме расположения systemd. |
|||
В opensuse он находится не в /lib/systemd, а в /usr/lib/systemd. |
|||
Правильные команды будут : |
|||
|
|||
ln -fs /opt/zapret/init.d/systemd/zapret.service /usr/lib/systemd/system |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /usr/lib/systemd/system |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /usr/lib/systemd/system |
|||
|
|||
Arch linux |
|||
---------- |
|||
|
|||
Построен на базе systemd. |
|||
|
|||
Установить пакеты : |
|||
pacman -Syy |
|||
pacman --noconfirm -S ipset curl |
|||
|
|||
Далее все аналогично debian. |
|||
|
|||
Gentoo |
|||
------ |
|||
|
|||
Эта система использует OpenRC - улучшенную версию sysvinit. |
|||
Установка пакетов производится командой : emerge <package_name> |
|||
Пакеты собираются из исходников. |
|||
|
|||
Требуются все те же ipset, curl, git для скачивания с github. |
|||
git и curl по умолчанию могут присутствовать, ipset отсутствует. |
|||
|
|||
emerge ipset |
|||
|
|||
Настроить параметры согласно разделу "Выбор параметров". |
|||
|
|||
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики. |
|||
/opt/zapret/install_bin.sh |
|||
АЛЬТЕРНАТИВА : make -C /opt/zapret. Получите динамические бинарики под вашу ось. |
|||
|
|||
Удалить старые листы, если они были созданы ранее : |
|||
/opt/zapret/ipset/clear_lists.sh |
|||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены. |
|||
Выполнить скрипт обновления листа : |
|||
/opt/zapret/ipset/get_config.sh |
|||
Зашедулить обновление листа : |
|||
crontab -e |
|||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh" |
|||
|
|||
Подключить init скрипт : |
|||
|
|||
ln -fs /opt/zapret/init.d/openrc/zapret /etc/init.d |
|||
rc-update add zapret |
|||
|
|||
Запустить службу : |
|||
|
|||
rc-service zapret start |
|||
|
|||
Шпаргалка по управлению службой : |
|||
|
|||
enable auto start : rc-update add zapret |
|||
disable auto start : rc-update del zapret |
|||
start : rc-service zapret start |
|||
stop : rc-service zapret stop |
|||
|
|||
|
|||
|
|||
Ручная установка на openwrt/LEDE 15.xx-21.xx |
|||
-------------------------------------------- |
|||
|
|||
!!! Данная инструкция написана для систем, основанных на iptables+firewall3 |
|||
!!! В новых версиях openwrt переходит на nftables+firewall4, инструкция неприменима. Пользуйтесь install_easy.sh |
|||
|
|||
Установить дополнительные пакеты : |
|||
opkg update |
|||
opkg install iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ipset curl |
|||
(ipv6) opkg install ip6tables-mod-nat |
|||
(опционально) opkg install gzip |
|||
(опционально) opkg install coreutils-sort |
|||
|
|||
ЭКОНОМИЯ МЕСТА : |
|||
|
|||
gzip от busybox в разы медленней полноценного варианта. gzip используется скриптами получения листов. |
|||
sort от busybox медленней полноценного варианта и жрет намного больше памяти. sort используется скриптами получения листов. |
|||
iptables-mod-nfqueue можно выкинуть, если не будем пользоваться nfqws |
|||
curl можно выкинуть, если для получения ip листа будет использоваться только get_user.sh |
|||
|
|||
Самая главная трудность - скомпилировать программы на C. Это можно сделать на linux x64 при помощи SDK, который |
|||
можно скачать с официального сайта openwrt или LEDE. Но процесс кросс компиляции - это всегда сложности. |
|||
Недостаточно запустить make как на традиционной linux системе. |
|||
Поэтому в binaries имеются готовые статические бинарики для всех самых распространенных архитектур. |
|||
Статическая сборка означает, что бинарик не зависит от типа libc (glibc, uclibc или musl) и наличия установленных so. |
|||
Его можно использовать сразу. Лишь бы подходил тип CPU. У ARM и MIPS есть несколько версий. |
|||
Скорее всего найдется рабочий вариант. Если нет - вам придется собирать самостоятельно. |
|||
Для всех поддерживаемых архитектур бинарики запакованы upx. На текущий момент все, кроме mips64. |
|||
|
|||
Скопировать директорию "zapret" в /opt на роутер. |
|||
|
|||
Если места достаточно, самый простой способ : |
|||
opkg update |
|||
opkg install git-http |
|||
mkdir /opt |
|||
cd /opt |
|||
git clone --depth 1 https://github.com/bol-van/zapret |
|||
|
|||
Если места немного : |
|||
opkg update |
|||
opkg install openssh-sftp-server unzip |
|||
ifconfig br-lan |
|||
Скачать на комп с github zip архив кнопкой "Clone or download"->Download ZIP |
|||
Скопировать средствами sftp zip архив на роутер в /tmp. |
|||
mkdir /opt |
|||
cd /opt |
|||
unzip /tmp/zapret-master.zip |
|||
mv zapret-master zapret |
|||
rm /tmp/zapret-master.zip |
|||
|
|||
Если места совсем мало : |
|||
На linux системе скачать и распаковать zapret. Оставить необходимый минимум файлов. |
|||
Запаковать в архив zapret.tar.gz. |
|||
nc -l -p 1111 <zapret.tar.gz |
|||
На роутере |
|||
cd /tmp |
|||
nc <linux_system_ip> 1111 >zapret.tar.gz |
|||
|
|||
Не стоит работать с распакованной версией zapret на windows. Потеряются ссылки и chmod. |
|||
|
|||
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики. |
|||
/opt/zapret/install_bin.sh |
|||
|
|||
Создать ссылку на скрипт запуска : |
|||
ln -fs /opt/zapret/init.d/openwrt/zapret /etc/init.d |
|||
Создать ссылку на скрипт события поднятия интерфейса : |
|||
ln -fs /opt/zapret/init.d/openwrt/90-zapret /etc/hotplug.d/iface |
|||
|
|||
Настроить параметры согласно разделу "Выбор параметров". |
|||
|
|||
Удалить старые листы, если они были созданы ранее : |
|||
/opt/zapret/ipset/clear_lists.sh |
|||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены. |
|||
Выполнить скрипт обновления листа : |
|||
/opt/zapret/ipset/get_config.sh |
|||
Зашедулить обновление листа : |
|||
crontab -e |
|||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh" |
|||
|
|||
Включить автозапуск службы и запустить ее : |
|||
/etc/init.d/zapret enable |
|||
/etc/init.d/zapret start |
|||
ПРИМЕЧАНИЕ : на этапе старта системы интерфейсы еще не подняты. в некоторых случаях невозможно правильно |
|||
сформировать параметры запуска демонов, не зная имя физического интерфейса LAN. |
|||
Cкрипт из /etc/hotplug.d/iface перезапустит демоны по событию поднятия LAN. |
|||
|
|||
Создать ссылку на firewall include : |
|||
ln -fs /opt/zapret/init.d/openwrt/firewall.zapret /etc/firewall.zapret |
|||
Проверить была ли создана ранее запись о firewall include : |
|||
uci show firewall | grep firewall.zapret |
|||
Если firewall.zapret нет, значит добавить : |
|||
uci add firewall include |
|||
uci set firewall.@include[-1].path="/etc/firewall.zapret" |
|||
uci set firewall.@include[-1].reload="1" |
|||
uci commit firewall |
|||
Проверить не включен ли flow offload : |
|||
uci show firewall.@defaults[0] |
|||
Если flow_offloading=1 или flow_offloading_hw=1 , |
|||
uci set firewall.@defaults[0].flow_offloading=0 |
|||
uci set firewall.@defaults[0].flow_offloading_hw=0 |
|||
uci commit firewall |
|||
Перезапустить фаервол : |
|||
fw3 restart |
|||
|
|||
Посмотреть через iptables -nL, ip6tables -nL или через luci вкладку "firewall" появились ли нужные правила. |
|||
|
|||
ЭКОНОМИЯ МЕСТА : если его мало, то можно оставить в директории zapret лишь подкаталоги |
|||
ipset, common, файл config, init.d/openwrt. |
|||
Далее нужно создать подкаталоги с реально используемыми бинариками (ip2net, mdig, tpws, nfq) |
|||
и скопировать туда из binaries рабочие executables. |
|||
|
|||
ЕСЛИ ВСЕ ПЛОХО С МЕСТОМ : откажитесь от работы со списком РКН. используйте только get_user.sh |
|||
|
|||
ЕСЛИ СОВСЕМ ВСЕ УЖАСНО С МЕСТОМ : берете tpws и делаете все своими руками. поднятие iptables, автостарт бинарика. |
|||
С некоторых версий скрипты запуска zapret без ipset не работают (он требуется для ip exclude) |
|||
|
|||
СОВЕТ : Покупайте только роутеры с USB. В USB можно воткнуть флэшку и вынести на нее корневую файловую систему |
|||
или использовать ее в качестве оверлея. Не надо мучать себя, запихивая незапихиваемое в 8 мб встроенной флэшки. |
|||
Для комфортной работы с zapret нужен роутер с 16 Mb встроенной памяти или USB разъемом и 128+ Mb RAM. |
|||
На 64 Mb без swap будут проблемы с листами РКН. Если у вас только 64 Mb, и вы хотите листы РКН, подключите swap. |
|||
32 Mb для современных версий openwrt - конфигурация на грани живучести. Возможны хаотические падения процессов в oom. |
|||
Работа с листами РКН невозможна в принципе. |
|||
|
|||
Пример ручной установки на debian-подобную систему |
|||
-------------------------------------------------- |
|||
|
|||
На debian основано большое количество дистрибутивов linux, включая ubuntu. |
|||
Здесь рассматриваются прежде всего Debian 8+ и Ubuntu 16+. |
|||
Но с большой вероятностью может сработать и на производных от них. |
|||
Главное условие - наличие systemd, apt и нескольких стандартных пакетов в репозитории. |
|||
|
|||
Установить пакеты : |
|||
apt-get update |
|||
apt-get install ipset curl dnsutils git |
|||
|
|||
Если хотите использовать nftables, то нужен пакет nftables, а ipset не обязателен. |
|||
|
|||
Скопировать директорию zapret в /opt или скачать через git : |
|||
cd /opt |
|||
git clone --depth 1 https://github.com/bol-van/zapret |
|||
|
|||
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики. |
|||
/opt/zapret/install_bin.sh |
|||
АЛЬТЕРНАТИВА : make -C /opt/zapret. Получите динамические бинарики под вашу ось. |
|||
Для сборки требуются dev пакеты : zlib1g-dev libcap-dev libnetfilter-queue-dev |
|||
|
|||
Настроить параметры согласно разделу "Выбор параметров". |
|||
|
|||
Создать ссылку на service unit в systemd : |
|||
ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system |
|||
|
|||
Удалить старые листы, если они были созданы ранее : |
|||
/opt/zapret/ipset/clear_lists.sh |
|||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены. |
|||
Выполнить скрипт обновления листа : |
|||
/opt/zapret/ipset/get_config.sh |
|||
Настроить таймер systemd для обновления листа : |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /lib/systemd/system |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /lib/systemd/system |
|||
|
|||
Принять изменения в systemd : |
|||
systemctl daemon-reload |
|||
|
|||
Включить автозапуск службы : |
|||
systemctl enable zapret |
|||
|
|||
Включить таймер обновления листа : |
|||
systemctl enable zapret-list-update.timer |
|||
|
|||
Запустить службу : |
|||
systemctl start zapret |
|||
|
|||
Шпаргалка по управлению службой и таймером : |
|||
|
|||
enable auto start : systemctl enable zapret |
|||
disable auto start : systemctl disable zapret |
|||
start : systemctl start zapret |
|||
stop : systemctl stop zapret |
|||
status, output messages : systemctl status zapret |
|||
timer info : systemctl list-timer |
|||
delete service : systemctl disable zapret ; rm /lib/systemd/system/zapret.service |
|||
delete timer : systemctl disable zapret-list-update.timer ; rm /lib/systemd/system/zapret-list-update.* |
|||
|
|||
Centos 7+, Fedora |
|||
----------------- |
|||
|
|||
Centos с 7 версии и более-менее новые федоры построены на systemd. |
|||
В качестве пакетного менеджера используется yum. |
|||
|
|||
Установить пакеты : |
|||
yum install -y curl ipset dnsutils git |
|||
|
|||
Далее все аналогично debian. |
|||
|
|||
OpenSUSE |
|||
-------- |
|||
|
|||
Новые OpenSUSE основаны на systemd и менеджере пакетов zypper. |
|||
|
|||
Установить пакеты : |
|||
zypper --non-interactive install curl ipset |
|||
|
|||
Далее все аналогично debian, кроме расположения systemd. |
|||
В opensuse он находится не в /lib/systemd, а в /usr/lib/systemd. |
|||
Правильные команды будут : |
|||
|
|||
ln -fs /opt/zapret/init.d/systemd/zapret.service /usr/lib/systemd/system |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /usr/lib/systemd/system |
|||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /usr/lib/systemd/system |
|||
|
|||
Arch linux |
|||
---------- |
|||
|
|||
Построен на базе systemd. |
|||
|
|||
Установить пакеты : |
|||
pacman -Syy |
|||
pacman --noconfirm -S ipset curl |
|||
|
|||
Далее все аналогично debian. |
|||
|
|||
Gentoo |
|||
------ |
|||
|
|||
Эта система использует OpenRC - улучшенную версию sysvinit. |
|||
Установка пакетов производится командой : emerge <package_name> |
|||
Пакеты собираются из исходников. |
|||
|
|||
Требуются все те же ipset, curl, git для скачивания с github. |
|||
git и curl по умолчанию могут присутствовать, ipset отсутствует. |
|||
|
|||
emerge ipset |
|||
|
|||
Настроить параметры согласно разделу "Выбор параметров". |
|||
|
|||
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики. |
|||
/opt/zapret/install_bin.sh |
|||
АЛЬТЕРНАТИВА : make -C /opt/zapret. Получите динамические бинарики под вашу ось. |
|||
|
|||
Удалить старые листы, если они были созданы ранее : |
|||
/opt/zapret/ipset/clear_lists.sh |
|||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены. |
|||
Выполнить скрипт обновления листа : |
|||
/opt/zapret/ipset/get_config.sh |
|||
Зашедулить обновление листа : |
|||
crontab -e |
|||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh" |
|||
|
|||
Подключить init скрипт : |
|||
|
|||
ln -fs /opt/zapret/init.d/openrc/zapret /etc/init.d |
|||
rc-update add zapret |
|||
|
|||
Запустить службу : |
|||
|
|||
rc-service zapret start |
|||
|
|||
Шпаргалка по управлению службой : |
|||
|
|||
enable auto start : rc-update add zapret |
|||
disable auto start : rc-update del zapret |
|||
start : rc-service zapret start |
|||
stop : rc-service zapret stop |
|||
|
|||
|
|||
|
|||
Ручная установка на openwrt/LEDE 15.xx-21.xx |
|||
-------------------------------------------- |
|||
|
|||
!!! Данная инструкция написана для систем, основанных на iptables+firewall3 |
|||
!!! В новых версиях openwrt переходит на nftables+firewall4, инструкция неприменима. Пользуйтесь install_easy.sh |
|||
|
|||
Установить дополнительные пакеты : |
|||
opkg update |
|||
opkg install iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ipset curl |
|||
(ipv6) opkg install ip6tables-mod-nat |
|||
(опционально) opkg install gzip |
|||
(опционально) opkg install coreutils-sort |
|||
|
|||
ЭКОНОМИЯ МЕСТА : |
|||
|
|||
gzip от busybox в разы медленней полноценного варианта. gzip используется скриптами получения листов. |
|||
sort от busybox медленней полноценного варианта и жрет намного больше памяти. sort используется скриптами получения листов. |
|||
iptables-mod-nfqueue можно выкинуть, если не будем пользоваться nfqws |
|||
curl можно выкинуть, если для получения ip листа будет использоваться только get_user.sh |
|||
|
|||
Самая главная трудность - скомпилировать программы на C. Это можно сделать на linux x64 при помощи SDK, который |
|||
можно скачать с официального сайта openwrt или LEDE. Но процесс кросс компиляции - это всегда сложности. |
|||
Недостаточно запустить make как на традиционной linux системе. |
|||
Поэтому в binaries имеются готовые статические бинарики для всех самых распространенных архитектур. |
|||
Статическая сборка означает, что бинарик не зависит от типа libc (glibc, uclibc или musl) и наличия установленных so. |
|||
Его можно использовать сразу. Лишь бы подходил тип CPU. У ARM и MIPS есть несколько версий. |
|||
Скорее всего найдется рабочий вариант. Если нет - вам придется собирать самостоятельно. |
|||
Для всех поддерживаемых архитектур бинарики запакованы upx. На текущий момент все, кроме mips64. |
|||
|
|||
Скопировать директорию "zapret" в /opt на роутер. |
|||
|
|||
Если места достаточно, самый простой способ : |
|||
opkg update |
|||
opkg install git-http |
|||
mkdir /opt |
|||
cd /opt |
|||
git clone --depth 1 https://github.com/bol-van/zapret |
|||
|
|||
Если места немного : |
|||
opkg update |
|||
opkg install openssh-sftp-server unzip |
|||
ifconfig br-lan |
|||
Скачать на комп с github zip архив кнопкой "Clone or download"->Download ZIP |
|||
Скопировать средствами sftp zip архив на роутер в /tmp. |
|||
mkdir /opt |
|||
cd /opt |
|||
unzip /tmp/zapret-master.zip |
|||
mv zapret-master zapret |
|||
rm /tmp/zapret-master.zip |
|||
|
|||
Если места совсем мало : |
|||
На linux системе скачать и распаковать zapret. Оставить необходимый минимум файлов. |
|||
Запаковать в архив zapret.tar.gz. |
|||
nc -l -p 1111 <zapret.tar.gz |
|||
На роутере |
|||
cd /tmp |
|||
nc <linux_system_ip> 1111 >zapret.tar.gz |
|||
|
|||
Не стоит работать с распакованной версией zapret на windows. Потеряются ссылки и chmod. |
|||
|
|||
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики. |
|||
/opt/zapret/install_bin.sh |
|||
|
|||
Создать ссылку на скрипт запуска : |
|||
ln -fs /opt/zapret/init.d/openwrt/zapret /etc/init.d |
|||
Создать ссылку на скрипт события поднятия интерфейса : |
|||
ln -fs /opt/zapret/init.d/openwrt/90-zapret /etc/hotplug.d/iface |
|||
|
|||
Настроить параметры согласно разделу "Выбор параметров". |
|||
|
|||
Удалить старые листы, если они были созданы ранее : |
|||
/opt/zapret/ipset/clear_lists.sh |
|||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены. |
|||
Выполнить скрипт обновления листа : |
|||
/opt/zapret/ipset/get_config.sh |
|||
Зашедулить обновление листа : |
|||
crontab -e |
|||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh" |
|||
|
|||
Включить автозапуск службы и запустить ее : |
|||
/etc/init.d/zapret enable |
|||
/etc/init.d/zapret start |
|||
ПРИМЕЧАНИЕ : на этапе старта системы интерфейсы еще не подняты. в некоторых случаях невозможно правильно |
|||
сформировать параметры запуска демонов, не зная имя физического интерфейса LAN. |
|||
Cкрипт из /etc/hotplug.d/iface перезапустит демоны по событию поднятия LAN. |
|||
|
|||
Создать ссылку на firewall include : |
|||
ln -fs /opt/zapret/init.d/openwrt/firewall.zapret /etc/firewall.zapret |
|||
Проверить была ли создана ранее запись о firewall include : |
|||
uci show firewall | grep firewall.zapret |
|||
Если firewall.zapret нет, значит добавить : |
|||
uci add firewall include |
|||
uci set firewall.@include[-1].path="/etc/firewall.zapret" |
|||
uci set firewall.@include[-1].reload="1" |
|||
uci commit firewall |
|||
Проверить не включен ли flow offload : |
|||
uci show firewall.@defaults[0] |
|||
Если flow_offloading=1 или flow_offloading_hw=1 , |
|||
uci set firewall.@defaults[0].flow_offloading=0 |
|||
uci set firewall.@defaults[0].flow_offloading_hw=0 |
|||
uci commit firewall |
|||
Перезапустить фаервол : |
|||
fw3 restart |
|||
|
|||
Посмотреть через iptables -nL, ip6tables -nL или через luci вкладку "firewall" появились ли нужные правила. |
|||
|
|||
ЭКОНОМИЯ МЕСТА : если его мало, то можно оставить в директории zapret лишь подкаталоги |
|||
ipset, common, файл config, init.d/openwrt. |
|||
Далее нужно создать подкаталоги с реально используемыми бинариками (ip2net, mdig, tpws, nfq) |
|||
и скопировать туда из binaries рабочие executables. |
|||
|
|||
ЕСЛИ ВСЕ ПЛОХО С МЕСТОМ : откажитесь от работы со списком РКН. используйте только get_user.sh |
|||
|
|||
ЕСЛИ СОВСЕМ ВСЕ УЖАСНО С МЕСТОМ : берете tpws и делаете все своими руками. поднятие iptables, автостарт бинарика. |
|||
С некоторых версий скрипты запуска zapret без ipset не работают (он требуется для ip exclude) |
|||
|
|||
СОВЕТ : Покупайте только роутеры с USB. В USB можно воткнуть флэшку и вынести на нее корневую файловую систему |
|||
или использовать ее в качестве оверлея. Не надо мучать себя, запихивая незапихиваемое в 8 мб встроенной флэшки. |
|||
Для комфортной работы с zapret нужен роутер с 16 Mb встроенной памяти или USB разъемом и 128+ Mb RAM. |
|||
На 64 Mb без swap будут проблемы с листами РКН. Если у вас только 64 Mb, и вы хотите листы РКН, подключите swap. |
|||
32 Mb для современных версий openwrt - конфигурация на грани живучести. Возможны хаотические падения процессов в oom. |
|||
Работа с листами РКН невозможна в принципе. |
|||
|
|||
|
@ -1,26 +1,26 @@ |
|||
nftables test cheat sheet |
|||
simplified rules to test nfqws and tpws |
|||
|
|||
|
|||
For DNAT : |
|||
|
|||
# run tpws as user "tpws". its required to avoid loops. |
|||
|
|||
nft delete table inet ztest |
|||
nft create table inet ztest |
|||
nft add chain inet ztest pre "{type nat hook prerouting priority dstnat;}" |
|||
nft add rule inet ztest pre tcp dport "{80,443}" redirect to :988 |
|||
nft add chain inet ztest out "{type nat hook output priority -100;}" |
|||
nft add rule inet ztest out tcp dport "{80,443}" skuid != tpws redirect to :988 |
|||
|
|||
|
|||
For dpi desync attack : |
|||
|
|||
nft delete table inet ztest |
|||
nft create table inet ztest |
|||
nft add chain inet ztest post "{type filter hook postrouting priority mangle;}" |
|||
nft add rule inet ztest post tcp dport "{80,443}" queue num 200 bypass |
|||
|
|||
|
|||
show rules : nft list table inet ztest |
|||
delete table : nft delete table inet ztest |
|||
nftables test cheat sheet |
|||
simplified rules to test nfqws and tpws |
|||
|
|||
|
|||
For DNAT : |
|||
|
|||
# run tpws as user "tpws". its required to avoid loops. |
|||
|
|||
nft delete table inet ztest |
|||
nft create table inet ztest |
|||
nft add chain inet ztest pre "{type nat hook prerouting priority dstnat;}" |
|||
nft add rule inet ztest pre tcp dport "{80,443}" redirect to :988 |
|||
nft add chain inet ztest out "{type nat hook output priority -100;}" |
|||
nft add rule inet ztest out tcp dport "{80,443}" skuid != tpws redirect to :988 |
|||
|
|||
|
|||
For dpi desync attack : |
|||
|
|||
nft delete table inet ztest |
|||
nft create table inet ztest |
|||
nft add chain inet ztest post "{type filter hook postrouting priority mangle;}" |
|||
nft add rule inet ztest post tcp dport "{80,443}" queue num 200 bypass |
|||
|
|||
|
|||
show rules : nft list table inet ztest |
|||
delete table : nft delete table inet ztest |
|||
|
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -1,7 +1,8 @@ |
|||
#pragma once |
|||
|
|||
#include <stdbool.h> |
|||
#include <stdint.h> |
|||
#include <sys/types.h> |
|||
|
|||
bool find_host(char **pHost,char *buf,size_t bs); |
|||
void modify_tcp_segment(char *segment,size_t segment_buffer_size,size_t *size,size_t *split_pos); |
|||
bool find_host(uint8_t **pHost,uint8_t *buf,size_t bs); |
|||
void modify_tcp_segment(uint8_t *segment,size_t segment_buffer_size,size_t *size,size_t *split_pos); |
|||
|
Loading…
Reference in new issue