diff --git a/docs/readme.txt b/docs/readme.txt index 04a3d0b..647560b 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -161,6 +161,9 @@ get_reestr.sh может использовать мультипоточный 5) ipset/get_config.sh. этот скрипт вызывает то, что прописано в переменной GETLIST из файла config Если переменная не определена, то никаких действий не выполняется. +Листы zapret-ip.txt и zapret-ipban.txt сохраняются в сжатом виде в файлы .gz. +Это позволяет снизить их размер во много раз и сэкономить место на роутере. + На роутерах не рекомендуется вызывать эти скрипты чаще раза за 2 суток, поскольку сохранение идет либо во внутреннюю флэш память роутера, либо в случае extroot - на флэшку. В обоих случаях слишком частая запись может убить флэшку, но если это произойдет с внутренней @@ -270,7 +273,7 @@ TPWS_OPT_HTTPS="--split-pos=3" 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/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/get_config.sh @@ -493,7 +496,7 @@ binaries/<ваша архитектура>/{tpws,nfqws,ip2net,mdig} Если вы закачаете zapret не в /opt/zapret, а, например, в /tmp, и запустите install_easy.sh оттуда, то инсталятор сам скопирует только необходимый минимум в /opt/zapret. - + Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров". Другие прошивки diff --git a/install_easy.sh b/install_easy.sh index 29778c7..bfd9c4b 100755 --- a/install_easy.sh +++ b/install_easy.sh @@ -348,8 +348,9 @@ download_list() [ -x "$GET_LIST" ] && { echo \* downloading blocked ip/host list ... - 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" + # can be txt or txt.gz + 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" || { echo could not download ip list exitp 25 diff --git a/ipset/create_ipset.sh b/ipset/create_ipset.sh index 1f653e9..22fe911 100755 --- a/ipset/create_ipset.sh +++ b/ipset/create_ipset.sh @@ -8,6 +8,7 @@ IP2NET=$EXEDIR/../ip2net/ip2net . "$EXEDIR/def.sh" + create_ipset() { local IPSTYPE @@ -19,20 +20,20 @@ fi ipset flush $2 2>/dev/null || ipset create $2 $IPSTYPE $IPSET_OPT for f in "$3" "$4" do - [ -f "$f" ] && { - if [ -x $IP2NET ]; then + zzexist "$f" && { + if [ -x "$IP2NET" ]; then echo Adding to ipset $2 \($IPSTYPE , ip2net\) : $f 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 - $IP2NET <"$f" | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore + zzcat "$f" | "$IP2NET" | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore fi else echo Adding to ipset $2 \($IPSTYPE\) : $f 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 - 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 } @@ -40,5 +41,5 @@ done return 0 } -create_ipset hash:ip $ZIPSET $ZIPLIST $ZIPLIST_USER -create_ipset hash:ip $ZIPSET_IPBAN $ZIPLIST_IPBAN $ZIPLIST_USER_IPBAN +create_ipset hash:ip $ZIPSET "$ZIPLIST" "$ZIPLIST_USER" +create_ipset hash:ip $ZIPSET_IPBAN "$ZIPLIST_IPBAN" "$ZIPLIST_USER_IPBAN" diff --git a/ipset/def.sh b/ipset/def.sh index 7390917..ee1c782 100755 --- a/ipset/def.sh +++ b/ipset/def.sh @@ -14,12 +14,29 @@ ZUSERLIST_IPBAN=$EXEDIR/zapret-hosts-user-ipban.txt MDIG=$EXEDIR/../mdig/mdig 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() { - if [ -x $MDIG ]; then - $MDIG --family=4 --threads=$MDIG_THREADS <$1 + if [ -x "$MDIG" ]; then + zzcat "$1" | "$MDIG" --family=4 --threads=$MDIG_THREADS 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 } @@ -30,12 +47,14 @@ cut_local() grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$' } + getuser() { - [ -f $ZUSERLIST ] && { - digger $ZUSERLIST | cut_local | sort -u >$ZIPLIST_USER + [ -f "$ZUSERLIST" ] && { + digger "$ZUSERLIST" | cut_local | sort -u > "$ZIPLIST_USER" } - [ -f $ZUSERLIST_IPBAN ] && { - digger $ZUSERLIST_IPBAN | cut_local | sort -u >$ZIPLIST_USER_IPBAN + [ -f "$ZUSERLIST_IPBAN" ] && { + digger "$ZUSERLIST_IPBAN" | cut_local | sort -u > "$ZIPLIST_USER_IPBAN" } } + diff --git a/ipset/get_antizapret.sh b/ipset/get_antizapret.sh index db4e1ed..6bc078d 100755 --- a/ipset/get_antizapret.sh +++ b/ipset/get_antizapret.sh @@ -12,13 +12,14 @@ ZIPLISTTMP=$TMPDIR/zapret-ip.txt 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 ' ') if test $dlsize -lt 204800; then echo list file is too small. can be bad. exit 2 fi - mv -f $ZIPLISTTMP $ZIPLIST + cat "$ZIPLISTTMP" | zz "$ZIPLIST" + rm -f "$ZIPLISTTMP" "$ZIPLIST" "$EXEDIR/create_ipset.sh" } diff --git a/ipset/get_combined.sh b/ipset/get_combined.sh index 9a52768..52c26db 100755 --- a/ipset/get_combined.sh +++ b/ipset/get_combined.sh @@ -11,11 +11,12 @@ ZREESTR=$TMPDIR/reestr.txt ZURL_REESTR=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv ZAZ=$TMPDIR/zapret-ip.txt ZURL_AZ=http://antizapret.prostovpn.org/iplist.txt +ZIPLIST_IPBAN_TMP=/tmp/zapret-ipban.txt getuser # 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 exit 2 @@ -27,24 +28,30 @@ if test $dlsize -lt 1048576; then fi #sed -i 's/\\n/\r\n/g' $ZREESTR # 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]+)?' | 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 exit 2 } dlsize=$(wc -c "$ZAZ" | cut -f 1 -d ' ') if test $dlsize -lt 204800; then + rm -f "$ZIPLIST_IPBAN_TMP" echo antizapret list file is too small. can be bad. exit 2 fi # do not include hosts banned by ip -grep -xvFf $ZIPLIST_IPBAN $ZAZ >$ZIPLIST -rm -f $ZAZ +grep -xvFf "$ZIPLIST_IPBAN_TMP" "$ZAZ" | zz "$ZIPLIST" +rm -f "$ZAZ" + +cat "$ZIPLIST_IPBAN_TMP" | zz "$ZIPLIST_IPBAN" +rm -f "$ZIPLIST_IPBAN_TMP" + "$EXEDIR/create_ipset.sh" diff --git a/ipset/get_hostlist.sh b/ipset/get_hostlist.sh index b4172b4..8f3fa61 100755 --- a/ipset/get_hostlist.sh +++ b/ipset/get_hostlist.sh @@ -10,7 +10,7 @@ ZREESTR=$TMPDIR/zapret.txt #ZURL=https://reestr.rublacklist.net/api/current 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 exit 2 @@ -20,8 +20,8 @@ if test $dlsize -lt 204800; then echo list file is too small. can be bad. exit 2 fi -(cut -s -f2 -d';' $ZREESTR | grep -a . | sed -re 's/^\*\.(.+)$/\1/' | awk '{ print tolower($0) }' ; cat $ZUSERLIST ) | sort -u >$ZHOSTLIST -rm -f $ZREESTR +(cut -s -f2 -d';' "$ZREESTR" | grep -a . | sed -re 's/^\*\.(.+)$/\1/' | awk '{ print tolower($0) }' ; cat "$ZUSERLIST" ) | sort -u >"$ZHOSTLIST" +rm -f "$ZREESTR" # force tpws to reload if its running killall -HUP tpws 2>/dev/null diff --git a/ipset/get_reestr.sh b/ipset/get_reestr.sh index 56fd173..9cf1403 100755 --- a/ipset/get_reestr.sh +++ b/ipset/get_reestr.sh @@ -14,7 +14,7 @@ ZURL=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv 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 exit 2 @@ -27,15 +27,14 @@ fi echo preparing dig list .. #sed -i 's/\\n/\r\n/g' $ZREESTR #sed -nre 's/^[^;]*;([^;|\\]{4,250})\;.*$/\1/p' $ZREESTR | sort | uniq >$ZDIG -cut -f2 -d';' $ZREESTR | grep -avE '^$|\*|:' >$ZDIG -rm -f $ZREESTR +cut -f2 -d ';' "$ZREESTR" | grep -avE '^$|\*|:' >"$ZDIG" +rm -f "$ZREESTR" echo digging started ... -digger $ZDIG | cut_local >$ZIPLISTTMP || { - rm -f $ZDIG +digger "$ZDIG" | cut_local >"$ZIPLISTTMP" || { + rm -f "$ZDIG" exit 1 } -rm -f $ZDIG $ZIPLIST -sort -u $ZIPLISTTMP >$ZIPLIST -rm -f $ZIPLISTTMP +rm -f "$ZDIG" +sort -u "$ZIPLISTTMP" | zz "$ZIPLIST" +rm -f "$ZIPLISTTMP" "$EXEDIR/create_ipset.sh" -