суббота, 31 августа 2013 г.

Парсер списка запрещеных сайтов Роскомнадзора. Update от 15.04.2018. Теперь это все на ipset


Надоела  уже порядком эта заглушка =).

Последовательность действий такая:
1. Настраиваем OpenVpn подключение к какому нибудь буржуйскуму серверу.
2. Получаем список заблокированных ресурсов.
3. Парсим его, извлекая  нужные нам IP.
4. ipset+iptables+iproute2.

Первый пункт описывать тут не стану. С этим нет проблем. Остальное решается с помощью вот такого скрипта
#!/bin/bash

file=/etc/openvpn/rkz.list
tmp=/tmp/black_ip.tmp
gw=tun3
IPSET_TB=rkz
MARK_ID_DEC=4
MARK_ID_HEX=`printf 0x'%x\n' $MARK_ID_DEC`

if [ -n "`ip rule | grep "lookup $MARK_ID_DEC"`" ]; then
    ip rule del from all fwmark $MARK_ID_HEX lookup $MARK_ID_DEC
fi

if [ -n "`ip route show table $MARK_ID_DEC`" ]; then
    ip route del default dev $gw table $MARK_ID_DEC
fi


while [ -n "`iptables-save -t mangle | grep $MARK_ID_HEX | grep PREROUTING `" ]; do iptables -t mangle -D PREROUTING -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX; done
while [ -n "`iptables-save -t mangle | grep $MARK_ID_HEX | grep OUTPUT`" ]; do iptables -t mangle -D OUTPUT -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX; done
if [ -n "`ipset -L rkz 2> /dev/null`" ]; then ipset -X rkz; fi

wget -q https://www.assembla.com/code/z-i/git/nodes/master/dump.csv?_format=raw -O $tmp
grep -oE '\b[0-9]{1,3}(\.[0-9]{1,3}){3}\b' $tmp |sort -u   > $file

ipset -N rkz iphash hashsize 999999 maxelem 999999
while read line
do
ipset -A rkz $line
done < $file

iptables -t mangle -A PREROUTING -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX
iptables -t mangle -A OUTPUT -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX

ip rule add from all fwmark $MARK_ID_HEX lookup $MARK_ID_DEC
ip route add default dev $gw table $MARK_ID_DEC


Итак. Список получаем с https://www.assembla.com/code/z-i/git/nodes/master/dump.csv?_format=raw. Парсим его, вытаскивая IP. И прописываем маршруты. 

Не забывает правильно настроить SNAT в POSTROUTING. 
 
Список достаточно быстро обновляется. Можно кинуть скрипт в крон.

UPD. В конфиг OpenVpn добавим

 script-security 2  
 up /путь/к_скрипту  

и предыдущий скрипт будет запускаться сам, как только появится подключение к OpenVpn.

2 комментария:

  1. А почему не весь трафик завернул?

    ОтветитьУдалить
  2. А зачем?? Впн во первых не дает 25-30мбит, как по тарифу, во вторых торренты. Ну и видео тяжело смотреть.

    ОтветитьУдалить