Приветствую Хабравчане!
Долгое время использовал схему Настройка 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 /tmp/lstmd5.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 > /tmp/lstmd5.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 если таковые будут в листах. Если будет префикс 1.192.168.0/24 то он удалится тоже. Будьте внимательны с тем что пишете в файл exclude.
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
Upd: По совету 13werwolf13 переместим md5.txt в /tmp/
Комментарии (9)
Abyss777
21.06.2022 15:14У меня всё это работает криво. Например ozon использует cloudflare и на этом уровне банит не Россию. Соответственно даже если сделать исключения для IP озона, он всё равно не откроется. Делать исключения для всего cloudflare едва ли получится, а если получится то отпадёт куча других сайтов которые банят Россию.
Ютуб в этих списках тоже почему-то через VPN идет, финская реклама мне не нравится совсем.
lrrr11
21.06.2022 18:15хотел сделать такое у себя на кинетике, а потом подумал. Это все дело должно будет крутиться на постоянно работающей флешке, и что-то мне оно не нравится с точки зрения долговечности.
Роутер из коробки позволяет загружать батник с таблицей маршрутизации. Собираю этот батник у себя на ПК и загружаю вручную, благо это приходится делать совсем не часто.
SinnerLike Автор
21.06.2022 18:19Этот скриптик для VPS откуда роутер по BGP будет забирать маршруты.
Прочитайте Настройка BGP для обхода блокировок, версия 2, «не думать»
edo1h
22.06.2022 20:43+1Но были моменты не устраивающие меня.
хотелось бы подробностей
SinnerLike Автор
23.06.2022 14:28Ну можно сказать что они написаны в описании под скриптом.
По BGP от сервиса нельзя было получить ip.lst. Пришлось использовать скрипт.
Но в этом списке (если мне не изменяет память(я много списков менял/выбирал)) также были и префиксы больше /32, что заставило править строчку sed для проверки наличия.
Затем решил использовать несколько списков и, обнаружил повторяющиеся префиксы. Пришлось "забирать" уникальные записи.Также не меня одного напрягало присутствие единичек в списке комьюнити. Несогласным советовали добавлять в фильтры, что я и делал по началу, но потом решил централизовать.
Повторюсь; у меня по BGP забирают 4 роутера.Ну а потом я разошёлся... Сети между VPN каналами я туда-же запихнул в список their.
edo1h
23.06.2022 15:12-1Затем решил использовать несколько списков
я просто пришёл к выводу, что проще все нероссийские ip пускать через vpn.
периодическое обновление списков всё больше напоминает сражение с ветряными мельницами.
13werwolf13
осталось придумать что делать с роутером которому такая табличка в память не лезет и можно применять))
по скрипту я бы посоветовал md5.txt хранить в tmpfs соответственно /tmp/md5.txt
SinnerLike Автор
На текущий момент чуть меньше 76к маршрутов.
У 951 микрота свободно 60 Мб ОЗУ на ROS 7.
Про hEX и 4011 я уж молчу.
Про md5 не думал, но можно. Спасибо! :-)
13werwolf13
просто я изначально брал роутер на openwrt чтобы он у меня был чуть больше чем роутером, и теперь или от части служб отказываться или от такого кол-ва маршрутов, всё в память не влазит((