Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Приветствую Хабравчане!
Долгое время использовал схему Настройка BGP для обхода блокировок, версия 2, «не думать». Но были моменты не устраивающие меня.
За основу используемого мною скрипта был использован скрипт@Furriest, за что ему огромное человеческое спасибо!
Настройку VPS/VPN можно смело брать из материнской темы, здесь выложу только скрипт.
"Почему не внесу нужные мне изменения на роутере?" - спросите вы. "Потому что у меня их на текущий момент четыре и, править на каждом лень". А лень как вы знаете - двигатель прогресса.
#!/bin/bash
pushd list
wget -N https://antifilter.download/list/subnet.lst
wget -N https://antifilter.download/list/ip.lst
#wget -N https://antifilter.download/list/ipresolve.lst
wget -N https://community.antifilter.download/list/community.lst
wget -N https://raw.githubusercontent.com/SecOps-Institute/FacebookIPLists/master/facebook_ipv4_cidr_blocks.lst
popd
old=$(cat md5.txt);
new=$(cat list/*.lst | md5sum | head -c 32);
if [ "$old" != "$new" ]
then
#main
cat list/ip.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' > /tmp/ip.txt
cat list/subnet.lst | sed 's/.*/route & reject;/' >> /tmp/ip.txt
cat list/facebook_ipv4_cidr_blocks.lst | sed 's/.*/route & reject;/' >> /tmp/ip.txt
# cat list/ipresolve.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' >> /tmp/ip.txt
#community
cat list/community.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' >> /tmp/ip.txt
#their
cat list/their.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' >> /tmp/ip.txt
#exclude
for a in `cat exclude.txt`; do sed -i -e "/$a/d" /tmp/ip.txt; done
#unique
sort -u /tmp/ip.txt > /etc/bird/ip.txt
/usr/sbin/birdc configure;
logger "RKN list reconfigured";
echo $new > md5.txt;
fi
19, 25 и 28 строки: В списке ip.lst мы имеем IP адреса без указания префикса. Такой формат bird не кушает. Аналогично если будем использовать свой список. Проверяем есть ли префикс, если нету - дописываем /32
31 строка: удаляем из финального скрипта адреса, которые мы не хотим получать. Я использую для удаления 1.1.1.1 из community.lst, можно было сделать строкой по проще, но на будущее если понадобится исключить больше адресов/сетей сделал один раз. Просто дописываем их построчно в файл exclude.txt
Поиск производится по куску текста. Если вписать "1.1" в exclude.txt, то удалится и 1.1.1.1 и 1.179.201.18/32 и т.к. далее. Вписав 192.168. у нас удалится 192.168.0.0/16 и далее /17, /18, /19 и остальные префиксы вплоть до /32 если таковые будут в листах.
33 строка: удаляет дубли и копирует финальный список в каталог bird. Т.к. у нас используется несколько списков, вероятность получения одинаковых префиксов высока.
Далее мы создаем недостающие файлы/ссылки:
Создаем файл исключения и пишем туда 1.1.1.1 Или ничего не пишем.
nano /root/blacklist/exclude.txt
Создаем файл своих хотелок и пишем туда например 10.0.0.0./8
nano /root/blacklist/their.txt
Создаем символьную ссылку в каталог list. Она также будет участвовать в подсчете хэша для определения есть ли изменения в файлах.
ln -s /root/blacklist/their.txt /root/blacklist/list/their.lst
Ну и не забываем про cron
crontab -e
*/20 * * * * cd /root/blacklist && ./chklist