mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-19 13:32: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
|
added ip2net. ip2net groups ips from iplist into subnets and reduces ipset size twice
|
||||||
|
|
||||||
v21
|
v21
|
||||||
|
|
||||||
added mdig. get_reestr.sh is *real* again
|
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
|
#!/bin/sh /etc/rc.common
|
||||||
# Copyright (C) 2006-2011 OpenWrt.org
|
# 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
|
USE_PROCD=1
|
||||||
# start betfore firewall - we need ipset populated
|
# start betfore firewall - we need ipset populated
|
||||||
START=18
|
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
|
# !!!!! in openwrt you need to add firewall rules manually to /etc/firewall.user
|
||||||
|
|
||||||
|
|
||||||
|
PIDDIR=/var/run
|
||||||
ZAPRET_BASE=/opt/zapret
|
ZAPRET_BASE=/opt/zapret
|
||||||
|
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
|
||||||
|
|
||||||
QNUM=200
|
QNUM=200
|
||||||
TPPORT=1188
|
|
||||||
ROUTE_TABLE_NUM=100
|
|
||||||
NFQWS=$ZAPRET_BASE/nfq/nfqws
|
NFQWS=$ZAPRET_BASE/nfq/nfqws
|
||||||
|
NFQWS_OPT_BASE="--qnum=$QNUM"
|
||||||
|
|
||||||
|
TPPORT=1188
|
||||||
TPWS=$ZAPRET_BASE/tpws/tpws
|
TPWS=$ZAPRET_BASE/tpws/tpws
|
||||||
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
|
|
||||||
TPWS_USER=daemon
|
TPWS_USER=daemon
|
||||||
TPWS_HOSTLIST=$ZAPRET_BASE/ipset/zapret-hosts.txt
|
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
|
# must execute /etc/firewall.user on every firewall reload
|
||||||
@ -54,57 +73,56 @@ set_firewall_user_reload() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
get_daemon() {
|
run_daemon()
|
||||||
case "${ISP}" in
|
{
|
||||||
hostlist)
|
# $1 - daemon string id or number. can use 1,2,3,...
|
||||||
DAEMON_OPTS="--port=$TPPORT --hostcase --split-http-req=method --hostlist=$TPWS_HOSTLIST --bind-addr=127.0.0.1 --user=$TPWS_USER"
|
# $2 - daemon
|
||||||
DAEMON=$TPWS
|
# $3 - daemon args
|
||||||
;;
|
# use $PIDDIR/$DAEMONBASE$1.pid as pidfile
|
||||||
mns)
|
local DAEMONBASE=$(basename $2)
|
||||||
DAEMON_OPTS="--qnum=$QNUM --wsize=3"
|
echo "Starting daemon $1: $2 $3"
|
||||||
DAEMON=$NFQWS
|
procd_open_instance
|
||||||
;;
|
procd_set_param command $2 $3
|
||||||
rt)
|
procd_set_param pidfile $PIDDIR/$DAEMONBASE$1.pid
|
||||||
DAEMON_OPTS="--qnum=$QNUM --wsize=20"
|
procd_close_instance
|
||||||
DAEMON=$NFQWS
|
}
|
||||||
;;
|
|
||||||
beeline)
|
create_ipset()
|
||||||
DAEMON_OPTS="--qnum=$QNUM --hostspell=HOST"
|
{
|
||||||
DAEMON=$NFQWS
|
echo "Creating ipset"
|
||||||
;;
|
($IPSET_CR)
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
start_service() {
|
start_service() {
|
||||||
set_firewall_user_reload
|
set_firewall_user_reload
|
||||||
echo "Creating ipset"
|
|
||||||
($IPSET_CR)
|
|
||||||
|
|
||||||
get_daemon
|
case "${MODE}" in
|
||||||
[ -n "$DAEMON" ] && {
|
tpws_hostlist)
|
||||||
echo "Starting $DAEMON"
|
run_daemon 1 $TPWS "$TPWS_OPT_BASE $TPWS_OPT --hostlist=$TPWS_HOSTLIST"
|
||||||
procd_open_instance
|
;;
|
||||||
procd_set_param command $DAEMON $DAEMON_OPTS
|
tpws_ipset)
|
||||||
procd_close_instance
|
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 взаимоисключающи.
|
Есть исключения : 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
|
Способы получения списка заблокированных IP
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
@ -237,6 +187,41 @@ tpws должен запускаться без фильтрации по ipset.
|
|||||||
Сам поиск по доменам работает очень быстро, нагрузка связана с прокачиванием объема данных через процесс.
|
Сам поиск по доменам работает очень быстро, нагрузка связана с прокачиванием объема данных через процесс.
|
||||||
Вариант хорошо подходит для тех, у кого быстрая система с 128+ Мб памяти и провайдер применяет DPI.
|
Вариант хорошо подходит для тех, у кого быстрая система с 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
|
Пример установки на debian 8,9 ubuntu 16,18
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
@ -253,9 +238,9 @@ tpws должен запускаться без фильтрации по ipset.
|
|||||||
АЛЬТЕРНАТИВА : зайти в tpws,nfq,ip2net,mdig, в каждом выполнить make. Получите динамические бинарики под вашу ось.
|
АЛЬТЕРНАТИВА : зайти в 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, соответствующий названию внутреннего сетевого интерфейса.
|
Там же выбрать параметр SLAVE_ETH, соответствующий названию внутреннего сетевого интерфейса.
|
||||||
|
|
||||||
Зарегистрировать init скрипт в systemd :
|
Зарегистрировать init скрипт в systemd :
|
||||||
@ -352,7 +337,7 @@ ipset можно выкинуть, если не будем пользовать
|
|||||||
Скопировать скрипт запуска :
|
Скопировать скрипт запуска :
|
||||||
cp /opt/zapret/init.d/openwrt/zapret /etc/init.d
|
cp /opt/zapret/init.d/openwrt/zapret /etc/init.d
|
||||||
|
|
||||||
В /etc/init.d/zapret выбрать пераметр "ISP". В зависимости от него будут применены нужные правила.
|
В /etc/init.d/zapret настроить параметры согласно разделу "Выбор режима в init скрипте".
|
||||||
|
|
||||||
Вручную первый раз получить новый список ip адресов (кроме hostlist) :
|
Вручную первый раз получить новый список ip адресов (кроме hostlist) :
|
||||||
/opt/zapret/ipset/get_antizapret.sh
|
/opt/zapret/ipset/get_antizapret.sh
|
||||||
@ -374,7 +359,10 @@ ipset можно выкинуть, если не будем пользовать
|
|||||||
/etc/init.d/zapret enable
|
/etc/init.d/zapret enable
|
||||||
/etc/init.d/zapret start
|
/etc/init.d/zapret start
|
||||||
|
|
||||||
В зависимости от вашего провайдера внести нужные записи в /etc/firewall.user.
|
В зависимости от выбранного режима внести нужные записи в /etc/firewall.user.
|
||||||
|
Базовые варианты лежат в /opt/zapret/init.d/openwrt/firewall.user.*.
|
||||||
|
Если у вас еще нет firewall.user или он пуст, можно скопировать файл.
|
||||||
|
В противном случае добавьте записи или интегрируйте с уже имеющимся кодом.
|
||||||
fw3 restart
|
fw3 restart
|
||||||
Посмотреть через iptables -nL или через luci вкладку "firewall" появились ли нужные правила.
|
Посмотреть через iptables -nL или через luci вкладку "firewall" появились ли нужные правила.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user