separate config from init script

This commit is contained in:
bolvan 2019-05-06 16:02:22 +03:00
parent b1c4f42d08
commit 5cdf6b3469
12 changed files with 183 additions and 154 deletions

27
config Normal file
View File

@ -0,0 +1,27 @@
# this file is included from init scripts
# change values here
# CHOOSE OPERATION MODE
# use nfqws : nfqws_ipset nfqws_ipset_https nfqws_all nfqws_all_https
# use tpws : tpws_ipset tpws_ipset_https tpws_all tpws_all_https tpws_hostlist
# no daemon, just ipset : ipset
# custom mode : custom . should modify init script and add your own code
MODE=tpws_ipset_https
# CHOOSE NFQWS DAEMON OPTIONS. run "nfq/nfqws --help" for option list
NFQWS_OPT="--wsize=3 --hostspell=HOST"
# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
TPWS_OPT_HTTP="--hostspell=HOST --split-http-req=method"
TPWS_OPT_HTTPS="--split-pos=3"
# for routers based on desktop linux only. has not effect in openwrt.
# CHOSE NETWORK INTERFACE BEHIND NAT (LAN)
# or leave it commented if its not router
#SLAVE_ETH=eth0
# for install_easy select which init script will be used to get ip or host list
# possible value : get_user.sh get_antizapret.sh get_combined.sh get_reestr.sh get_hostlist.sh
# comment if not required
GETLIST="get_antizapret.sh"

View File

@ -199,15 +199,15 @@ tpws должен запускаться без фильтрации по ipset.
Например : 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 скрипт.
Проанализируйте какие методы дурения DPI работают, в соответствии с ними настройте /opt/zapret/config.
Выбор режима в init скрипте
---------------------------
После установки init скрипта на систему (индивидуально для разных ОС) нужно его настроить.
Выбор параметров
----------------
Отредактируйте /etc/init.d/zapret.
Выберите MODE. Снимите комментарий только с одного из присваиваний.
Файл /opt/zapret/config используется различными компонентами системы и содержит основные настройки.
Его нужно просмотреть и при необходимости отредактировать.
Выберите MODE :
nfqws_ipset - использовать nfqws для модификации трафика на порт 80 только на IP из ipset "zapret"
nfqws_ipset_https - использовать nfqws для модификации трафика на порты 80 и 443 только на IP из ipset "zapret"
@ -219,7 +219,7 @@ tpws_all - использовать tpws для модификации траф
tpws_all_https - использовать tpws для модификации трафика на порты 80 и 443 для всех IP
tpws_hostlist - пропускать через tpws весь трафик на порт 80. tpws применяет дурение только к хостам из hostlist.
ipset - только заполнить ipset. ipset может быть применен для заворота трафика на прокси или на VPN
custom - нужно самому запрограммировать запуск демонов и правила iptables
custom - нужно самому запрограммировать запуск демонов в init скрипте и правила iptables
Можно изменить опции дурения, применяемые демонами nfqws и tpws :
@ -227,6 +227,13 @@ NFQWS_OPT="--wsize=3 --hostspell=HOST"
TPWS_OPT_HTTP="--hostspell=HOST --split-http-req=method"
TPWS_OPT_HTTPS="--split-pos=3"
Если ваша система не openwrt и работает как роутер, то нужно раскомментировать параметр SLAVE_ETH и вписать в него
название внутреннего сетевого интерфейса (LAN).
Параметр GETLIST указывает инсталятору install_easy.sh какой скрипт дергать
для обновления списка заблокированных ip или хостов.
Пример установки на debian-подобную систему
-------------------------------------------
@ -250,9 +257,7 @@ TPWS_OPT_HTTPS="--split-pos=3"
Скопировать скрипт запуска :
cp /opt/zapret/init.d/sysv/zapret /etc/init.d
В /etc/init.d/zapret настроить параметры согласно разделу "Выбор режима в init скрипте".
Если ваша система - роутер, то раскомментировать параметр SLAVE_ETH и вписать в него
название внутреннего сетевого интерфейса (LAN).
Настроить параметры согласно разделу "Выбор параметров".
Принять изменения скрипта в systemd :
systemctl daemon-reload
@ -260,7 +265,7 @@ TPWS_OPT_HTTPS="--split-pos=3"
Включить автозапуск службы :
systemctl enable zapret
В зависимости от выбранного в init скрипте MODE :
В зависимости от выбранного MODE :
MODE содержит "ipset" :
Удалить старые ip листы, если они были созданы ранее :
@ -361,8 +366,13 @@ OpenSUSE
# /opt/zapret/uninstall_easy.sh
# rm -r /opt/zapret
Скрипты простой установки могут быть удобны и для нечайников для первоначальной установки,
после которой можно поправить настройки вручную. Так устанавливать быстрее.
Это самый необходимый миниум действий.
Если zapret уже куда-то был скачан, то можно запустить install_easy.sh прямо оттуда.
Инсталятор сам запросит рута, скопирует файлы куда надо.
Можно даже запускать инсталятор из "проводника" через функцию "запустить в терминале", если
"проводник" такое позволяет.
Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".
Эти скрипты будут работать и на других системах на базе systemd при условии, что
systemd собран с поддержкой sysvinit и имеется следующий файл :
@ -428,9 +438,9 @@ ipset можно выкинуть, если не будем пользовать
Скопировать скрипт запуска :
cp /opt/zapret/init.d/openwrt/zapret /etc/init.d
В /etc/init.d/zapret настроить параметры согласно разделу "Выбор режима в init скрипте".
Настроить параметры согласно разделу "Выбор параметров".
В зависимости от выбранного в init скрипте MODE :
В зависимости от выбранного MODE :
MODE содержит "ipset" :
Удалить старые ip листы, если они были созданы ранее :
@ -493,9 +503,12 @@ MODE=custom
ЕСЛИ ВСЕ ПЛОХО С МЕСТОМ : тогда берите SDK и собирайте динамические бинарики. они весят меньше.
откажитесь от работы со списком РКН. используйте только get_user.sh
ЕСЛИ СОВСЕМ ВСЕ УЖАСНО С МЕСТОМ : не надо устанавливать дополнительные пакеты через opkg. оставьте лишь один tpws
и init скрипт, в firewall.user перенаправляйте весь трафик на порт 80 на tpws. такой вариант потребует менее 100 кб места
и полностью статичен. отсутствуют любые загрузки, обновления, изменения файлов.
ЕСЛИ СОВСЕМ ВСЕ УЖАСНО С МЕСТОМ : не надо устанавливать дополнительные пакеты через opkg.
оставьте лишь /opt/zapret/tpws/tpws, /opt/zapret/config, /etc/init.d/zapret, /etc/firewall.zapret
используйте MODE=tpws_all или tpws_all_https
такой вариант потребует около 100 кб места и полностью статичен.
отсутствуют любые загрузки, обновления, изменения файлов.
tpws без ipset использует всего лишь DNAT, который есть по умолчанию
СОВЕТ : Покупайте только роутеры с USB. В USB можно воткнуть флэшку и вынести на нее корневую файловую систему
или использовать ее в качестве оверлея. Не надо мучать себя, запихивая незапихиваемое в 8 мб встроенной флэшки.
@ -507,7 +520,7 @@ MODE=custom
Работает только если у вас на роутере достаточно много места.
Схема примерно такая же, как и на десктопе. Помещаем на роутер /opt/zapret,
запускаем install_easy.sh
выполняем раздел "Выбор параметров", запускаем install_easy.sh
Если места достаточно, можно прямо на роутер установить git и скачать с github :
@ -527,8 +540,9 @@ init.d/openwrt
ipset/*
binaries/<ваша архитектура>/{tpws,nfqws,ip2net,mdig}
Чтобы сменить MODE, перед установкой можно отредактировать /opt/zapret/init.d/openwrt/zapret, изменить MODE там
и согласиться на перезапись init скрипта. По умолчанию используется MODE=tpws_ipset_https.
Если вы закачаете zapret не в /opt/zapret, а, например, в /tmp, и запустите install_easy.sh оттуда,
то инсталятор сам скопирует только необходимый минимум в /opt/zapret.
Другие прошивки
---------------

View File

@ -1,51 +1,16 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
USE_PROCD=1
# start betfore firewall - we need ipset populated
START=18
ZAPRET_BASE=/opt/zapret
# SHOULD EDIT config
. "$ZAPRET_BASE/config"
# +++ REVIEW CONFIG HERE +++
# CHOOSE OPERATION MODE
# leave only one MODE= uncommented
# using nfqws with ipset
#MODE=nfqws_ipset
#MODE=nfqws_ipset_https
# using nfqws for all
#MODE=nfqws_all
#MODE=nfqws_all_https
# CHOOSE NFQWS DAEMON OPTIONS. run "nfq/nfqws --help" for option list
NFQWS_OPT="--wsize=3 --hostspell=HOST"
# using tpws with ipset
#MODE=tpws_ipset
MODE=tpws_ipset_https
# using tpws for all
#MODE=tpws_all
#MODE=tpws_all_https
# using tpws with hostlist
#MODE=tpws_hostlist
# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
TPWS_OPT_HTTP="--hostspell=HOST --split-http-req=method"
TPWS_OPT_HTTPS="--split-pos=3"
# 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 firewall rules are configured separately
PIDDIR=/var/run
ZAPRET_BASE=/opt/zapret
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
QNUM=200

View File

@ -10,53 +10,14 @@
# 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
#MODE=nfqws_ipset_https
# using nfqws for all
#MODE=nfqws_all
#MODE=nfqws_all_https
# CHOOSE NFQWS DAEMON OPTIONS. run "nfq/nfqws --help" for option list
NFQWS_OPT="--wsize=3 --hostspell=HOST"
# using tpws with ipset
#MODE=tpws_ipset
MODE=tpws_ipset_https
# using tpws for all
#MODE=tpws_all
#MODE=tpws_all_https
# using tpws with hostlist
#MODE=tpws_hostlist
# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
TPWS_OPT_HTTP="--hostspell=HOST --split-http-req=method"
TPWS_OPT_HTTPS="--split-pos=3"
# 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
# router only: CHOSE NETWORK INTERFACE BEHIND NAT (LAN)
# or leave it commented if its not router
#SLAVE_ETH=eth0
# --- REVIEW CONFIG HERE ---
ZAPRET_BASE=/opt/zapret
# SHOULD EDIT config
. "$ZAPRET_BASE/config"
NAME=zapret
DESC=anti-zapret
PIDDIR=/var/run
ZAPRET_BASE=/opt/zapret
IPSET_CR=$ZAPRET_BASE/ipset/create_ipset.sh
QNUM=200

View File

@ -7,31 +7,46 @@ BINDIR=$EXEDIR/$BINS
check_dir()
{
echo 0.0.0.0 | "$BINDIR/$1/ip2net" 1>/dev/null 2>/dev/null
echo 0.0.0.0 | "$BINDIR/$1/ip2net" 1>/dev/null 2>/dev/null
}
# link or copy executables. uncomment either ln or cp, comment other
ccp()
{
local F=$(basename $1)
[ -d "$EXEDIR/$2" ] || mkdir "$EXEDIR/$2"
[ -f "$EXEDIR/$2/$F" ] && rm -f "$EXEDIR/$2/$F"
ln -fs "../$BINS/$1" "$EXEDIR/$2" && echo linking : "../$BINS/$1" =\> "$EXEDIR/$2"
#cp -f "$BINDIR/$1" "$EXEDIR/$2" && echo copying : "$BINDIR/$1" =\> "$EXEDIR/$2"
local F=$(basename $1)
[ -d "$EXEDIR/$2" ] || mkdir "$EXEDIR/$2"
[ -f "$EXEDIR/$2/$F" ] && rm -f "$EXEDIR/$2/$F"
ln -fs "../$BINS/$1" "$EXEDIR/$2" && echo linking : "../$BINS/$1" =\> "$EXEDIR/$2"
#cp -f "$BINDIR/$1" "$EXEDIR/$2" && echo copying : "$BINDIR/$1" =\> "$EXEDIR/$2"
}
for arch in aarch64 armhf mips64r2-msb mips32r1-lsb mips32r1-msb ppc x86_64 x86
do
if check_dir $arch; then
echo $arch is OK
echo installing binaries ...
ccp $arch/ip2net ip2net
ccp $arch/mdig mdig
ccp $arch/nfqws nfq
ccp $arch/tpws tpws
break
else
echo $arch is NOT OK
fi
done
ARCHLIST="aarch64 armhf mips64r2-msb mips32r1-lsb mips32r1-msb ppc x86_64 x86"
if [ "$1" == "getarch" ]; then
for arch in $ARCHLIST
do
if check_dir $arch; then
echo $arch
true
return
fi
done
else
for arch in $ARCHLIST
do
if check_dir $arch; then
echo $arch is OK
echo installing binaries ...
ccp $arch/ip2net ip2net
ccp $arch/mdig mdig
ccp $arch/nfqws nfq
ccp $arch/tpws tpws
true
return
else
echo $arch is NOT OK
fi
done
fi
false

View File

@ -5,11 +5,15 @@
SCRIPT=$(readlink -f $0)
EXEDIR=$(dirname $SCRIPT)
ZAPRET_BASE=/opt/zapret
ZAPRET_CONFIG=$EXEDIR/config
. "$ZAPRET_CONFIG"
SYSTEMD_SYSV_GENERATOR=/lib/systemd/system-generators/systemd-sysv-generator
SYSTEMD_SYSV_GENERATOR2=/usr$SYSTEMD_SYSV_GENERATOR
GET_IPLIST=$EXEDIR/ipset/get_antizapret.sh
GET_IPLIST_PREFIX=/ipset/get_
[ -n "$GETLIST" ] && GET_LIST="$EXEDIR/ipset/$GETLIST"
GET_LIST_PREFIX=/ipset/get_
exists()
{
@ -46,6 +50,7 @@ md5file()
md5sum "$1" | cut -f1 -d ' '
}
check_system()
{
echo \* checking system ...
@ -69,12 +74,53 @@ check_system()
echo system is based on $SYSTEM
}
call_install_bin()
{
"$EXEDIR/install_bin.sh" $1 || {
echo binaries compatible with your system not found
exitp 8
}
}
install_binaries()
{
echo \* installing binaries ...
call_install_bin
}
get_bin_arch()
{
call_install_bin getarch
}
copy_all()
{
cp -R "$1" "$2"
}
copy_minimal()
{
local ARCH=$(get_bin_arch)
local BINDIR="$1/binaries/$ARCH"
[ -d "$2" ] || mkdir -p "$2"
mkdir "$2/tpws" "$2/nfq" "$2/ip2net" "$2/mdig" "$2/binaries" "$2/binaries/$ARCH"
cp -R "$1/ipset" "$2"
cp -R "$1/init.d" "$2"
cp "$1/install_easy.sh" "$1/uninstall_easy.sh" "$1/install_bin.sh" "$2"
cp "$BINDIR/tpws" "$BINDIR/nfqws" "$BINDIR/ip2net" "$BINDIR/mdig" "$2/binaries/$ARCH"
}
check_location()
{
# $1 - copy function
echo \* checking location ...
# use inodes in case something is linked
[ $(get_dir_inode "$EXEDIR") = $(get_dir_inode "$ZAPRET_BASE") ] || {
[ -d "$ZAPRET_BASE" ] && [ $(get_dir_inode "$EXEDIR") = $(get_dir_inode "$ZAPRET_BASE") ] || {
echo easy install is supported only from default location : $ZAPRET_BASE
echo currenlty its run from $EXEDIR
echo -n "do you want the installer to copy it for you (Y/N) ? "
@ -91,7 +137,7 @@ check_location()
exitp 3
fi
fi
cp -R $EXEDIR $ZAPRET_BASE
$1 "$EXEDIR" "$ZAPRET_BASE"
echo relaunching itself from $ZAPRET_BASE
exec $ZAPRET_BASE/$(basename $0)
else
@ -102,28 +148,24 @@ check_location()
echo running from $EXEDIR
}
crontab_add()
{
echo \* adding crontab entry ...
[ -x "$GET_LIST" ] && {
echo \* adding crontab entry ...
CRONTMP=/tmp/cron.tmp
crontab -l >$CRONTMP
if grep -q "$GET_IPLIST_PREFIX" $CRONTMP; then
echo some entries already exist in crontab. check if this is corrent :
grep "$GET_IPLIST_PREFIX" $CRONTMP
else
echo "0 12 * * */2 $GET_IPLIST" >>$CRONTMP
crontab $CRONTMP
fi
CRONTMP=/tmp/cron.tmp
crontab -l >$CRONTMP
if grep -q "$GET_LIST_PREFIX" $CRONTMP; then
echo some entries already exist in crontab. check if this is corrent :
grep "$GET_LIST_PREFIX" $CRONTMP
else
echo "0 12 * * */2 $GET_LIST" >>$CRONTMP
crontab $CRONTMP
fi
rm -f $CRONTMP
}
install_binaries()
{
echo \* installing binaries ...
"$EXEDIR/install_bin.sh"
rm -f $CRONTMP
}
}
check_preprequisites_linux()
@ -213,13 +255,18 @@ register_sysv_init_systemd()
}
}
download_ip_list()
download_list()
{
echo \* downloading blocked ip list ...
[ -x "$GET_LIST" ] && {
echo \* downloading blocked ip/host list ...
"$GET_IPLIST" || {
echo could not download ip list
exitp 25
rm -f "$EXEDIR/ipset/zapret-ip.txt" "$EXEDIR/ipset/zapret-ip-user.txt" \
"$EXEDIR/ipset/zapret-ip-ipban.txt" "$EXEDIR/ipset/zapret-ip-user-ipban.txt" \
"$EXEDIR/ipset/zapret-hosts.txt"
"$GET_LIST" || {
echo could not download ip list
exitp 25
}
}
}
@ -238,11 +285,12 @@ install_systemd()
INIT_SCRIPT_SRC=$EXEDIR/init.d/sysv/zapret
INIT_SCRIPT=/etc/init.d/zapret
check_location copy_all
check_preprequisites_linux
install_binaries
install_sysv_init
register_sysv_init_systemd
download_ip_list
download_list
crontab_add
service_start_systemd
}
@ -345,9 +393,8 @@ install_openwrt_firewall()
{
echo \* installing firewall script ...
local MODE=$(sed -nre 's/^MODE=([^[:space:]]+)/\1/p' "$INIT_SCRIPT" | tail -n 1)
[ -n "MODE" ] || {
echo could not get MODE from $INIT_SCRIPT
echo should specify MODE in $ZAPRET_CONFIG
exitp 7
}
@ -399,11 +446,12 @@ install_openwrt()
FW_SCRIPT_SRC_DIR=$EXEDIR/init.d/openwrt/firewall.zapret
OPENWRT_FW_INCLUDE=/etc/firewall.zapret
check_location copy_minimal
check_preprequisites_openwrt
install_binaries
install_sysv_init
register_sysv_init
download_ip_list
download_list
crontab_add
service_start_sysv
install_openwrt_firewall
@ -413,7 +461,6 @@ install_openwrt()
check_system
check_location
case $SYSTEM in
systemd)