Page tree
Skip to end of metadata
Go to start of metadata

На коммутаторах SNR серий S2989G, S2995G, S3850G, начиная с версии ПО V705R002C011B029, был добавлен функционал защиты от флаппинга MAC-адресов - MAC-address-flapping prevention.

Что такое флаппинг MAC-адресов

MAC-flapping - это явление, при котором один и тот же MAC-адрес периодически изучается на разных портах коммутатора. Например, за портом коммутатора 1/0/1 существовал MAC1, а затем этот же MAC1 по какой-то причине появился за портом 1/0/2. Flapping MAC-адресов может возникать по разным причинам: петля в сети, или неправильно настроенное / неисправное клиентское оборудование, неправильно сконфигурированная сеть, или даже атака злоумышленников.

И если у нас в сети по какой-то из ранее указанных причин начался флаппинг MAC-адресов, то до устранения причины этого инцидента MAC-адреса так и будут изучаться то на одном, то на другом порту. Для борьбы с этим на помощь приходит функционал MAC-address-flapping prevention.

Настройка MAC-address-flapping prevention на коммутаторах SNR

Чтобы данный функционал работал, необходимо сперва включить изучение MAC-адресов средствами CPU: 'mac-address-learning cpu-control' в режиме глобальной конфигурации (по умолчанию отключен).

Если один и тот же MAC-адрес изучился на разных портах, но в разных VLAN, это НЕ считается за флаппинг MAC-адресов. Функционал MAC-address-flapping prevention работает в каждом экземпляре VLAN отдельно.

Защита от флаппинга между портами с одинаковым приоритетом

Самый простой вариант - использовать защиту от флаппинга между всеми портами с одинаковым приоритетом. Для этого необходимо использовать команду из режима глобальной конфигурации:

(no) mac-address-learning priority X allow-flapping

По умолчанию разрешен флаппинг между портами со всеми одинаковыми приоритетами: и 0, и 1, и 2, и 3.

То есть на коммутаторе такие значения по умолчанию (все сразу):

mac-address-learning priority 0 allow-flapping
mac-address-learning priority 1 allow-flapping
mac-address-learning priority 2 allow-flapping
mac-address-learning priority 3 allow-flapping

И поскольку это значения по умолчанию, то при просмотре текущей конфигурации коммутатора мы не увидим эти строки.

Командой 'no mac-address-learning priority X allow-flapping' мы запрещаем разрешенный флаппинг по умолчанию между портами с приоритетом X. Можно запретить только для одного конкретного приоритета, а можно для всех разом, тогда в конфигурации появятся следующие записи:

no mac-address-learning priority 0 allow-flapping
no mac-address-learning priority 1 allow-flapping
no mac-address-learning priority 2 allow-flapping
no mac-address-learning priority 3 allow-flapping

В данном случае, когда на сети начнется флаппинг, если MAC-адрес на порту с одним приоритетом хотя бы один раз поступит на другой порт с таким же приоритетом, он не будет там изучен, а останется за первоначальным портом.

По умолчанию все порты на коммутаторе без настроек имеют приоритет 0, поэтому для минимальной защиты необходимо использовать команду:

no mac-address-learning priority 0 allow-flapping

Защита от флаппинга между определенными портами (опционально)

Если стоит цель не допустить флаппинг MAC-адреса между какими-то определенными портами, то необходимо использовать команду из режима конфигурации порта:

mac-address-learning priority X

(как было сказано ранее, по умолчанию на всех портах включено 'mac-address-learning priority 0', вернуться к этому значению можно командой 'no mac-address-learning priority').

При этом необязательно запрещать флаппинг MAC-адресов в глобальной конфигурации между одинаковыми приоритетами: данные команды могут работать как вместе, так и по отдельности.


Данная команда позволяет настроить приоритет портов, чтобы определить - за каким портом в случае флаппинга изучить MAC-адрес, а за каким не изучать. По умолчанию приоритет всех портов - 0 (наименьший), можно также установить значения 1,2,3. Больший приоритет выигрывает.

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

А если MAC, который был ранее за каким-то портом, хотя бы один раз придет на порт с более низким приоритетом, то он не будет там изучен, пока этот MAC изучен и закреплен в таблице коммутации за портом с более высоким приоритетом (за ним он и будет оставлен).

Пример: за портом коммутатора 1/0/1 существовал MAC1, а затем этот же MAC1 по какой-то причине появился за портом 1/0/2. Если приоритет порта 1/0/1, к примеру, 1 или по умолчанию 0, а приоритет порта 1/0/2 настроен как 2 (то есть выше, чем у порта 1/0/1), тогда этот MAC-адрес будет изучен на порту 1/0/2 и добавлен в таблицу коммутации.

Если же, наоборот, MAC2 появился сперва за портом 1/0/2 (то есть за портом с более высоким приоритетом), а затем этот же MAC2 появился за портом 1/0/1, в силу того, что приоритет порта 1/0/1 ниже, MAC-адрес на нем изучен не будет и не будет добавлен в таблицу коммутации для порта 1/0/1 (он останется за портом 1/0/2).


Защита заключается именно в НЕизучении MAC-адресов, и это актуально только тогда, когда у нас MAC-адреса есть в таблице коммутации. Однако если MAC-адрес пропадет из таблицы до того, как случится флаппинг, а затем он появится на другом порту через какое-то время, это НЕ будет считаться флаппингом.

Например, если мы отключили устройство от одного порта, линк пропал, MAC-адрес также был удален из таблицы, и далее мы подключим устройство с этим же MAC-адресом в другой порт (пусть даже с более низким приоритетом), это будет вполне нормальная ситуация, и это не является флаппингом MAC-адресов.

Отключение порта при флаппинге

Для работы данного функционала важно также не забыть настроить в режиме глобальной конфигурации команду: 'mac-address-table notification'

Мы можем не просто запретить флаппинг MAC-адресов, но и запретить вредоносную активность злоумышленников путем отключения порта с помощью команды в режиме конфигурации порта (по умолчанию функционал отключен):

mac-notification moved shutdown

Есть примеры и другого функционала, где при какой-либо сработке, которая свидетельствует о нарушении со стороны клиента, порт автоматически административно выключается (переходит в состояние shutdown), например, в port-security, LBD и т.д. Здесь принцип аналогичный. Однако есть некоторые тонкости.

В данном функционале механизм shutdown срабатывает только тогда, когда обнаруживается миграция MAC-адресов.

Миграция MAC-адресов - это изучение MAC-адреса на другом порту при его флаппинге с порта с более низким приоритетом на порт с более высоким приоритетом, ЛИБО при флаппинге между портами с одинаковым приоритетом. На порт с более низким приоритетом миграция невозможна.


Пример: если MAC1 изучился за портом 1/0/1 с приоритетом 1, и если этот же MAC1 появится за портом 1/0/2 с приоритетом 2, то он будет изучен за портом 1/0/2, это значит, что произошла миграция MAC-адреса, тогда сработает механизм shutdown на порту с более высоким приоритетом - 1/0/2. Если же, наоборот, MAC2 сначала был изучен за портом 1/0/2 с более высоким приоритетом, а затем появился на порту с более низким приоритетом, то он не будет там изучен, это значит, что миграция не произойдет, и shutdown не сработает.

Важно отметить, что shutdown будет срабатывать именно на порту - КУДА мигрировал MAC-адрес:

1) если порты с одинаковым приоритетом, то shutdown сработает на том порту, КУДА мигрировал MAC-адрес (если на этом порту есть настройка 'mac-notification moved shutdown').

2) если порты с разным приоритетом, то shutdown также сработает на том порту, КУДА мигрировал MAC-адрес, то есть на порту с более высоким приоритетом (если на этом порту есть настройка 'mac-notification moved shutdown').

Дело в том, что если мы включаем shutdown, значит мы не хотим, чтобы MAC был изучен за другим портом. Но как мы уже разобрали, MAC-адрес и так не будет изучен за портом с более низким приоритетом, поэтому shutdown - подразумевает защиту, например, если злоумышленник подменит свой MAC за портом 1/0/2 (с более высоким приоритетом) на такой же MAC как за портом 1/0/1 (с более низким приоритетом). В обычной ситуации MAC был бы изучен на порту злоумышленника 1/0/2, но если использовать shutdown, то этого не произойдет - порт будет выключен.


После того, как порт переходит в состояние shutdown, он в нем останется до тех пор, пока его не включить вручную.

В будущих релизах ПО будет добавлена возможность автоматического восстановления - recovery (по аналогии с другим функционалом, например, как в port-security, rate-violation и т.д.), а также будет добавлено логирование таких событий.

  • No labels