Bgp route leaks. разбираемся с эффектом бабочки в глобальной сети

Tartuga

Бывалый
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
PREMIUM USER

Tartuga

Бывалый
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
PREMIUM USER
Регистрация
7 Фев 2020
Сообщения
525
Реакции
98
Репутация
147
Route leaking и hijacking вызывают неприятности: иногда это задержки, а порой и атаки DOS или MITM.

Чтобы разобраться, как возникает route leak, необходимо понять основные механизмы работы BGP, поскольку утечка вызывается без каких-либо дополнительных манипуляций.

BGP использует номера автономных систем, и по этому критерию выделяют iBGP и eBGP. Разница в том, что iBGP (internal) работает в пределах одной автономной системы, eBGP (external) — между разными. Сейчас нас интересует eBGP: route leak происходит из-за неверных настроек между пирами eBGP.

Предотвращение петель маршрутизации
Для предотвращения петель маршрутизации пиры BGP проверяют атрибут AS PATH. Если в AS PATH есть собственный номер AS — роутер его отбрасывает. Это и есть петля.

Для пиров eBGP действует правило: при получении сообщения UPDATE, в котором хранится информация о маршрутах, следует передать сообщение всем пирам BGP. Для пиров iBGP номер AS не меняется, сообщение UPDATE не передается другим пирам. Это стандартный механизм.

Выбор лучшего пути
BGP использует алгоритм из нескольких шагов (от десяти до тринадцати). В зависимости от вендора и информации о доступности сетей через несколько источников протокол выбирает только один путь, помещает его в локальную таблицу маршрутизации и передает своим пирам.

Есть много способов повлиять на этот выбор. Сейчас мы остановимся на атрибуте AS PATH. Он состоит из последовательности номеров, каждая автономная система добавляет в поле UPDATE сообщения номер своей AS в порядке очереди.

R1#show ip bgp
Network Next Hop Metric LocPrf Weight Path
172.16.0.0/24 30.0.0.1 0 2 3 4 i
*> 10.0.0.2 0 5 4 i
В этом примере роутер выберет второй путь: при прочих равных путь через этот источник короче. Этот процесс можно сравнить с платной дорогой. Представь, что до твоего места назначения две дороги: на одной три пункта оплаты проезда, на второй два, цены на обоих одинаковы.

Отсюда вытекает процесс route leak — эффект бабочки: чистый BGP без фильтров может быть крайне опасен и нарушить оптимальные пути трафика.

Практика
R1 и R4 выступают в качестве пограничных провайдерских роутеров, оба маршрутизатора анонсируют сети 192.168.0.0/24 и 172.16.0.0/24 соответственно из своих AS 1 и 2. У каждого провайдера есть договоренность с магистральными провайдерами (R2 и R3) о том, что R1 и R4 будут перегонять трафик через них, а AS 2 и 3 обеспечат нужную пропускную способность, надежность и защиту.


Мы подключим в эту схему провайдера R5. Теперь мы можем, изменив длину AS path, стать транзитной AS для трафика между AS 1 и 2, пропустить через себя весь трафик и вызвать кучу неприятностей и головной боли для всех провайдеров в цепи.

Мы имеем доступ только до R5. R1 и R4 настроили пиринг до адресов 10.0.0.2 и 20.0.0.2 соответственно.

Классический случай для route leaking. Новая автономная система имеет как минимум два пира с разными AS: route leak подразумевает возможность транзита.

Настраиваем пиринг с провайдерами.

Конфигурация R1 и R4:

R1
Interface eth0/0
Ip add 10.0.0.1 255.255.255.0
No shutdown
Interface eth0/1
Ip add 30.0.0.1 255.255.255.0
No shutdown
router bgp 1
network 192.168.0.0
neighbor 10.0.0.2 remote-as 5
neighbor 30.0.0.2 remote-as 2

R4
Interface eth0/0
Ip add 20.0.0.1 255.255.255.0
No shutdown
Interface eth0/1
Ip add 40.0.0.1 255.255.255.0
No shutdown
router bgp 4
network 172.16.0.0
neighbor 20.0.0.2 remote-as 5
neighbor 40.0.0.2 remote-as 3
Проверяем таблицу маршрутизации от R1 до сетей R4:

R

R1#show ip route 172.16.0.0

Routing entry for 172.16.0.0/24, 1 known subnets

B 172.16.0.0 [20/0] via 30.0.0.1, 00:05:54

R1#show ip bgp 172.16.0.0

BGP routing table entry for 172.16.0.0/24, version 4

Paths: (1 available, best #1, table default)

Not advertised to any peer

Refresh Epoch 1

2 3 4

30.0.0.1 from 30.0.0.1 (50.0.0.1)

Origin IGP, localpref 100, valid, external, best

rx pathid: 0, tx pathid: 0x0

PC_1> trace 172.16.0.10

trace to 172.16.0.10, 8 hops max, press Ctrl+C to stop

1 192.168.0.1 0.394 ms 0.247 ms 0.256 ms

2 30.0.0.1 0.568 ms 0.498 ms 0.395 ms

3 50.0.0.2 0.645 ms 0.722 ms 0.634 ms

4 40.0.0.2 0.917 ms 0.651 ms 0.750 ms

5 172.16.0.10 1.111 ms
Переходим к конфигурации с R5:

R5
R5
Interface eth0/0
Ip add 10.0.0.2 255.255.255.0
No shutdown
router bgp 5
neighbor 10.0.0.1 remote-as 1
Получаем маршруты от провайдера R1 и переходим к конфигурации с провайдером R4.

R5
R5
Interface eth0/1
Ip add 20.0.0.1 255.255.255.0
No shutdown
router bgp 5
neighbor 20.0.0.2 remote-as 4
Аналогичным образом, получив таблицу маршрутов от провайдера R4, R5 запустил свой расчет и посчитал, как быстрее всего добираться до каждой сети в нашем примере.

Маршрутизаторы R1 и R4, которые выступают в нашем примере в качестве провайдеров, тоже получили сообщения UPDATE от маршрутизатора R5. Запустили алгоритм выбора лучшего маршрута в BGP (BGP best path selection) и добавили маршрут R1 — R5 — R4 как лучший в свою локальную таблицу маршрутизации.

Так мы стали транзитным провайдером для трафика из сетей 192.168.0.0 и 172.16.0.0.

Мы видим следующее:

R1#show ip bgp 172.16.0.0

BGP routing table entry for 172.16.0.0/24, version 5

Paths: (2 available, best #1, table default)

Advertised to update-groups:

1

Refresh Epoch 1

5 4

10.0.0.2 from 10.0.0.2 (20.0.0.1)

Origin IGP, localpref 100, valid, external, best

rx pathid: 0, tx pathid: 0x0

Refresh Epoch 1

2 3 4

30.0.0.1 from 30.0.0.1 (50.0.0.1)

Origin IGP, localpref 100, valid, external

rx pathid: 0, tx pathid: 0

R1#show ip route 172.16.0.0

Routing entry for 172.16.0.0/24, 1 known subnets

B 172.16.0.0 [20/0] via 10.0.0.2, 00:01:39

R6#
Теперь мы видим, что трафик идет через AS 5.

На первый взгляд, не произошло ничего необычного, стандартный алгоритм BGP. Но никто не хочет, чтобы его трафик шел через сторонние AS. Всплывает ряд проблем: uplink до провайдеров может не справиться с пропускной способностью, возникнут задержки, трафик может быть перехвачен и зазеркален.

Чтобы предотвратить такие ситуации, провайдеры должны настраивать community или фильтры ip prefix list для контроля за получением и отдачей трафика. Но потери или угон трафика все равно случаются.

BGP hijacking
В случае BGP hijacking нам не обязательно быть транзитной AS, от нас требуется просто анонсировать из своей AS чужие сети.

R7(config)#interface loopback 0
R7(config-if)#ip address 192.168.0.2 255.255.255.0

R7(config)#router bgp 7
R7(config-router)#network 192.168.0.0 mask 255.255.255.0
Теперь ближайшие AS примут наш UPDATE и станут пересылать трафик в нашу автономную систему. Мы получим доступ до всего трафика, адреса назначения которого находятся в сети 192.168.0.0/24.

Сети провайдера защищены от хайджекинга, они просто не принимают маршруты, маска которых больше /25.

Как избежать route leak
Провайдеры стараются обезопасить себя от возможных утечек и хайджекинга с помощью атрибутов community и фильтров RegEx (регулярные выражения).

Другое применение RegEx — использовать его как очень мощный фильтр, который позволяет заглянуть в анонсы BGP и по присутствию или отсутствию определенных AS отбрасывать или, наоборот, принимать маршруты. Но нельзя предусмотреть все, поэтому лучшим и самым ответственным решением будет внимательно смотреть, что и куда ты анонсируешь из своей AS.

Отфильтровать все лишнее
Необходимо настроить фильтрацию, чтобы префиксы, полученные от одного провайдера, не анонсировались другому и наша AS не стала транзитной.

Взгляни на пример route policy для запрета анонса сетей первого провайдера через второго:

!
router bgp 5
neighbor 10.0.0.1 remote-as 1
neighbor 10.0.0.1 route-map TO_1 out
neighbor 20.0.0.2 remote-as 4
neighbor 20.0.0.2 remote-as TO_4 out
!
ip as-path access-list 1 deny _4$
ip as-path access-list 1 permit .*
ip as-path access-list 2 deny _1$
ip as-path access-list 2 permit .*
!
route-map TO_1 permit 10
match as-path 1
!
route-map TO_4 permit 10
match as-path 2
!
До фильтра:

R4#show ip bgp

Network Next Hop Metric LocPrf Weight Path

*> 172.16.0.0/24 0.0.0.0 0 32768 i

*> 192.168.0.0 20.0.0.1 0 5 1 i

  • 40.0.0.1 0 3 2 1 i
После фильтра:

R4#show ip bgp

Network Next Hop Metric LocPrf Weight Path

*> 172.16.0.0/24 0.0.0.0 0 32768 i

*> 192.168.0.0 40.0.0.1 0 3 2 1 i
Так мы получаем полный доступ к таблице маршрутизации от двух провайдеров, не став транзитной AS.

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

Мы рассмотрели route leak и hijacking на очень скромном примере, однако и в глобальных сетях мировых магистральных провайдеров похожее происходит чуть ли не ежедневно. Если тебе интересно, почитай про

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

,

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

и

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.
 
Сверху