Задача: блокировать ресурсы по IP по требованию соответствующих органов.
Решение: Mikrotik+Hotspot+Script+BGP Blackhole
Общая схема работы системы.
Решение: Mikrotik+Hotspot+Script+BGP Blackhole
Общая схема работы системы.
·
Администратор
заводит в модуле HOTSPOT/WALEED GARDEN IP LIST, URL которые необходимо
заблокировать
·
Маршрутизатор
делает DNS Lookup для URL внесенных в базу данных и помещает IP адреса в базу
WALLED GARDEN.
·
На
маршрутизаторе по расписанию работает скрипт проходящий по базе данных IP, а
также по записям статических маршрутов для этих адресов и ищет их соответствие.
Если для какого-либо IP не находится запись в RIB, эта запись добавляется.
Соответственно и наоборот, если есть запись в RIB для конкретного IP, но его
самого нет в базе WALLED GARDEN, то удаляется маршрут, чтобы он перестал
анонсироваться BGP Peer-ам.
·
Время
запуска скрипта – каждые 5 минут или меньше.
Рисунок 1. Логика работы аппликации.
Routerboard OS стоит в виде VM, поверх ESXi. Он выполняет такие функции как:
·
Ведение
листов Walled Garden List модуля HOTSPOT
·
Обеспечение
динамического преобразования URL в IP (DNS LOOKUP)
·
Ведение
базы данных IP адресов для заданных URL
·
Динамическое
создание статических маршрутов на каждый IP адрес полученный в процессе DNS
LOOKUP с префиксом /32, в локальной базе RIB, а также установление дополнительных
параметров на эти маршруты, например такие как BGP Community=XXXX:666,
Type=Blackhole.
·
Рассылка
BGP UPDATE всем iBGP Peer для статических маршрутов
·
Обеспечение
актуальности базы данных IP адресов и соответствующих им статических маршрутов
для перераспределения.
1. Предварительные
требования:
·
На
всех Border Router необходимо настроить фильтрацию для приема только префиксов
/32 от BGP PEER X.X.X.X c установленным BGP Community XXXX:666
·
На
всех Border Router необходимо настроить фильтрацию для исходящих маршрутов в
сторону BGP PEER X.X.X.X
·
Настроить
PBR с директивой NEXT-HOP для полученных префиксов в адрес 172.16.31.254 (адрес
BLACKHOLE)
·
Настроить
маршрут в NULL для адреса NEXT-HOP
2.
CHANGE
IN CONFIGURATION
#################################################################
--------------------------------------------------------------------FILTER
SECTION-------------
ip route
172.16.31.254 255.255.255.255 Null0 name ROUTE-FOR-BLACKHOLING
ip
community-list standard BLACKHOLE permit XXXX:666
ip prefix-list
MIKROTIK-IN description ALLOW-PREFIX/32
ip prefix-list
MIKROTIK-IN seq 5 permit 0.0.0.0/0 ge 32
ip prefix-list
MIKROTIK-OUT description NO-ANNOUNCE-ANY-ROUTES
ip prefix-list
MIKROTIK-OUT seq 5 deny 0.0.0.0/0 le 32
route-map
MIKROTIK-IN permit 10
match ip address prefix-list MIKROTIK-IN
match community BLACKHOLE
set ip next-hop 172.16.31.254
set community no-export additive
------------------------FILTER
SECTION----------------
router bgp XXXX
neighbor X.X.X.X remote-as XZXZ
neighbor X.X.X.X description
MIKROTIK-BLACKHOLE
neighbor X.X.X.X password xxxxxxxxxxx
address-family ipv4
neighbor X.X.X.X activate
neighbor X.X.X.X soft-reconfiguration
inbound
neighbor X.X.X.X prefix-list MIKROTIK-IN in
neighbor X.X.X.X prefix-list MIKROTIK-OUT
out
neighbor X.X.X.X route-map MIKROTIK-IN in
neighbor X.X.X.X maximum-prefix 1000
--------------------------------------BGP
SECTION-----------------
#################################################################
------------------------------SCRIPT
SOURCE-----------------
{:log info
"START";
:foreach i
in=[/ip hotspot walled-garden ip find] do={
:local dsthost [/ip hotspot walled-garden ip
get $i dst-host];
:log info
"==================================="
:log info $dsthost;
#*******************************************************************************************
:log info "================ ADDING
==================="
:foreach i2 in=[/ip hotspot walled-garden
find comment="$dsthost"] do={
:local dstip [/ip hotspot walled-garden get
$i2 dst-address];
:log info "--------"
:log info $dstip;
if ([/ip route find dst-address="$dstip/32"]="")
do={
:log info "added entry: $dstip/32
DOMAIN $dsthost"
/ip route add dst-address=$dstip
comment="$dsthost_BLACKHOLE" type=blackhole bgp-communities=XXXX:666
;
}
}
#*******************************************************************************************
:log info "================ REMOVING
==================="
:foreach i2 in=[/ip route find
comment="$dsthost_BLACKHOLE"] do={
:local routeip2 [/ip route get $i2
dst-address];
:local routeip [:pick $routeip2 0 [:find
$routeip2 "/32"]];
:log info "--------"
:log info $routeip;
if ([/ip hotspot walled-garden find
dst-address="$routeip"]="") do={
:log info "deleted entry:
$routeip2 DOMAIN $dsthost"
/ip route remove [/ip route find
dst-address="$routeip2"];
}
}
#*******************************************************************************************
}
#*******************************************************************************************
:foreach i
in=[/ip route find bgp-communities="XXXX:666"] do={
:local dsthost2 [/ip route get $i comment];
:local dsthost [:pick $dsthost2 0 [:find
$dsthost2 "_BLACKHOLE"]];
:log info
"==================================="
:log info $dsthost;
:log info "================ REMOVING
ROUTES FOR DELETED HOSTS ==================="
if ([/ip hotspot walled-garden ip find
dst-host="$dsthost"]="") do={
:log info "deleted all entries for
DOMAIN $dsthost"
/ip route remove [/ip route find
comment="$dsthost2"];
}
}
}
---------------------------------------SCRIPT
SOURCE-----------------
Комментариев нет:
Отправить комментарий