mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-19 05:22:58 +03:00
init system rewrite
This commit is contained in:
parent
66be97a613
commit
15460d87a0
10
changes.txt
10
changes.txt
@ -101,4 +101,14 @@ 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
|
||||
|
242
init.d/debian/zapret
Executable file
242
init.d/debian/zapret
Executable file
@ -0,0 +1,242 @@
|
||||
#!/bin/sh
|
||||
# For systemd :
|
||||
# install : /usr/lib/lsb/install_initd zapret
|
||||
# remove : /usr/lib/lsb/remove_initd zapret
|
||||
### BEGIN INIT INFO
|
||||
# Provides: zapret
|
||||
# Required-Start: $local_fs $network
|
||||
# Required-Stop: $local_fs $network
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
### END INIT INFO
|
||||
|
||||
|
||||
# +++ REVIEW CONFIG HERE +++
|
||||
|
||||
# CHOOSE OPERATION MODE
|
||||
# leave only one MODE= uncommented
|
||||
|
||||
# using nfqws with ipset
|
||||
#MODE=nfqws_ipset
|
||||
# using nfqws for all
|
||||
#MODE=nfqws_all
|
||||
# CHOOSE NFQWS DAEMON OPTIONS. run "nfq/nfqws --help" for option list
|
||||
NFQWS_OPT="--wsize=3 --hostspell=HOST"
|
||||
|
||||
# using tpws with ipset
|
||||
MODE=tpws_ipset
|
||||
# using tpws for all
|
||||
#MODE=tpws_all
|
||||
# using tpws with hostlist
|
||||
#MODE=tpws_hostlist
|
||||
# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
|
||||
TPWS_OPT="--hostspell=HOST --split-http-req=method"
|
||||
|
||||
# only fill ipset, do not run daemons
|
||||
#MODE=ipset
|
||||
|
||||
# Custom mode
|
||||
# Find out what works for you and modify "# PLACEHOLDER" parts of this script
|
||||
#MODE=custom
|
||||
|
||||
# CHOSE NETWORK INTERFACE BEHIND NAT (LAN)
|
||||
SLAVE_ETH=eth0
|
||||
|
||||
# --- REVIEW CONFIG HERE ---
|
||||
|
||||
|
||||
|
||||
NAME=zapret
|
||||
DESC=anti-zapret
|
||||
PIDDIR=/var/run
|
||||
|
||||
ZAPRET_BASE=/opt/zapret
|
||||
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
|
||||
|
||||
QNUM=200
|
||||
NFQWS=$ZAPRET_BASE/nfq/nfqws
|
||||
NFQWS_OPT_BASE="--qnum=$QNUM"
|
||||
|
||||
TPPORT=1188
|
||||
TPWS=$ZAPRET_BASE/tpws/tpws
|
||||
TPWS_USER=tpws
|
||||
TPWS_HOSTLIST=$ZAPRET_BASE/ipset/zapret-hosts.txt
|
||||
TPWS_OPT_BASE="--port=$TPPORT --user=$TPWS_USER --bind-addr=127.0.0.1"
|
||||
|
||||
# exit script on any error
|
||||
set -e
|
||||
|
||||
prepare_tpws()
|
||||
{
|
||||
# $TPWS_USER is required to prevent redirection of the traffic originating from TPWS itself
|
||||
# otherwise infinite loop will occur
|
||||
# also its good idea not to run tpws as root
|
||||
adduser --disabled-login --no-create-home --system --quiet $TPWS_USER
|
||||
# otherwise linux kernel will treat 127.0.0.1 as "martian" ip and refuse routing to it
|
||||
# NOTE : kernels <3.6 do not have this feature. consider upgrading or change DNAT to REDIRECT and do not bind to 127.0.0.1
|
||||
sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=1
|
||||
}
|
||||
|
||||
fw_tpws_add()
|
||||
{
|
||||
# $1 - iptable filter
|
||||
prepare_tpws
|
||||
echo "Adding iptables rule for tpws : $1"
|
||||
iptables -t nat -C PREROUTING -i $SLAVE_ETH -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I PREROUTING -i $SLAVE_ETH -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -C OUTPUT -m owner ! --uid-owner $TPWS_USER -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I OUTPUT -m owner ! --uid-owner $TPWS_USER -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT
|
||||
}
|
||||
fw_tpws_del()
|
||||
{
|
||||
# $1 - iptable filter
|
||||
echo "Deleting iptables rule for tpws : $1"
|
||||
iptables -t nat -C PREROUTING -i $SLAVE_ETH -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null &&
|
||||
iptables -t nat -D PREROUTING -i $SLAVE_ETH -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -C OUTPUT -m owner ! --uid-owner $TPWS_USER -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null &&
|
||||
iptables -t nat -D OUTPUT -m owner ! --uid-owner $TPWS_USER -p tcp $1 -j DNAT --to 127.0.0.1:$TPPORT
|
||||
true
|
||||
}
|
||||
fw_nfqws_add_pre()
|
||||
{
|
||||
# $1 - iptable filter
|
||||
echo "Adding iptables rule for nfqws prerouting : $1"
|
||||
iptables -t raw -C PREROUTING -p tcp --tcp-flags SYN,ACK SYN,ACK $1 -j NFQUEUE --queue-num $QNUM --queue-bypass 2>/dev/null ||
|
||||
iptables -t raw -I PREROUTING -p tcp --tcp-flags SYN,ACK SYN,ACK $1 -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
}
|
||||
fw_nfqws_del_pre()
|
||||
{
|
||||
# $1 - iptable filter
|
||||
echo "Deleting iptables rule for nfqws prerouting : $1"
|
||||
iptables -t raw -C PREROUTING -p tcp --tcp-flags SYN,ACK SYN,ACK $1 -j NFQUEUE --queue-num $QNUM --queue-bypass 2>/dev/null &&
|
||||
iptables -t raw -D PREROUTING -p tcp --tcp-flags SYN,ACK SYN,ACK $1 -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
true
|
||||
}
|
||||
fw_nfqws_add_post()
|
||||
{
|
||||
# $1 - iptable filter
|
||||
echo "Adding iptables rule for nfqws postrouting : $1"
|
||||
iptables -t mangle -C POSTROUTING -p tcp $1 -j NFQUEUE --queue-num $QNUM --queue-bypass 2>/dev/null ||
|
||||
iptables -t mangle -I POSTROUTING -p tcp $1 -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
}
|
||||
fw_nfqws_del_post()
|
||||
{
|
||||
# $1 - iptable filter
|
||||
echo "Deleting iptables rule for nfqws postrouting : $1"
|
||||
iptables -t mangle -C POSTROUTING -p tcp $1 -j NFQUEUE --queue-num $QNUM --queue-bypass 2>/dev/null &&
|
||||
iptables -t mangle -D POSTROUTING -p tcp $1 -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
true
|
||||
}
|
||||
|
||||
run_daemon()
|
||||
{
|
||||
# $1 - daemon string id or number. can use 1,2,3,...
|
||||
# $2 - daemon
|
||||
# $3 - daemon args
|
||||
# use $PIDDIR/$DAEMONBASE$1.pid as pidfile
|
||||
local DAEMONBASE=$(basename $2)
|
||||
echo "Starting daemon $1: $2 $3"
|
||||
start-stop-daemon --start --quiet --pidfile $PIDDIR/$DAEMONBASE$1.pid --background --make-pidfile \
|
||||
--exec $2 -- $3
|
||||
}
|
||||
stop_daemon()
|
||||
{
|
||||
# $1 - daemon string id or number. can use 1,2,3,...
|
||||
# $2 - daemon
|
||||
# use $PIDDIR/$DAEMONBASE$1.pid as pidfile
|
||||
local DAEMONBASE=$(basename $2)
|
||||
echo "Stopping daemon $1: $2"
|
||||
start-stop-daemon --oknodo --stop --quiet --pidfile $PIDDIR/$DAEMONBASE$1.pid \
|
||||
--exec $2
|
||||
}
|
||||
|
||||
|
||||
create_ipset()
|
||||
{
|
||||
echo "Creating ipset"
|
||||
($IPSET_CR)
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
case "${MODE}" in
|
||||
tpws_hostlist)
|
||||
fw_tpws_add "--dport 80"
|
||||
run_daemon 1 $TPWS "$TPWS_OPT_BASE $TPWS_OPT --hostlist=$TPWS_HOSTLIST"
|
||||
;;
|
||||
tpws_ipset)
|
||||
create_ipset
|
||||
fw_tpws_add "--dport 80 -m set --match-set zapret dst"
|
||||
run_daemon 1 $TPWS "$TPWS_OPT_BASE $TPWS_OPT"
|
||||
;;
|
||||
tpws_all)
|
||||
fw_tpws_add "--dport 80"
|
||||
run_daemon 1 $TPWS "$TPWS_OPT_BASE $TPWS_OPT"
|
||||
;;
|
||||
nfqws_ipset)
|
||||
create_ipset
|
||||
fw_nfqws_add_pre "--sport 80 -m set --match-set zapret src"
|
||||
fw_nfqws_add_post "--dport 80 -m set --match-set zapret dst"
|
||||
run_daemon 1 $NFQWS "$NFQWS_OPT_BASE $NFQWS_OPT"
|
||||
;;
|
||||
nfqws_all)
|
||||
fw_nfqws_add_pre "--sport 80"
|
||||
fw_nfqws_add_post "--dport 80"
|
||||
run_daemon 1 $NFQWS "$NFQWS_OPT_BASE $NFQWS_OPT"
|
||||
;;
|
||||
ipset)
|
||||
create_ipset
|
||||
;;
|
||||
custom)
|
||||
# PLACEHOLDER
|
||||
echo !!! NEED ATTENTION !!!
|
||||
echo Configure iptables for required actions
|
||||
echo Start daemon\(s\)
|
||||
echo Study how other sections work
|
||||
run_daemon 1 /bin/sleep 20
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
stop)
|
||||
case "${MODE}" in
|
||||
tpws_hostlist)
|
||||
fw_tpws_del "--dport 80"
|
||||
stop_daemon 1 $TPWS
|
||||
;;
|
||||
tpws_ipset)
|
||||
fw_tpws_del "--dport 80 -m set --match-set zapret dst"
|
||||
stop_daemon 1 $TPWS
|
||||
;;
|
||||
tpws_all)
|
||||
fw_tpws_del "--dport 80"
|
||||
stop_daemon 1 $TPWS
|
||||
;;
|
||||
nfqws_ipset)
|
||||
fw_nfqws_del_pre "--sport 80 -m set --match-set zapret src"
|
||||
fw_nfqws_del_post "--dport 80 -m set --match-set zapret dst"
|
||||
stop_daemon 1 $NFQWS
|
||||
;;
|
||||
nfqws_all)
|
||||
fw_nfqws_del_pre "--sport 80"
|
||||
fw_nfqws_del_post "--dport 80"
|
||||
stop_daemon 1 $NFQWS
|
||||
;;
|
||||
custom)
|
||||
# PLACEHOLDER
|
||||
echo !!! NEED ATTENTION !!!
|
||||
echo Clear firewall rules here. Remove iptables changes made previously.
|
||||
echo Stop daemon\(s\) previously started.
|
||||
echo Study how other sections work.
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
*)
|
||||
N=/etc/init.d/$NAME
|
||||
echo "Usage: $N {start|stop}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@ -1,192 +0,0 @@
|
||||
#!/bin/sh
|
||||
# For systemd :
|
||||
# install : /usr/lib/lsb/install_initd zapret
|
||||
# remove : /usr/lib/lsb/remove_initd zapret
|
||||
### BEGIN INIT INFO
|
||||
# Provides: zapret
|
||||
# Required-Start: $local_fs $network
|
||||
# Required-Stop: $local_fs $network
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
### END INIT INFO
|
||||
|
||||
# CHOOSE ISP HERE. UNCOMMENT ONLY ONE LINE.
|
||||
ISP=mns
|
||||
#ISP=rt
|
||||
#ISP=beeline
|
||||
#ISP=domru
|
||||
#ISP=tiera
|
||||
#ISP=athome
|
||||
|
||||
# Its possible not to use ipset. Use hostlist with tpws instead.
|
||||
#ISP=hostlist
|
||||
|
||||
# If ISP is unlisted then uncomment "custom"
|
||||
# Find out what works for your ISP and modify "# PLACEHOLDER" parts of this script
|
||||
#ISP=custom
|
||||
|
||||
# CHOSE NETWORK INTERFACE BEHIND NAT
|
||||
SLAVE_ETH=eth0
|
||||
|
||||
|
||||
ZAPRET_BASE=/opt/zapret
|
||||
|
||||
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
|
||||
NAME=zapret
|
||||
DESC=anti-zapret
|
||||
|
||||
QNUM=200
|
||||
TPPORT=1188
|
||||
ROUTE_TABLE_NUM=100
|
||||
NFQWS=$ZAPRET_BASE/nfq/nfqws
|
||||
TPWS=$ZAPRET_BASE/tpws/tpws
|
||||
TPWS_USER=tpws
|
||||
TPWS_HOSTLIST=$ZAPRET_BASE/ipset/zapret-hosts.txt
|
||||
|
||||
PIDFILE=/var/run/$NAME.pid
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
prepare_tpws()
|
||||
{
|
||||
adduser --disabled-login --no-create-home --system --quiet $TPWS_USER
|
||||
sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=1
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo "Creating ipset"
|
||||
($IPSET_CR)
|
||||
|
||||
echo "Adding iptables rule"
|
||||
case "${ISP}" in
|
||||
hostlist)
|
||||
prepare_tpws
|
||||
iptables -t nat -C PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -j DNAT --to 127.0.0.1:$TPPORT
|
||||
DAEMON=$TPWS
|
||||
DAEMON_OPTS="--port=$TPPORT --hostlist=$TPWS_HOSTLIST --hostcase --split-http-req=method --user=$TPWS_USER --bind-addr=127.0.0.1"
|
||||
;;
|
||||
mns)
|
||||
iptables -t raw -C PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num $QNUM --queue-bypass 2>/dev/null ||
|
||||
iptables -t raw -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
DAEMON=$NFQWS
|
||||
DAEMON_OPTS="--qnum=$QNUM --wsize=3"
|
||||
;;
|
||||
rt)
|
||||
iptables -t raw -C PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num $QNUM --queue-bypass 2>/dev/null ||
|
||||
iptables -t raw -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
DAEMON=$NFQWS
|
||||
DAEMON_OPTS="--qnum=$QNUM --wsize=20"
|
||||
;;
|
||||
beeline)
|
||||
iptables -t mangle -C POSTROUTING -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num $QNUM --queue-bypass 2>/dev/null ||
|
||||
iptables -t mangle -I POSTROUTING -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
DAEMON=$NFQWS
|
||||
DAEMON_OPTS="--qnum=$QNUM --hostspell=HOST"
|
||||
;;
|
||||
domru)
|
||||
prepare_tpws
|
||||
iptables -t nat -C PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
# BLOCK SPOOFED DNS FROM DOMRU
|
||||
iptables -t raw -C PREROUTING -p udp --sport 53 -m string --hex-string "|05030311|" --algo bm -j DROP --from 40 --to 300 ||
|
||||
iptables -t raw -I PREROUTING -p udp --sport 53 -m string --hex-string "|05030311|" --algo bm -j DROP --from 40 --to 300
|
||||
iptables -t raw -C PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00200010000000000030017|" --algo bm -j DROP --from 40 --to 300 ||
|
||||
iptables -t raw -I PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00200010000000000030017|" --algo bm -j DROP --from 40 --to 300
|
||||
DAEMON=$TPWS
|
||||
DAEMON_OPTS="--port=$TPPORT --hostcase --split-http-req=host --user=$TPWS_USER --bind-addr=127.0.0.1"
|
||||
;;
|
||||
tiera)
|
||||
prepare_tpws
|
||||
iptables -t nat -C PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
DAEMON=$TPWS
|
||||
DAEMON_OPTS="--port=$TPPORT --split-http-req=host --user=$TPWS_USER --bind-addr=127.0.0.1"
|
||||
;;
|
||||
athome)
|
||||
prepare_tpws
|
||||
iptables -t nat -C PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT 2>/dev/null ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
DAEMON=$TPWS
|
||||
DAEMON_OPTS="--port=$TPPORT --split-http-req=method --user=$TPWS_USER --bind-addr=127.0.0.1"
|
||||
;;
|
||||
custom)
|
||||
# PLACEHOLDER
|
||||
echo !!! NEED ATTENTION !!!
|
||||
echo Select daemon and options that work for you
|
||||
echo \(optional\) Prepare environment for running daemon
|
||||
echo Configure iptables for required actions
|
||||
echo Study how other sections work
|
||||
DAEMON=/bin/sleep
|
||||
DAEMON_OPTS=20
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -n "Starting $DESC: "
|
||||
start-stop-daemon --start --quiet --pidfile $PIDFILE --background --make-pidfile \
|
||||
--exec $DAEMON -- $DAEMON_OPTS
|
||||
echo "$NAME."
|
||||
;;
|
||||
stop)
|
||||
echo "Deleting iptables rule"
|
||||
|
||||
case "${ISP}" in
|
||||
hostlist)
|
||||
iptables -t nat -D PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -D OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -j DNAT --to 127.0.0.1:$TPPORT
|
||||
DAEMON=$TPWS
|
||||
;;
|
||||
mns|rt)
|
||||
iptables -t raw -D PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
DAEMON=$NFQWS
|
||||
;;
|
||||
beeline)
|
||||
iptables -t mangle -D POSTROUTING -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
DAEMON=$NFQWS
|
||||
;;
|
||||
domru)
|
||||
sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=0
|
||||
iptables -t nat -D PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -D OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t raw -D PREROUTING -p udp --sport 53 -m string --hex-string "|05030311|" --algo bm -j DROP --from 40 --to 300
|
||||
iptables -t raw -D PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00200010000000000030017|" --algo bm -j DROP --from 40 --to 300
|
||||
DAEMON=$TPWS
|
||||
;;
|
||||
tiera|athome)
|
||||
sysctl -w net.ipv4.conf.$SLAVE_ETH.route_localnet=0
|
||||
iptables -t nat -D PREROUTING -p tcp --dport 80 -i $SLAVE_ETH -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
iptables -t nat -D OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
DAEMON=$TPWS
|
||||
;;
|
||||
custom)
|
||||
# PLACEHOLDER
|
||||
echo !!! NEED ATTENTION !!!
|
||||
echo Clear firewall rules here. Remove iptables changes made previously.
|
||||
echo Select which daemon to stop.
|
||||
echo Study how other sections work
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -n "Stopping $DESC: "
|
||||
start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
|
||||
--exec $DAEMON
|
||||
echo "$NAME."
|
||||
;;
|
||||
*)
|
||||
N=/etc/init.d/$NAME
|
||||
echo "Usage: $N {start|stop}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@ -1,19 +0,0 @@
|
||||
TPPORT=1188
|
||||
TPWS_USER=daemon
|
||||
|
||||
. /lib/functions/network.sh
|
||||
|
||||
network_find_wan wan_iface
|
||||
|
||||
for ext_iface in $wan_iface; do
|
||||
network_get_device DEVICE $ext_iface
|
||||
# DNAT for local traffic
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
|
||||
done
|
||||
|
||||
network_get_device DEVICE lan
|
||||
sysctl -w net.ipv4.conf.$DEVICE.route_localnet=1
|
||||
iptables -t nat -C prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
@ -1,5 +0,0 @@
|
||||
# put it to /etc/firewall.user
|
||||
|
||||
# for BEELINE ISP
|
||||
iptables -t mangle -C 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 -j NFQUEUE --queue-num 200 --queue-bypass
|
@ -1,3 +0,0 @@
|
||||
# put it to /etc/firewall.user
|
||||
|
||||
# study how other firewall.user scripts work and put here rules that work for you
|
@ -1,24 +0,0 @@
|
||||
TPPORT=1188
|
||||
TPWS_USER=daemon
|
||||
|
||||
. /lib/functions/network.sh
|
||||
|
||||
network_find_wan wan_iface
|
||||
|
||||
for ext_iface in $wan_iface; do
|
||||
network_get_device DEVICE $ext_iface
|
||||
# BLOCK SPOOFED DNS FROM DOMRU
|
||||
iptables -t raw -C PREROUTING -i $DEVICE -p udp --sport 53 -m string --hex-string "|05030311|" --algo bm -j DROP --from 40 --to 300 ||
|
||||
iptables -t raw -I PREROUTING -i $DEVICE -p udp --sport 53 -m string --hex-string "|05030311|" --algo bm -j DROP --from 40 --to 300
|
||||
iptables -t raw -C PREROUTING -i $DEVICE -p udp --sport 53 -m string --hex-string "|2a022698a00200010000000000030017|" --algo bm -j DROP --from 40 --to 300 ||
|
||||
iptables -t raw -I PREROUTING -i $DEVICE -p udp --sport 53 -m string --hex-string "|2a022698a00200010000000000030017|" --algo bm -j DROP --from 40 --to 300
|
||||
# DNAT for local traffic
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
|
||||
done
|
||||
|
||||
network_get_device DEVICE lan
|
||||
sysctl -w net.ipv4.conf.$DEVICE.route_localnet=1
|
||||
iptables -t nat -C prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
@ -1,20 +0,0 @@
|
||||
TPPORT=1188
|
||||
TPWS_USER=daemon
|
||||
|
||||
. /lib/functions/network.sh
|
||||
|
||||
network_find_wan wan_iface
|
||||
|
||||
for ext_iface in $wan_iface; do
|
||||
network_get_device DEVICE $ext_iface
|
||||
# DNAT for local traffic
|
||||
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -j DNAT --to 127.0.0.1:$TPPORT
|
||||
|
||||
done
|
||||
|
||||
network_get_device DEVICE lan
|
||||
sysctl -w net.ipv4.conf.$DEVICE.route_localnet=1
|
||||
iptables -t nat -C prerouting_lan_rule -p tcp --dport 80 -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I prerouting_lan_rule -p tcp --dport 80 -j DNAT --to 127.0.0.1:$TPPORT
|
@ -1,2 +0,0 @@
|
||||
iptables -t raw -C PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass ||
|
||||
iptables -t raw -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
|
9
init.d/openwrt/firewall.user.nfqws_all
Normal file
9
init.d/openwrt/firewall.user.nfqws_all
Normal file
@ -0,0 +1,9 @@
|
||||
QNUM=200
|
||||
IPT_FILTER_PRE="-p tcp --sport 80"
|
||||
IPT_FILTER_POST="-p tcp --dport 80"
|
||||
|
||||
iptables -t raw -C PREROUTING $IPT_FILTER_PRE -j NFQUEUE --queue-num $QNUM --queue-bypass ||
|
||||
iptables -t raw -I PREROUTING $IPT_FILTER_PRE -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
|
||||
iptables -t mangle -C POSTROUTING $IPT_FILTER_POST -j NFQUEUE --queue-num $QNUM --queue-bypass ||
|
||||
iptables -t mangle -I POSTROUTING $IPT_FILTER_POST -j NFQUEUE --queue-num $QNUM --queue-bypass
|
9
init.d/openwrt/firewall.user.nfqws_ipset
Normal file
9
init.d/openwrt/firewall.user.nfqws_ipset
Normal file
@ -0,0 +1,9 @@
|
||||
QNUM=200
|
||||
IPT_FILTER_PRE="-p tcp --sport 80 -m set --match-set zapret src"
|
||||
IPT_FILTER_POST="-p tcp --dport 80 -m set --match-set zapret dst"
|
||||
|
||||
iptables -t raw -C PREROUTING $IPT_FILTER_PRE -j NFQUEUE --queue-num $QNUM --queue-bypass ||
|
||||
iptables -t raw -I PREROUTING $IPT_FILTER_PRE -j NFQUEUE --queue-num $QNUM --queue-bypass
|
||||
|
||||
iptables -t mangle -C POSTROUTING $IPT_FILTER_POST -j NFQUEUE --queue-num $QNUM --queue-bypass ||
|
||||
iptables -t mangle -I POSTROUTING $IPT_FILTER_POST -j NFQUEUE --queue-num $QNUM --queue-bypass
|
@ -1,2 +0,0 @@
|
||||
iptables -t raw -C PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass ||
|
||||
iptables -t raw -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
|
@ -1,19 +0,0 @@
|
||||
TPPORT=1188
|
||||
TPWS_USER=daemon
|
||||
|
||||
. /lib/functions/network.sh
|
||||
|
||||
network_find_wan wan_iface
|
||||
|
||||
for ext_iface in $wan_iface; do
|
||||
network_get_device DEVICE $ext_iface
|
||||
# DNAT for local traffic
|
||||
iptables -t nat -C OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 80 -o $DEVICE -m owner ! --uid-owner $TPWS_USER -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
||||
|
||||
done
|
||||
|
||||
network_get_device DEVICE lan
|
||||
sysctl -w net.ipv4.conf.$DEVICE.route_localnet=1
|
||||
iptables -t nat -C prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I prerouting_lan_rule -p tcp --dport 80 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:$TPPORT
|
21
init.d/openwrt/firewall.user.tpws_all
Normal file
21
init.d/openwrt/firewall.user.tpws_all
Normal file
@ -0,0 +1,21 @@
|
||||
TPPORT=1188
|
||||
TPWS_USER=daemon
|
||||
IPT_FILTER="-p tcp --dport 80"
|
||||
|
||||
. /lib/functions/network.sh
|
||||
|
||||
network_find_wan wan_iface
|
||||
|
||||
for ext_iface in $wan_iface; do
|
||||
network_get_device DEVICE $ext_iface
|
||||
# DNAT for local traffic
|
||||
|
||||
iptables -t nat -C OUTPUT -o $DEVICE -m owner ! --uid-owner $TPWS_USER $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I OUTPUT -o $DEVICE -m owner ! --uid-owner $TPWS_USER $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT
|
||||
|
||||
done
|
||||
|
||||
network_get_device DEVICE lan
|
||||
sysctl -w net.ipv4.conf.$DEVICE.route_localnet=1
|
||||
iptables -t nat -C prerouting_lan_rule $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I prerouting_lan_rule $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT
|
1
init.d/openwrt/firewall.user.tpws_hostlist
Symbolic link
1
init.d/openwrt/firewall.user.tpws_hostlist
Symbolic link
@ -0,0 +1 @@
|
||||
firewall.user.tpws_all
|
21
init.d/openwrt/firewall.user.tpws_ipset
Normal file
21
init.d/openwrt/firewall.user.tpws_ipset
Normal file
@ -0,0 +1,21 @@
|
||||
TPPORT=1188
|
||||
TPWS_USER=daemon
|
||||
IPT_FILTER="-p tcp --dport 80 -m set --match-set zapret dst"
|
||||
|
||||
. /lib/functions/network.sh
|
||||
|
||||
network_find_wan wan_iface
|
||||
|
||||
for ext_iface in $wan_iface; do
|
||||
network_get_device DEVICE $ext_iface
|
||||
# DNAT for local traffic
|
||||
|
||||
iptables -t nat -C OUTPUT -o $DEVICE -m owner ! --uid-owner $TPWS_USER $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I OUTPUT -o $DEVICE -m owner ! --uid-owner $TPWS_USER $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT
|
||||
|
||||
done
|
||||
|
||||
network_get_device DEVICE lan
|
||||
sysctl -w net.ipv4.conf.$DEVICE.route_localnet=1
|
||||
iptables -t nat -C prerouting_lan_rule $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT ||
|
||||
iptables -t nat -I prerouting_lan_rule $IPT_FILTER -j DNAT --to 127.0.0.1:$TPPORT
|
@ -1,38 +1,57 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
|
||||
# CHOOSE ISP HERE. UNCOMMENT ONLY ONE LINE.
|
||||
ISP=mns
|
||||
#ISP=rt
|
||||
#ISP=beeline
|
||||
#ISP=domru
|
||||
#ISP=tiera
|
||||
#ISP=athome
|
||||
|
||||
# Its possible not to use ipset. Use hostlist with tpws instead.
|
||||
#ISP=hostlist
|
||||
|
||||
# If ISP is unlisted then uncomment "custom"
|
||||
# Find out what works for your ISP and modify "# PLACEHOLDER" parts of this script
|
||||
#ISP=custom
|
||||
|
||||
USE_PROCD=1
|
||||
# start betfore firewall - we need ipset populated
|
||||
START=18
|
||||
|
||||
|
||||
# +++ REVIEW CONFIG HERE +++
|
||||
|
||||
# CHOOSE OPERATION MODE
|
||||
# leave only one MODE= uncommented
|
||||
|
||||
# using nfqws with ipset
|
||||
#MODE=nfqws_ipset
|
||||
# using nfqws for all
|
||||
#MODE=nfqws_all
|
||||
# CHOOSE NFQWS DAEMON OPTIONS. run "nfq/nfqws --help" for option list
|
||||
NFQWS_OPT="--wsize=3 --hostspell=HOST"
|
||||
|
||||
# using tpws with ipset
|
||||
MODE=tpws_ipset
|
||||
# using tpws for all
|
||||
#MODE=tpws_all
|
||||
# using tpws with hostlist
|
||||
#MODE=tpws_hostlist
|
||||
# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
|
||||
TPWS_OPT="--hostspell=HOST --split-http-req=method"
|
||||
|
||||
# only fill ipset, do not run daemons
|
||||
#MODE=ipset
|
||||
|
||||
# Custom mode
|
||||
# Find out what works for you and modify "# PLACEHOLDER" parts of this script
|
||||
#MODE=custom
|
||||
|
||||
# --- REVIEW CONFIG HERE ---
|
||||
|
||||
# !!!!! in openwrt you need to add firewall rules manually to /etc/firewall.user
|
||||
|
||||
|
||||
PIDDIR=/var/run
|
||||
ZAPRET_BASE=/opt/zapret
|
||||
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
|
||||
|
||||
QNUM=200
|
||||
TPPORT=1188
|
||||
ROUTE_TABLE_NUM=100
|
||||
NFQWS=$ZAPRET_BASE/nfq/nfqws
|
||||
NFQWS_OPT_BASE="--qnum=$QNUM"
|
||||
|
||||
TPPORT=1188
|
||||
TPWS=$ZAPRET_BASE/tpws/tpws
|
||||
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
|
||||
TPWS_USER=daemon
|
||||
TPWS_HOSTLIST=$ZAPRET_BASE/ipset/zapret-hosts.txt
|
||||
TPWS_OPT_BASE="--port=$TPPORT --user=$TPWS_USER --bind-addr=127.0.0.1"
|
||||
|
||||
|
||||
# must execute /etc/firewall.user on every firewall reload
|
||||
@ -54,57 +73,56 @@ set_firewall_user_reload() {
|
||||
done
|
||||
}
|
||||
|
||||
get_daemon() {
|
||||
case "${ISP}" in
|
||||
hostlist)
|
||||
DAEMON_OPTS="--port=$TPPORT --hostcase --split-http-req=method --hostlist=$TPWS_HOSTLIST --bind-addr=127.0.0.1 --user=$TPWS_USER"
|
||||
DAEMON=$TPWS
|
||||
;;
|
||||
mns)
|
||||
DAEMON_OPTS="--qnum=$QNUM --wsize=3"
|
||||
DAEMON=$NFQWS
|
||||
;;
|
||||
rt)
|
||||
DAEMON_OPTS="--qnum=$QNUM --wsize=20"
|
||||
DAEMON=$NFQWS
|
||||
;;
|
||||
beeline)
|
||||
DAEMON_OPTS="--qnum=$QNUM --hostspell=HOST"
|
||||
DAEMON=$NFQWS
|
||||
;;
|
||||
domru)
|
||||
DAEMON_OPTS="--port=$TPPORT --hostcase --split-http-req=host --bind-addr=127.0.0.1 --user=$TPWS_USER"
|
||||
DAEMON=$TPWS
|
||||
;;
|
||||
tiera)
|
||||
DAEMON_OPTS="--port=$TPPORT --split-http-req=host --bind-addr=127.0.0.1 --user=$TPWS_USER"
|
||||
DAEMON=$TPWS
|
||||
;;
|
||||
athome)
|
||||
DAEMON_OPTS="--port=$TPPORT --split-http-req=method --bind-addr=127.0.0.1 --user=$TPWS_USER"
|
||||
DAEMON=$TPWS
|
||||
;;
|
||||
custom)
|
||||
# PLACEHOLDER
|
||||
echo !!! NEED ATTENTION !!!
|
||||
echo Select which daemon and what options work for you
|
||||
DAEMON_OPTS=20
|
||||
DAEMON=/bin/sleep
|
||||
;;
|
||||
esac
|
||||
run_daemon()
|
||||
{
|
||||
# $1 - daemon string id or number. can use 1,2,3,...
|
||||
# $2 - daemon
|
||||
# $3 - daemon args
|
||||
# use $PIDDIR/$DAEMONBASE$1.pid as pidfile
|
||||
local DAEMONBASE=$(basename $2)
|
||||
echo "Starting daemon $1: $2 $3"
|
||||
procd_open_instance
|
||||
procd_set_param command $2 $3
|
||||
procd_set_param pidfile $PIDDIR/$DAEMONBASE$1.pid
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
create_ipset()
|
||||
{
|
||||
echo "Creating ipset"
|
||||
($IPSET_CR)
|
||||
}
|
||||
|
||||
|
||||
start_service() {
|
||||
set_firewall_user_reload
|
||||
echo "Creating ipset"
|
||||
($IPSET_CR)
|
||||
|
||||
get_daemon
|
||||
[ -n "$DAEMON" ] && {
|
||||
echo "Starting $DAEMON"
|
||||
procd_open_instance
|
||||
procd_set_param command $DAEMON $DAEMON_OPTS
|
||||
procd_close_instance
|
||||
}
|
||||
case "${MODE}" in
|
||||
tpws_hostlist)
|
||||
run_daemon 1 $TPWS "$TPWS_OPT_BASE $TPWS_OPT --hostlist=$TPWS_HOSTLIST"
|
||||
;;
|
||||
tpws_ipset)
|
||||
create_ipset
|
||||
run_daemon 1 $TPWS "$TPWS_OPT_BASE $TPWS_OPT"
|
||||
;;
|
||||
tpws_all)
|
||||
run_daemon 1 $TPWS "$TPWS_OPT_BASE $TPWS_OPT"
|
||||
;;
|
||||
nfqws_ipset)
|
||||
create_ipset
|
||||
run_daemon 1 $NFQWS "$NFQWS_OPT_BASE $NFQWS_OPT"
|
||||
;;
|
||||
nfqws_all)
|
||||
run_daemon 1 $NFQWS "$NFQWS_OPT_BASE $NFQWS_OPT"
|
||||
;;
|
||||
ipset)
|
||||
create_ipset
|
||||
;;
|
||||
custom)
|
||||
# PLACEHOLDER
|
||||
echo !!! NEED ATTENTION !!!
|
||||
echo Start daemon\(s\)
|
||||
echo Study how other sections work
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
98
readme.txt
98
readme.txt
@ -1,4 +1,4 @@
|
||||
zapret v.21
|
||||
zapret v.22
|
||||
|
||||
Для чего это надо
|
||||
-----------------
|
||||
@ -129,56 +129,6 @@ tpws - это transparent proxy.
|
||||
Параметры манипуляции могут сочетаться в любых комбинациях.
|
||||
Есть исключения : split-pos заменяет split-http-req. hostdot и hosttab взаимоисключающи.
|
||||
|
||||
Провайдеры
|
||||
----------
|
||||
|
||||
Поскольку ситуация с блокировками на отдельных провайдерах может меняться, информация может устаревать. Она дана больше для примера, чем как прямое руководство.
|
||||
Автор не занимается мониторингом и оперативным обновлением этой информации.
|
||||
|
||||
mns.ru : нужна замена window size на 3. mns.ru убирает заблокированные домены из выдачи своих DNS серверов. меняем на сторонние. аплинк westcall банит по IP адреса из списка РКН, где присутствует https
|
||||
|
||||
at-home.ru : при дефолтном подключении все блокировалось по IP. после заказа внешнего IP (static NAT) банятся по IP https адреса
|
||||
Для обхода DPI работает замена windows size на 3, но была замечена нестабильность и подвисания. Лучше всего работает сплит запроса около метода в течение всей http сессии.
|
||||
В https подменяется сертификат. Если у вас все блокируется по IP, то нет никакого способа, кроме как проксирование порта 80 по аналогии с 443.
|
||||
|
||||
beeline (corbina) : нужна замена регистра "Host:" на протяжении всей http сессии. С некоторых пор "host" не работает, но работают другие регистры букв.
|
||||
|
||||
dom.ru : нужно проксирование HTTP сессий через tpws с заменой регистра "Host:" и разделение TCP сегментов на хедере "Host:".
|
||||
Ахтунг ! Домру блокирует все поддомены заблоченого домена. IP адреса всевозможных поддоменов узнать невозможно из реестра
|
||||
блокировок, поэтому если вдруг на каком-то сайте вылезает блокировочный баннер, то идите в консоль firefox, вкладка network.
|
||||
Загружайте сайт и смотрите куда идет редирект. Потом вносите домен в zapret-hosts-user.txt. Например, на kinozal.tv имеются
|
||||
2 запрашиваемых поддомена : s.kinozal.tv и st.kinozal.tv с разными IP адресами.
|
||||
Домру перехватывает DNS запросы и всовывает свой лже-ответ. Это обходится через дроп лже-ответа посредством iptables по наличию IP адреса заглушки или через dnscrypt.
|
||||
|
||||
sknt.ru : проверена работа с tpws с параметром "--split-http-req=method". провайдер мониторит каждый пакет, поэтому при использовании nfq 2-й запрос в той же сессии зависает
|
||||
|
||||
Ростелеком/tkt : помогает разделение http запроса на сегменты, настройки mns.ru подходят
|
||||
ТКТ был куплен ростелекомом, используется фильтрация ростелекома.
|
||||
Поскольку DPI не отбрасывает входящую сессию, а только всовывает свой пакет, который приходит раньше ответа от настоящего сервера,
|
||||
блокировки так же обходятся без применения "тяжелой артиллерии" следующим правилом :
|
||||
iptables -t raw -I PREROUTING -p tcp --sport 80 -m string --hex-string "|0D0A|Location: http://warning.rt.ru" --algo bm -j DROP --from 40 --to 200
|
||||
|
||||
tiera : Требуется сплит http запросов в течение всей сессии.
|
||||
|
||||
Другие провайдеры
|
||||
-----------------
|
||||
|
||||
Первым делом необходимо выяснить не подменят ли ваш провайдер DNS.
|
||||
Посмотрите во что ресолвятся заблокированные хосты у вашего провайдера и через какой-нибудь web net tools, которых можно нагуглить множество. Сравните.
|
||||
Если ответы разные, то попробуйте заресолвить те же хосты с DNS сервера 8.8.8.8 через вашего провайдера.
|
||||
Если ответ от 8.8.8.8 нормальный - поменяйте DNS. Если ответ ненормальный, значит провайдер перехватывает запросы на сторонние DNS.
|
||||
Используйте dnscrypt.
|
||||
|
||||
Далее необходимо выяснить какой метод обхода DPI работает на вашем провайдере.
|
||||
В этом вам поможет скрипт https://github.com/ValdikSS/blockcheck.
|
||||
Выберите какой демон вы будете использовать : nfqws или tpws.
|
||||
Подготовьте вручную правила iptables для вашего случая, выполните их.
|
||||
Запустите демон с нужными параметрами вручную.
|
||||
Проверьте работает ли.
|
||||
Когда вы найдете рабочий вариант, отредактируйте init скрипт для вашей системы.
|
||||
Раскомментируйте ISP=custom. Добавьте ваш код в места "# PLACEHOLDER" по аналогии с секциями для других провайдеров для найденной рабочей комбинации.
|
||||
Для openwrt поместите в /etc/firewall.user свой код по аналогии с готовыми скриптами.
|
||||
|
||||
Способы получения списка заблокированных IP
|
||||
-------------------------------------------
|
||||
|
||||
@ -237,6 +187,41 @@ tpws должен запускаться без фильтрации по ipset.
|
||||
Сам поиск по доменам работает очень быстро, нагрузка связана с прокачиванием объема данных через процесс.
|
||||
Вариант хорошо подходит для тех, у кого быстрая система с 128+ Мб памяти и провайдер применяет DPI.
|
||||
|
||||
Проверка провайдера
|
||||
-------------------
|
||||
|
||||
Перед настройкой нужно провести исследование какую бяку устроил вам ваш провайдер.
|
||||
|
||||
Нужно выяснить не подменяет ли он DNS и какой метод обхода DPI работает.
|
||||
В этом вам поможет скрипт https://github.com/ValdikSS/blockcheck.
|
||||
|
||||
Если DNS подменяется, но провайдер не перехватывает обращения к сторонним DNS, поменяйте DNS на публичный.
|
||||
Например : 8.8.8.8, 8.8.4.4, 1.1.1.1, 1.0.0.1, 9.9.9.9
|
||||
Если DNS подменяется и провайдер перехватывает обращения к сторонним DNS, настройте dnscrypt.
|
||||
|
||||
Проанализируйте какие методы дурения DPI работают, в соответствии с ними настройте init скрипт.
|
||||
|
||||
Выбор режима в init скрипте
|
||||
---------------------------
|
||||
|
||||
После установки init скрипта на систему (индивидуально для разных ОС) нужно его настроить.
|
||||
|
||||
Отредактируйте /etc/init.d/zapret.
|
||||
Выберите MODE. Снимите комментарий только с одного из присваиваний.
|
||||
|
||||
nfqws_ipset - использовать nfqws для модификации трафика на порт 80 только на IP из ipset "zapret"
|
||||
nfqws_all - использовать nfqws для модификации трафика на порт 80 для всех IP
|
||||
tpws_ipset - использовать tpws для модификации трафика на порт 80 только на IP из ipset "zapret"
|
||||
tpws_all - использовать tpws для модификации трафика на порт 80 для всех IP
|
||||
tpws_hostlist - пропускать через tpws весь трафик на порт 80. tpws применяет дурение только к хостам из hostlist.
|
||||
ipset - только заполнить ipset. ipset может быть применен для заворота трафика на прокси или на VPN
|
||||
custom - нужно самому запрограммировать запуск демонов и правила iptables
|
||||
|
||||
Можно изменить опции дурения, применяемые демонами nfqws и tpws :
|
||||
|
||||
NFQWS_OPT="--wsize=3 --hostspell=HOST"
|
||||
TPWS_OPT="--hostspell=HOST --split-http-req=method"
|
||||
|
||||
Пример установки на debian 8,9 ubuntu 16,18
|
||||
-------------------------------------------
|
||||
|
||||
@ -253,9 +238,9 @@ tpws должен запускаться без фильтрации по ipset.
|
||||
АЛЬТЕРНАТИВА : зайти в tpws,nfq,ip2net,mdig, в каждом выполнить make. Получите динамические бинарики под вашу ось.
|
||||
|
||||
Скопировать скрипт запуска :
|
||||
cp /opt/zapret/init.d/debian7/zapret /etc/init.d
|
||||
cp /opt/zapret/init.d/debian/zapret /etc/init.d
|
||||
|
||||
В /etc/init.d/zapret выбрать пераметр "ISP". В зависимости от него будут применены нужные правила.
|
||||
В /etc/init.d/zapret настроить параметры согласно разделу "Выбор режима в init скрипте".
|
||||
Там же выбрать параметр SLAVE_ETH, соответствующий названию внутреннего сетевого интерфейса.
|
||||
|
||||
Зарегистрировать init скрипт в systemd :
|
||||
@ -352,7 +337,7 @@ ipset можно выкинуть, если не будем пользовать
|
||||
Скопировать скрипт запуска :
|
||||
cp /opt/zapret/init.d/openwrt/zapret /etc/init.d
|
||||
|
||||
В /etc/init.d/zapret выбрать пераметр "ISP". В зависимости от него будут применены нужные правила.
|
||||
В /etc/init.d/zapret настроить параметры согласно разделу "Выбор режима в init скрипте".
|
||||
|
||||
Вручную первый раз получить новый список ip адресов (кроме hostlist) :
|
||||
/opt/zapret/ipset/get_antizapret.sh
|
||||
@ -374,7 +359,10 @@ ipset можно выкинуть, если не будем пользовать
|
||||
/etc/init.d/zapret enable
|
||||
/etc/init.d/zapret start
|
||||
|
||||
В зависимости от вашего провайдера внести нужные записи в /etc/firewall.user.
|
||||
В зависимости от выбранного режима внести нужные записи в /etc/firewall.user.
|
||||
Базовые варианты лежат в /opt/zapret/init.d/openwrt/firewall.user.*.
|
||||
Если у вас еще нет firewall.user или он пуст, можно скопировать файл.
|
||||
В противном случае добавьте записи или интегрируйте с уже имеющимся кодом.
|
||||
fw3 restart
|
||||
Посмотреть через iptables -nL или через luci вкладку "firewall" появились ли нужные правила.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user