mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-19 13:32:58 +03:00
ipset: add ip lists compression
This commit is contained in:
parent
4013b75e1c
commit
51810df337
@ -161,6 +161,9 @@ get_reestr.sh может использовать мультипоточный
|
|||||||
5) ipset/get_config.sh. этот скрипт вызывает то, что прописано в переменной GETLIST из файла config
|
5) ipset/get_config.sh. этот скрипт вызывает то, что прописано в переменной GETLIST из файла config
|
||||||
Если переменная не определена, то никаких действий не выполняется.
|
Если переменная не определена, то никаких действий не выполняется.
|
||||||
|
|
||||||
|
Листы zapret-ip.txt и zapret-ipban.txt сохраняются в сжатом виде в файлы .gz.
|
||||||
|
Это позволяет снизить их размер во много раз и сэкономить место на роутере.
|
||||||
|
|
||||||
На роутерах не рекомендуется вызывать эти скрипты чаще раза за 2 суток, поскольку сохранение идет
|
На роутерах не рекомендуется вызывать эти скрипты чаще раза за 2 суток, поскольку сохранение идет
|
||||||
либо во внутреннюю флэш память роутера, либо в случае extroot - на флэшку.
|
либо во внутреннюю флэш память роутера, либо в случае extroot - на флэшку.
|
||||||
В обоих случаях слишком частая запись может убить флэшку, но если это произойдет с внутренней
|
В обоих случаях слишком частая запись может убить флэшку, но если это произойдет с внутренней
|
||||||
@ -270,7 +273,7 @@ TPWS_OPT_HTTPS="--split-pos=3"
|
|||||||
systemctl enable zapret
|
systemctl enable zapret
|
||||||
|
|
||||||
Удалить старые листы, если они были созданы ранее :
|
Удалить старые листы, если они были созданы ранее :
|
||||||
rm /opt/zapret/ipset/zapret-ip.txt /opt/zapret/ipset/zapret-ip-user.txt /opt/zapret/ipset/zapret-ip-ipban.txt /opt/zapret/ipset/zapret-ip-user-ipban.txt /opt/zapret/ipset/zapret-hosts.txt
|
rm /opt/zapret/ipset/zapret-ip.txt* /opt/zapret/ipset/zapret-ip-user.txt* /opt/zapret/ipset/zapret-ip-ipban.txt* /opt/zapret/ipset/zapret-ip-user-ipban.txt* /opt/zapret/ipset/zapret-hosts.txt
|
||||||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||||
Выполнить скрипт обновления листа :
|
Выполнить скрипт обновления листа :
|
||||||
/opt/zapret/ipset/get_config.sh
|
/opt/zapret/ipset/get_config.sh
|
||||||
@ -418,7 +421,7 @@ ipset можно выкинуть, если не будем пользовать
|
|||||||
Настроить параметры согласно разделу "Выбор параметров".
|
Настроить параметры согласно разделу "Выбор параметров".
|
||||||
|
|
||||||
Удалить старые листы, если они были созданы ранее :
|
Удалить старые листы, если они были созданы ранее :
|
||||||
rm /opt/zapret/ipset/zapret-ip.txt /opt/zapret/ipset/zapret-ip-user.txt /opt/zapret/ipset/zapret-ip-ipban.txt /opt/zapret/ipset/zapret-ip-user-ipban.txt /opt/zapret/ipset/zapret-hosts.txt
|
rm /opt/zapret/ipset/zapret-ip.txt* /opt/zapret/ipset/zapret-ip-user.txt* /opt/zapret/ipset/zapret-ip-ipban.txt* /opt/zapret/ipset/zapret-ip-user-ipban.txt* /opt/zapret/ipset/zapret-hosts.txt
|
||||||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||||
Выполнить скрипт обновления листа :
|
Выполнить скрипт обновления листа :
|
||||||
/opt/zapret/ipset/get_config.sh
|
/opt/zapret/ipset/get_config.sh
|
||||||
|
@ -348,8 +348,9 @@ download_list()
|
|||||||
[ -x "$GET_LIST" ] && {
|
[ -x "$GET_LIST" ] && {
|
||||||
echo \* downloading blocked ip/host list ...
|
echo \* downloading blocked ip/host list ...
|
||||||
|
|
||||||
rm -f "$EXEDIR/ipset/zapret-ip.txt" "$EXEDIR/ipset/zapret-ip-user.txt" \
|
# can be txt or txt.gz
|
||||||
"$EXEDIR/ipset/zapret-ip-ipban.txt" "$EXEDIR/ipset/zapret-ip-user-ipban.txt"
|
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*"
|
||||||
"$GET_LIST" || {
|
"$GET_LIST" || {
|
||||||
echo could not download ip list
|
echo could not download ip list
|
||||||
exitp 25
|
exitp 25
|
||||||
|
@ -8,6 +8,7 @@ IP2NET=$EXEDIR/../ip2net/ip2net
|
|||||||
|
|
||||||
. "$EXEDIR/def.sh"
|
. "$EXEDIR/def.sh"
|
||||||
|
|
||||||
|
|
||||||
create_ipset()
|
create_ipset()
|
||||||
{
|
{
|
||||||
local IPSTYPE
|
local IPSTYPE
|
||||||
@ -19,20 +20,20 @@ fi
|
|||||||
ipset flush $2 2>/dev/null || ipset create $2 $IPSTYPE $IPSET_OPT
|
ipset flush $2 2>/dev/null || ipset create $2 $IPSTYPE $IPSET_OPT
|
||||||
for f in "$3" "$4"
|
for f in "$3" "$4"
|
||||||
do
|
do
|
||||||
[ -f "$f" ] && {
|
zzexist "$f" && {
|
||||||
if [ -x $IP2NET ]; then
|
if [ -x "$IP2NET" ]; then
|
||||||
echo Adding to ipset $2 \($IPSTYPE , ip2net\) : $f
|
echo Adding to ipset $2 \($IPSTYPE , ip2net\) : $f
|
||||||
if [ -f "$ZIPLIST_EXCLUDE" ] ; then
|
if [ -f "$ZIPLIST_EXCLUDE" ] ; then
|
||||||
grep -vxFf $ZIPLIST_EXCLUDE "$f" | $IP2NET | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
zzcat "$f" | grep -vxFf "$ZIPLIST_EXCLUDE" | "$IP2NET" | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
||||||
else
|
else
|
||||||
$IP2NET <"$f" | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
zzcat "$f" | "$IP2NET" | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo Adding to ipset $2 \($IPSTYPE\) : $f
|
echo Adding to ipset $2 \($IPSTYPE\) : $f
|
||||||
if [ -f "$ZIPLIST_EXCLUDE" ] ; then
|
if [ -f "$ZIPLIST_EXCLUDE" ] ; then
|
||||||
grep -vxFf $ZIPLIST_EXCLUDE "$f" | sort -u | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
zzcat "$f" | grep -vxFf "$ZIPLIST_EXCLUDE" | sort -u | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
||||||
else
|
else
|
||||||
sort -u "$f" | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
zzcat "$f" | sort -u | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -40,5 +41,5 @@ done
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
create_ipset hash:ip $ZIPSET $ZIPLIST $ZIPLIST_USER
|
create_ipset hash:ip $ZIPSET "$ZIPLIST" "$ZIPLIST_USER"
|
||||||
create_ipset hash:ip $ZIPSET_IPBAN $ZIPLIST_IPBAN $ZIPLIST_USER_IPBAN
|
create_ipset hash:ip $ZIPSET_IPBAN "$ZIPLIST_IPBAN" "$ZIPLIST_USER_IPBAN"
|
||||||
|
33
ipset/def.sh
33
ipset/def.sh
@ -14,12 +14,29 @@ ZUSERLIST_IPBAN=$EXEDIR/zapret-hosts-user-ipban.txt
|
|||||||
MDIG=$EXEDIR/../mdig/mdig
|
MDIG=$EXEDIR/../mdig/mdig
|
||||||
MDIG_THREADS=30
|
MDIG_THREADS=30
|
||||||
|
|
||||||
|
zzexist()
|
||||||
|
{
|
||||||
|
[ -f "$1.gz" ] || [ -f "$1" ]
|
||||||
|
}
|
||||||
|
zzcat()
|
||||||
|
{
|
||||||
|
if [ -f "$1.gz" ]; then
|
||||||
|
gunzip -c "$1"
|
||||||
|
else
|
||||||
|
cat "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
zz()
|
||||||
|
{
|
||||||
|
gzip -c >"$1.gz"
|
||||||
|
}
|
||||||
|
|
||||||
digger()
|
digger()
|
||||||
{
|
{
|
||||||
if [ -x $MDIG ]; then
|
if [ -x "$MDIG" ]; then
|
||||||
$MDIG --family=4 --threads=$MDIG_THREADS <$1
|
zzcat "$1" | "$MDIG" --family=4 --threads=$MDIG_THREADS
|
||||||
else
|
else
|
||||||
dig A +short +time=8 +tries=2 -f $1 | grep -E '^[^;].*[^\.]$'
|
zzcat "$1" | dig A +short +time=8 +tries=2 -f - | grep -E '^[^;].*[^\.]$'
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,12 +47,14 @@ cut_local()
|
|||||||
grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$'
|
grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
getuser()
|
getuser()
|
||||||
{
|
{
|
||||||
[ -f $ZUSERLIST ] && {
|
[ -f "$ZUSERLIST" ] && {
|
||||||
digger $ZUSERLIST | cut_local | sort -u >$ZIPLIST_USER
|
digger "$ZUSERLIST" | cut_local | sort -u > "$ZIPLIST_USER"
|
||||||
}
|
}
|
||||||
[ -f $ZUSERLIST_IPBAN ] && {
|
[ -f "$ZUSERLIST_IPBAN" ] && {
|
||||||
digger $ZUSERLIST_IPBAN | cut_local | sort -u >$ZIPLIST_USER_IPBAN
|
digger "$ZUSERLIST_IPBAN" | cut_local | sort -u > "$ZIPLIST_USER_IPBAN"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,13 +12,14 @@ ZIPLISTTMP=$TMPDIR/zapret-ip.txt
|
|||||||
|
|
||||||
getuser
|
getuser
|
||||||
|
|
||||||
curl --fail --max-time 150 --max-filesize 20971520 -k -L "$ZURL" | cut_local >$ZIPLISTTMP &&
|
curl --fail --max-time 150 --max-filesize 20971520 -k -L "$ZURL" | cut_local >"$ZIPLISTTMP" &&
|
||||||
{
|
{
|
||||||
dlsize=$(wc -c "$ZIPLISTTMP" | cut -f 1 -d ' ')
|
dlsize=$(wc -c "$ZIPLISTTMP" | cut -f 1 -d ' ')
|
||||||
if test $dlsize -lt 204800; then
|
if test $dlsize -lt 204800; then
|
||||||
echo list file is too small. can be bad.
|
echo list file is too small. can be bad.
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
mv -f $ZIPLISTTMP $ZIPLIST
|
cat "$ZIPLISTTMP" | zz "$ZIPLIST"
|
||||||
|
rm -f "$ZIPLISTTMP" "$ZIPLIST"
|
||||||
"$EXEDIR/create_ipset.sh"
|
"$EXEDIR/create_ipset.sh"
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,12 @@ ZREESTR=$TMPDIR/reestr.txt
|
|||||||
ZURL_REESTR=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv
|
ZURL_REESTR=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv
|
||||||
ZAZ=$TMPDIR/zapret-ip.txt
|
ZAZ=$TMPDIR/zapret-ip.txt
|
||||||
ZURL_AZ=http://antizapret.prostovpn.org/iplist.txt
|
ZURL_AZ=http://antizapret.prostovpn.org/iplist.txt
|
||||||
|
ZIPLIST_IPBAN_TMP=/tmp/zapret-ipban.txt
|
||||||
|
|
||||||
getuser
|
getuser
|
||||||
|
|
||||||
# assume all https banned by ip
|
# assume all https banned by ip
|
||||||
curl -k --fail --max-time 300 --max-filesize 62914560 "$ZURL_REESTR" -o $ZREESTR ||
|
curl -k --fail --max-time 300 --max-filesize 62914560 "$ZURL_REESTR" -o "$ZREESTR" ||
|
||||||
{
|
{
|
||||||
echo reestr list download failed
|
echo reestr list download failed
|
||||||
exit 2
|
exit 2
|
||||||
@ -27,24 +28,30 @@ if test $dlsize -lt 1048576; then
|
|||||||
fi
|
fi
|
||||||
#sed -i 's/\\n/\r\n/g' $ZREESTR
|
#sed -i 's/\\n/\r\n/g' $ZREESTR
|
||||||
# find entries with https or without domain name - they should be banned by IP
|
# find entries with https or without domain name - they should be banned by IP
|
||||||
(grep -a "https://" $ZREESTR ; grep -avE "^.*;[^;:/]+\.[^;:/]+;" $ZREESTR ) |
|
(grep -a "https://" "$ZREESTR" ; grep -avE "^.*;[^;:/]+\.[^;:/]+;" "$ZREESTR" ) |
|
||||||
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]+)?' |
|
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]+)?' |
|
||||||
cut_local |
|
cut_local |
|
||||||
sort -u >$ZIPLIST_IPBAN
|
sort -u >"$ZIPLIST_IPBAN_TMP"
|
||||||
|
|
||||||
rm -f $ZREESTR
|
rm -f "$ZREESTR"
|
||||||
|
|
||||||
curl --fail --max-time 150 --max-filesize 20971520 -k -L "$ZURL_AZ" | cut_local >$ZAZ ||
|
curl --fail --max-time 150 --max-filesize 20971520 -k -L "$ZURL_AZ" | cut_local >"$ZAZ" ||
|
||||||
{
|
{
|
||||||
|
rm -f "$ZIPLIST_IPBAN_TMP"
|
||||||
echo antizapret list download failed
|
echo antizapret list download failed
|
||||||
exit 2
|
exit 2
|
||||||
}
|
}
|
||||||
dlsize=$(wc -c "$ZAZ" | cut -f 1 -d ' ')
|
dlsize=$(wc -c "$ZAZ" | cut -f 1 -d ' ')
|
||||||
if test $dlsize -lt 204800; then
|
if test $dlsize -lt 204800; then
|
||||||
|
rm -f "$ZIPLIST_IPBAN_TMP"
|
||||||
echo antizapret list file is too small. can be bad.
|
echo antizapret list file is too small. can be bad.
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
# do not include hosts banned by ip
|
# do not include hosts banned by ip
|
||||||
grep -xvFf $ZIPLIST_IPBAN $ZAZ >$ZIPLIST
|
grep -xvFf "$ZIPLIST_IPBAN_TMP" "$ZAZ" | zz "$ZIPLIST"
|
||||||
rm -f $ZAZ
|
rm -f "$ZAZ"
|
||||||
|
|
||||||
|
cat "$ZIPLIST_IPBAN_TMP" | zz "$ZIPLIST_IPBAN"
|
||||||
|
rm -f "$ZIPLIST_IPBAN_TMP"
|
||||||
|
|
||||||
"$EXEDIR/create_ipset.sh"
|
"$EXEDIR/create_ipset.sh"
|
||||||
|
@ -10,7 +10,7 @@ ZREESTR=$TMPDIR/zapret.txt
|
|||||||
#ZURL=https://reestr.rublacklist.net/api/current
|
#ZURL=https://reestr.rublacklist.net/api/current
|
||||||
ZURL=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv
|
ZURL=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv
|
||||||
|
|
||||||
curl -k --fail --max-time 300 --max-filesize 62914560 "$ZURL" >$ZREESTR ||
|
curl -k --fail --max-time 300 --max-filesize 62914560 "$ZURL" >"$ZREESTR" ||
|
||||||
{
|
{
|
||||||
echo reestr list download failed
|
echo reestr list download failed
|
||||||
exit 2
|
exit 2
|
||||||
@ -20,8 +20,8 @@ if test $dlsize -lt 204800; then
|
|||||||
echo list file is too small. can be bad.
|
echo list file is too small. can be bad.
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
(cut -s -f2 -d';' $ZREESTR | grep -a . | sed -re 's/^\*\.(.+)$/\1/' | awk '{ print tolower($0) }' ; cat $ZUSERLIST ) | sort -u >$ZHOSTLIST
|
(cut -s -f2 -d';' "$ZREESTR" | grep -a . | sed -re 's/^\*\.(.+)$/\1/' | awk '{ print tolower($0) }' ; cat "$ZUSERLIST" ) | sort -u >"$ZHOSTLIST"
|
||||||
rm -f $ZREESTR
|
rm -f "$ZREESTR"
|
||||||
|
|
||||||
# force tpws to reload if its running
|
# force tpws to reload if its running
|
||||||
killall -HUP tpws 2>/dev/null
|
killall -HUP tpws 2>/dev/null
|
||||||
|
@ -14,7 +14,7 @@ ZURL=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv
|
|||||||
|
|
||||||
getuser
|
getuser
|
||||||
|
|
||||||
curl -k --fail --max-time 300 --max-filesize 62914560 "$ZURL" >$ZREESTR ||
|
curl -k --fail --max-time 300 --max-filesize 62914560 "$ZURL" >"$ZREESTR" ||
|
||||||
{
|
{
|
||||||
echo reestr list download failed
|
echo reestr list download failed
|
||||||
exit 2
|
exit 2
|
||||||
@ -27,15 +27,14 @@ fi
|
|||||||
echo preparing dig list ..
|
echo preparing dig list ..
|
||||||
#sed -i 's/\\n/\r\n/g' $ZREESTR
|
#sed -i 's/\\n/\r\n/g' $ZREESTR
|
||||||
#sed -nre 's/^[^;]*;([^;|\\]{4,250})\;.*$/\1/p' $ZREESTR | sort | uniq >$ZDIG
|
#sed -nre 's/^[^;]*;([^;|\\]{4,250})\;.*$/\1/p' $ZREESTR | sort | uniq >$ZDIG
|
||||||
cut -f2 -d';' $ZREESTR | grep -avE '^$|\*|:' >$ZDIG
|
cut -f2 -d ';' "$ZREESTR" | grep -avE '^$|\*|:' >"$ZDIG"
|
||||||
rm -f $ZREESTR
|
rm -f "$ZREESTR"
|
||||||
echo digging started ...
|
echo digging started ...
|
||||||
digger $ZDIG | cut_local >$ZIPLISTTMP || {
|
digger "$ZDIG" | cut_local >"$ZIPLISTTMP" || {
|
||||||
rm -f $ZDIG
|
rm -f "$ZDIG"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
rm -f $ZDIG $ZIPLIST
|
rm -f "$ZDIG"
|
||||||
sort -u $ZIPLISTTMP >$ZIPLIST
|
sort -u "$ZIPLISTTMP" | zz "$ZIPLIST"
|
||||||
rm -f $ZIPLISTTMP
|
rm -f "$ZIPLISTTMP"
|
||||||
"$EXEDIR/create_ipset.sh"
|
"$EXEDIR/create_ipset.sh"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user