понедельник, 30 декабря 2013 г.

Бэкап системы в "облако".

Небольшой пост о скрипте, который создает бекап системы и скидывает в яндекс диск. Да, знаю, что подобных мануалов куча. Но мне не хочется потом искать в интернете мануал. А тут свой, под рукой всегда =).

Для начала устанавливаем сам яндекс диск. Ничего сложного. Все подробно описано по ссылке http://help.yandex.ru/disk/cli-clients.xml

Теперь скрипт.
 #!/bin/sh  
 back=backup-`date '+%d-%B-%Y'`  
 yadisk=/media/yandex.disk/backup  
 cd /tmp  
 tar -cvpf ./fullbackup.tar --exclude=/proc --exclude=/dev --exclude=/media --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/tmp --exclude=/usr/src --exclude=/var/spool/squidcache /  
 cd $yadisk  
 7z a $back.7z -mx3 /tmp/fullbackup.tar -v200M  
 for i in `find * | grep -v "$back"`; do rm $i; done  
 rm -f /tmp/fullbackup.tar  


Где:

/media/yandex.disk/backup — каталог примонтированого яндекс диска.

backup-`date '+%d-%B-%Y'` — шаблон имени нашего бэкапа.

--exclude — каталоги, которые исключаем из архивирования. 

-mx3 — степень сжатия. Можно поставить mx7, уровень сжатия высокий, но и выполняться будет дольше. Мне достаточно и 3 уровня.

-v200M — разделяем на архивы по 200Mb (мне так удобней)

for i in `find * | grep -v "$back"`; do echo $i; done — удаляет предыдущий бэкап (чтоб не занимало место, на яндекс диск не так много и места, а каждый бэкап у меня занимает по 3 Gb =) ). Кому не нужно просто удаляем строку.

Не забывает делать его исполняемым. 
Сперва бэкапим все tar'ом (чтоб сохранились права доступа файлов), а потом сжимаем и делим все 7z. Все это закинул в крон, чтоб в раз в неделю запускался.

суббота, 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.