From b15afded1aa3d84cc9f59e90a67a1efa9395ddb7 Mon Sep 17 00:00:00 2001 From: bolvan Date: Thu, 11 May 2017 18:36:52 +0300 Subject: [PATCH] get_combined.sh http-https separation --- ipset/def.sh | 10 ++++++++- ipset/get_antizapret.sh | 11 ++------- ipset/get_combined.sh | 49 +++++++++++++++++++++-------------------- ipset/get_reestr.sh | 6 ++--- readme.txt | 15 ++++++++----- 5 files changed, 48 insertions(+), 43 deletions(-) diff --git a/ipset/def.sh b/ipset/def.sh index f771501..0ff5fae 100755 --- a/ipset/def.sh +++ b/ipset/def.sh @@ -1,3 +1,4 @@ +TMPDIR=/tmp ZIPSET=zapret ZIPLIST=$EXEDIR/zapret-ip.txt ZIPLIST_EXCLUDE=$EXEDIR/zapret-ip-exclude.txt @@ -17,4 +18,11 @@ getuser() [ -f $ZUSERLIST_IPBAN ] && { dig A +short +time=8 +tries=2 -f $ZUSERLIST_IPBAN | grep -E '^[^;].*[^.]$' | grep -vE '^192\.168\.[0-9]+\.[0-9]+$' | grep -vE '^127\.[0-9]+\.[0-9]+\.[0-9]+$' | grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$' | sort -u >$ZIPLIST_USER_IPBAN } -} \ No newline at end of file +} + +cut_local() +{ + grep -vE '^192\.168\.[0-9]+\.[0-9]+$' | + grep -vE '^127\.[0-9]+\.[0-9]+\.[0-9]+$' | + grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$' +} diff --git a/ipset/get_antizapret.sh b/ipset/get_antizapret.sh index cbede7b..a41c36b 100755 --- a/ipset/get_antizapret.sh +++ b/ipset/get_antizapret.sh @@ -8,18 +8,11 @@ EXEDIR=$(dirname $SCRIPT) #ZURL=https://github.com/zapret-info/z-i/raw/master/dump.csv ZURL=http://antizapret.prostovpn.org/iplist.txt -ZIPLISTTMP=/tmp/zapret-ip.txt +ZIPLISTTMP=$TMPDIR/zapret-ip.txt getuser -#curl --fail --max-time 300 --max-filesize 33554432 -k -L "$ZURL" \ -# | sed -nre "s/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/\1\n/gp" \ -# | sed -nre "s/^[^0-9]*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*$/\1/p" \ -# | grep -vE '^192\.168\.[0-9]+\.[0-9]+$' | grep -vE '^127\.[0-9]+\.[0-9]+\.[0-9]+$' | grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$' \ -# | sort -u \ -curl --fail --max-time 300 --max-filesize 33554432 -k -L "$ZURL" \ - | grep -vE '^192\.168\.[0-9]+\.[0-9]+$' | grep -vE '^127\.[0-9]+\.[0-9]+\.[0-9]+$' | grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$' \ - >$ZIPLISTTMP && +curl --fail --max-time 120 --max-filesize 10485760 -k -L "$ZURL" | cut_local >$ZIPLISTTMP && { dlsize=$(wc -c "$ZIPLISTTMP" | cut -f 1 -d ' ') if test $dlsize -lt 204800; then diff --git a/ipset/get_combined.sh b/ipset/get_combined.sh index 158cd82..35c84da 100755 --- a/ipset/get_combined.sh +++ b/ipset/get_combined.sh @@ -6,36 +6,37 @@ EXEDIR=$(dirname $SCRIPT) . "$EXEDIR/def.sh" -ZREESTR=/tmp/reestr.txt -ZANTIZAPRET=/tmp/antizapret.txt -ZURL_REESTR=http://reestr.rublacklist.net/api/ips -ZURL_ANTIZAPRET=http://antizapret.prostovpn.org/iplist.txt +ZREESTR=$TMPDIR/reestr.txt +ZURL_REESTR=http://reestr.rublacklist.net/api/current +ZAZ=$TMPDIR/zapret-ip.txt +ZURL_AZ=http://antizapret.prostovpn.org/iplist.txt getuser -curl --fail --max-time 300 --max-filesize 41943040 "$ZURL_REESTR" | - grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | - grep -vE '^192\.168\.[0-9]+\.[0-9]+$' | - grep -vE '^127\.[0-9]+\.[0-9]+\.[0-9]+$' | - grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$' | - sort -u >$ZREESTR +# assume all https banned by ip +curl --fail --max-time 300 --max-filesize 41943040 "$ZURL_REESTR" -o $ZREESTR dlsize=$(wc -c "$ZREESTR" | cut -f 1 -d ' ') -if test $dlsize -lt 10240; then +if test $dlsize -lt 1048576; then echo reestr ip list is too small. can be bad. exit 2 fi -curl --fail --max-time 300 --max-filesize 33554432 -k -L "$ZURL_ANTIZAPRET" | - grep -vE '^192\.168\.[0-9]+\.[0-9]+$' | - grep -vE '^127\.[0-9]+\.[0-9]+\.[0-9]+$' | - grep -vE '^10\.[0-9]+\.[0-9]+\.[0-9]+$' >$ZANTIZAPRET -dlsize=$(wc -c "$ZANTIZAPRET" | cut -f 1 -d ' ') -if test $dlsize -lt 10240; then - echo antizapret ip list is too small. can be bad. - exit 2 -fi +sed -i 's/\\n/\r\n/g' $ZREESTR +grep "https://" $ZREESTR | + grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | + cut_local | + sort -u >$ZIPLIST_IPBAN -grep -vFf $ZREESTR $ZANTIZAPRET >$ZIPLIST -mv -f $ZREESTR $ZIPLIST_IPBAN -rm -f $ZANTIZAPRET +rm -f $ZREESTR -"$EXEDIR/create_ipset.sh" +curl --fail --max-time 120 --max-filesize 10485760 -k -L "$ZURL_AZ" | cut_local >$ZAZ && +{ + dlsize=$(wc -c "$ZAZ" | cut -f 1 -d ' ') + if test $dlsize -lt 204800; then + echo antizapret list file is too small. can be bad. + exit 2 + fi + # do not include hosts banned by ip + grep -vFf $ZIPLIST_IPBAN $ZAZ >$ZIPLIST + rm -f $ZAZ + "$EXEDIR/create_ipset.sh" +} diff --git a/ipset/get_reestr.sh b/ipset/get_reestr.sh index ecc8e95..b93c7b5 100755 --- a/ipset/get_reestr.sh +++ b/ipset/get_reestr.sh @@ -6,9 +6,9 @@ EXEDIR=$(dirname $SCRIPT) . "$EXEDIR/def.sh" -ZREESTR=/tmp/zapret.txt -ZDIG=/tmp/zapret-dig.txt -ZIPLISTTMP=/tmp/zapret-ip.txt +ZREESTR=$TMPDIR/zapret.txt +ZDIG=$TMPDIR/zapret-dig.txt +ZIPLISTTMP=$TMPDIR/zapret-ip.txt ZURL=http://reestr.rublacklist.net/api/current getuser diff --git a/readme.txt b/readme.txt index 0613076..8e2252a 100644 --- a/readme.txt +++ b/readme.txt @@ -126,9 +126,9 @@ tpws - это transparent proxy. Провайдеры ---------- -mns.ru : нужна замена window size на 3. mns.ru убирает заблокированные домены из выдачи своих DNS серверов. меняем на сторонние. аплинк westcall банит некоторые сайты по IP адресу, закономерность не ясна. +mns.ru : нужна замена window size на 3. mns.ru убирает заблокированные домены из выдачи своих DNS серверов. меняем на сторонние. аплинк westcall банит по IP адреса из списка РКН, где присутствует https -at-home.ru : при дефолтном подключении все блокировалось по IP. после заказа внешнего IP (static NAT) по IP блокируются немногие сайты. закономерность не ясна. +at-home.ru : при дефолтном подключении все блокировалось по IP. после заказа внешнего IP (static NAT) банятся по IP https адреса Для обхода DPI работает замена windows size на 3, но была замечена нестабильность и подвисания. Лучше всего работает сплит запроса около метода в течение всей http сессии. В https подменяется сертификат. Если у вас все блокируется по IP, то нет никакого способа, кроме как проксирование порта 80 по аналогии с 443. @@ -184,13 +184,16 @@ tiera : Требуется сплит http запросов в течение в от IP адреса. Поэтому скрипт ресолвит все сам, хотя это и занимает много времени. Дополнительное требование - объем памяти в /tmp для сохранения туда скачанного файла, размер которого несколько Мб и продолжает расти. На роутерах openwrt /tmp представляет собой tmpfs , то есть ramdisk. -В случае роутера с 32 мб памяти ее может не хватить, и будут проблемы. В этом случае используйте +В случае роутера с 32 мб памяти ее не хватит, и будут проблемы. В этом случае используйте следующий скрипт. -3) ipset/get_anizapret.sh. быстро и без нагрузки на роутер получает лист с https://github.com/zapret-info . +3) ipset/get_anizapret.sh. быстро и без нагрузки на роутер получает лист с antizapret.prostovpn.org. + +4) ipset/get_combined.sh. для провайдеров, которые блокируют по IP https, а остальное по DPI. IP https заносится в ipset ipban, остальные в ipset zapret. +Поскольку скачивается большой список РКН, требования к месту в /tmp аналоичны 2) Все варианты рассмотренных скриптов автоматически создают и заполняют ipset. -Варианты 2 и 3 дополнительно вызывают вариант 1. +Варианты 2-4 дополнительно вызывают вариант 1. На роутерах не рекомендуется вызывать эти скрипты чаще раза за 2 суток, поскольку сохранение идет либо во внутреннюю флэш память роутера, либо в случае extroot - на флэшку. @@ -201,7 +204,7 @@ tiera : Требуется сплит http запросов в течение в Можно внести список доменов в ipset/zapret-hosts-user-ipban.txt. Их ip адреса будут помещены в отдельный ipset "ipban". Он может использоваться для принудительного завертывания всех -соединений на прозрачный proxy "redsocks". +соединений на прозрачный proxy "redsocks" или на VPN. Пример установки на debian 7