#!/bin/sh # # Разбирает proxy.pac с https://antizapret.prostovpn.org, # заполняет ipset блокированных IP и создаёт список # блокированных доменов для dnsmasq. # # Bерсия 4 (2018-12-10) domains=/tmp/domains.$$ dnsmasqcfg=/tmp/antizapret.dnsmasq dnsmasqtmp=$dnsmasqcfg.$$ ipsetip=tor-ip escape(){ rm -f $domains $dnsmasqtmp } trap escape EXIT touch $dnsmasqcfg wget -qO- "https://antizapret.prostovpn.org/proxy.pac" >$domains || exit [ "$(stat -c%s $domains)" -gt 500000 ] || exit modprobe ip_set_hash_ip modprobe ip_set_hash_net modprobe xt_set ipset create tor hash:ip 2>/dev/null ipset create $ipsetip hash:net 2>/dev/null ipset create $ipsetip-tmp hash:net 2>/dev/null # Список доменов для dnsmasq { echo "ipset=/onion/tor" for str in `sed -n '/^d_ad.*"/,/^d_ipaddr/p' $domains`; do echo $str; done | sed '/^[=\\]$/d;/^$/d;/^"/d' | sed ' s/@$/.com/; s/#$/.ru/; s/\$$/.net/; s/%$/.biz/; s/\^$/.xyz/; s/&$/.info/; s/\*$/.online/; s/[\\(]$/.org/; s/)$/.win/; s/+$/.top/; s/=$/.space/; s/\[$/.club/; s/\]$/.me/; s/|$/.site/; s/{$/.pw/; s/}$/.co/; s/:$/.ua/; s/;$/.pk/; s/?$/.website/; s/,$/.pro/; s/`$/.pt/; s/~$/.host/; s/<$/.tv/; s/>$/.mobi/; s/_$/.click/; ' | while read d; do echo "ipset=/$d/tor"; done echo "ipset=/check.torproject.org/tor" } >$dnsmasqtmp [ "$(stat -c%s $dnsmasqtmp)" -gt 500000 ] || exit mv -f $dnsmasqtmp $dnsmasqcfg # Список IP адресов { echo "flush $ipsetip-tmp" for hex in `sed -n '/^d_ipaddr.*"/,/match/p' $domains | sed '1d;$d' | while read -n8 h; do [ $h ] || continue; echo $h; done` do ip=0x$hex # IP адрес в шестнадцатиричном формате mask=1 # Битовая маска cidr=32 # Число значащих бит маски сети (CIDR) while [ $(($ip & $mask)) -eq 0 ] # Продолжаем пока подсеть do let cidr-- mask=$(($mask<<1)) done echo add $ipsetip-tmp $(($ip>>24&255)).$(($ip>>16&255)).$(($ip>>8&255)).$(($ip&255))/$cidr done sed -n '/\["/,/;/p' $domains | sed 's/[,"[;]//g;s/]/\n/g' | while read ip mask do [ "$ip" ] || continue echo "add $ipsetip-tmp $ip/$mask" done echo "swap $ipsetip-tmp $ipsetip flush $ipsetip-tmp" } | ipset restore -exist restart_dhcpd restart_firewall