MAC地址漂移和应对(二)

  • Post author:
  • Post category:其他




MAC地址漂移应对方法

  • 二层环路以及网络攻击行为均有可能引发MAC地址漂移。
  • 对应二层环路这个诱因,我们可以部署生成树协议(STP、RSTP、MSTP)或者环网保护协议(RRPP、ERPS)进行规避,从而避免引起MAC地址漂移问题。
  • 也可以利用交换机的端口安全特性,也可以解决MAC地址漂移问题。



利用端口安全应对MAC地址漂移



配置基于VLAN的MAC地址漂移检测

  • 交换机支持MAC地址漂移检测功能,该功能可以在VLAN下激活。

  • 通过相应的配置,使得当交换机在VLAN中检测到MAC地址漂移时,可以执行如下动作:

    (1)仅仅产生告警;

    (2)将产生MAC地址漂移的接口阻塞;

    (3)将产生漂移的MAC地址阻塞,而不是将接口阻塞。

  • VLAN配置视图下的loop-detect eth-loop命令(HW),用于在特定VLAN中开启MAC地址漂移检测功能(缺省情况下该功能并未开启)。



示例

  1. 如下图所示,交换机SW的GE0/0/1接口连接着PC1,而GE0/0/2接口则连接着一台非可网管交换机,SW的所有接口都加入了VLAN 10
  2. 为了检测到VLAN10内是否发生MAC地址漂移,可以在SW上VLAN 10配置视图下执行loop-detect eth-loop alarm-only命令。
  3. loop-detect eth-loop 命令可以指定三种不同的关键字:
  • loop-detect eth-loop alarm-only命令开启MAC地址漂移检测(vlan配置模式下),并且一旦交换机检测到该VLAN内发生了MAC地址漂移,交换机仅仅产生相应的告警信息(不会阻塞发生MAC地址漂移的接口)。
  • loop-detect eth-loop block-time 10 retry-times 2命令开启MAC地址漂移检测(vlan配置模式下),

    (1)检测到VLAN内产生MAC地址漂移时,将产生漂移的接口直接阻塞。

    (2)接口将被阻塞10s(用block-time关键字指定),接口被阻塞时无法正常收发数据的。

    (3)10s之后接口会被放开并重新进行检测,此时该接口可以正常收发数据,

    (4)如果20s内没有再检测到MAC地址漂移,则接口的阻塞将被彻底解除;但是如果20s内再次检测到MAC地址漂移,则再次将该接口阻塞,最大重复次数为2次(用retry-times关键字指定),如果交换机依然能检测到该接口发生MAC地址漂移,则永久阻塞该接口。

    在这里插入图片描述
  1. 当网络正常时,SW能够学习到PC1的MAC地址并形成MAC地址表项。因此PC1能够通过SW与外界正常通信。

  2. 假设现在攻击者PC3连接到了网络中的非可网管交换机上,它开始伪造PC1的MAC地址发送数据帧,由于SW在VLAN 10内开启了MAC地址漂移检测功能,因此SW很快便发现GE0/0/2接口上发生了MAC地址漂移并弹出如下告警:


    May 11 2020 17:54:19-08:00 SW L2IFPPI/4/MFLPIFRESUME:0ID 1.3.6.1.4.1.2018.5.25.160.3.7 MAC move detected, VlanId=10, MacAddress”5489-982d-2525, Original-Port=GE0/0/1, Flapping port=GE0/0/2. Please check the network accessed to flapping port.

使用display loop-detect eth-loop命令可以查看被MAC地址漂移检测功能所阻塞的接口及阻塞剩余时间等信息:

在这里插入图片描述

从上面的输出信息可以看出,GE0/0/2接口目前处于阻塞(Block)状态,阻塞的剩余时间还有6s,Leave times表示接口从本次阻塞恢复后,允许再次出现MAC漂移的次数,值为1。

  1. 当该接口被阻塞10s之后,SW会把GE0/0/2接口恢复,接下来的20s,相当于是SW对该接口的考察期。继续在SW上使用display loop-detect eth-loop命令可以看到GE0/0/2接口的状态(状态从Block切换到Retry)

    在这里插入图片描述

(1)如果在20s内,SW没有在GE0/0/2接口上再检测到MAC地址漂移的发生,则彻底放开GE0/0/2。使用display loop-detect eth-loop命令也就不会再看到该接口。SW彻底放开GE0/0/2时,会产生如下日志:


May 11 2020 17:54:48-08:00 SW L2IFPPI/4/MFLPVLANALARM:0ID 1.3.6.1.4.1.2018.5.25.160.3.2 Loop does not exist in vlan 10, Interface GigabitEthernet0/0/2 resumed, block-time is 10 for mac-flapping disappeared.

(2)如果20s内,SW再次在GE0/0/2接口上检测到MAC地址漂移,则会再次阻塞该接口:

在这里插入图片描述

  1. 当该接口又被阻塞10s之后,SW还是会把GE0/0/2接口恢复,接下来的20s,还是SW对该接口的考察期,但是由于Leave times值为0,表示若在接下来的20s内,SW若再次检测到GE0/0/2接口发送MAC地址漂移,则永久阻塞该接口。

    (1)假设现在PC3依然在伪造PC1的MAC地址发送数据帧,那SW将永久阻塞GE0/0/2接口:

    在这里插入图片描述

从上面的输出信息可以看出,GE0/0/2接口目前处于永久阻塞(Block forever)状态,被永久阻塞的接口是无法自动恢复的,只能通过命令reset loop-detect eth-loop来解除。



引入问题

由于SW交换机GE0/0/2接口下还关联着合法设备PC2,当通过配置loop-detect eth-loop block-time 10 retry-times 2命令进行MAC地址漂移检测时,只要交换机检测到GE0/0/2接口发生MAC地址漂移,便会将发生漂移的接口GE0/0/2进行阻塞,因此连接该接口的其他合法设备(比如PC2)可能也会受到影响。



解决方法

如果交换机检测到MAC地址漂移时,只阻塞发生漂移的MAC地址,而不是将整个接口进行阻塞,便可解决上述问题。

  1. 在vlan配置视图下执行loop-detect eth-loop block-mac block-time 10 retry-times 2命令(HW)可以实现发生MAC地址漂移时,只会阻塞发生漂移的MAC地址。当攻击者PC3连接到网络中时,SW将检测到5489-982d-2525这个MAC地址发生漂移,便会将漂移的MAC地址阻塞,此时如果GE0/0/2接口下连接着其他合法的PC(例如PC2),这些合法的PC的通信是不会受到影响的。

  2. 当SW第一次检测到GE0/0/2接口出现5489-982d-2525这个MAC地址的漂移现象时,SW2将该MAC地址阻塞,于此同时它将产生如下告警:


    May 11 2020 18:34:49-08:00 SW L2IFPPI/4/MFLPMABLOCK:0ID 1.3.6.1.4.1.2018.5.25.160.3.9 Loop exists in vlan 10, Mac Address 5489-982d-2525 blocked, block-time is 10, the former Interface GigabitEthernet0/0/1, the latter Interface GigabitEthernet0/0/2, for mac-flapping.

需要注意的是,由于交换机将5489-982d-2525这个MAC地址阻塞,因此拥有该MAC地址的合法PC ( PC1)以及攻击者PC3都无法使用该MAC地址进行通信。在交换机上使用display loop-detect eth-loop命令,可以看到如下输出:

在这里插入图片描述

10s之后,SW将该MAC地址解除阻塞,该MAC地址进入20s的观察期。

如果此时SW再次检测到该MAC地址发生了漂移,则将再次阻塞该MAC地址。

再经过10s后,该MAC地址被放开,并进入20s的观察期,因为此时“Leave times”己经为0,当SW再次检测到该MAC地址发生漂移时,便彻底阻塞该MAC地址。

在这里插入图片描述

被永久阻塞的MAC地址是无法自动恢复的,只能通过命令reset loop-detect eth-loop来解除。



配置全局MAC地址漂移检测

在系统视图下,命令mac-address flapping detection(HW),配置支持全局MAC地址漂移检测(缺省情况下,该功能已使能),交换机便会对设备上的所有VLAN进行MAC地址漂移检测。



示例



全局MAC地址漂移检测

  1. 在设备上开启全局MAC地址漂移检测功能。
  2. 如下图所示的网络中,当攻击者PC2出现在网络中并开始向交换机发送数据时,交换机之所以能够检测到GE0/0/1及GE0/0/2接口之间发生MAC地址漂移,是因为交换机已经缺省开启了全局MAC地址漂移检测功能。

在这里插入图片描述

  1. 当交换机检测到MAC漂移现象发生后,会弹出如下告警:


    May 11 2020 11:35:08-08:00 SW L2IFPPI/4/MFLPVLANALARM:0ID 1.3.6.1.4.1.2018.5.25.160.3.7 MAC move detected VlanId=1, MacAddress=5489-98cb-2b12, Original-Port=GE0/0/1, Flapping port=GE0/0/2. Please check the network accessed to flapping port.

  2. 使用display mac-address flapping record命令,可以查看MAC地址漂移的历史记录:

    在这里插入图片描述

从2020-07-11 11:35:50开始到2020-07-11 11:38:03结束的MAC地址漂移记录中,5489-98cb-2bf2这个MAC地址在GE0/0/1及GE0/0/2接口之间发生了漂移,而且漂移的次数达1089次之多。



MAC地址漂移检测的VLAN白名单



问题背景
  • 当交换机开启了全局MAC漂移检测,那么交换机将对本机所有VLAN进行MAC地址漂移检测。
  • 如下图所示的网络拓扑中,Server是双网卡,它们都通过网线连接到交换机SW。
  • Server在这两张网卡上部署了负载分担模式的网卡绑定,即将Eth1及Eth2捆绑成一个逻辑接口,并且将外出的流量在Eth1及Eth2这两个物理接口上进行负载分担。
  • 由于Eth1及Eth2被捆绑成一个逻辑接口,当Server发出这些流量时,都会使用相同的源MAC地址,因此当SW收到这些流量时,便会检测到GE0/0/1及GE0/0/2接口上发生MAC地址漂移,但是实际上,这种现象对网络而言是无害的,因为网络中并不存在二层环路。

    在这里插入图片描述


解决方法1
  1. 在上述场景中,在VLAN10内检测MAC地址漂移是没有必要的,因此可以将VLAN10添加到MAC地址漂移检测的白名单中,从而不对VLAN10进行检测。
  2. 在系统视图下,命令mac-address flapping detection exclude vlan 10(HW),配置该命令,可以将VLAN10添加到MAC地址漂移检测的白名单中,从而不对VLAN10进行检测。


解决方法2
  1. 在交换机上将GE0/0/1及GE0/0/2接口进行聚合,即GE0/0/1及GE0/0/2被捆绑成一个逻辑接口,
  2. 当Server发送的数据在哪一个接口上到达,交换机都统统认为是在聚合接口上(虚拟接口上)到达的,因此不存在MAC地址迁移或漂移的现象。



指定VLAN中MAC地址漂移检测的安全级别

  • 短时间内,交换机在属于同一个vlan的不同接口学习到少量相同的MAC地址,属于正常现象,这叫做MAC地址的迁移。
  • 短时间内,发生大量的MAC地址的迁移,属于不正常的现象,这叫做MAC地址漂移。
  • 当交换机开启全局MAC地址检测时,交换机为所有VLAN缺省设置的MAC地址漂移检测的安全级别是middle,也即当检测到MAC地址发生10次迁移后,便认为该MAC地址发生了漂移,于是上报告警。
  • 交换机支持三种安全级别的设定(HW):

    (1)高( High): MAC地址发生3次迁移后,即认为发生了MAC地址漂移。

    (2)中(Middle): MAC地址发生10次迁移后,即认为发生了MAC地址漂移。

    (3)低(Low): MAC地址发生50次迁移后,即认为发生了MAC地址漂移。



配置发生漂移后接口的处理动作及优先级

  1. 在开启全局MAC地址漂移检测后,如果交换机检测到MAC地址漂移,在缺省情况下,它只是简单地上报告警,并不会采取其他动作。
  2. 当在接口上配置发生漂移后,可以配置交换机处理动作及优先级。
  3. 如下图所示的网络拓扑中,SW1、SW2、SW3构成一个三角形的二层环路,如果网络设备并未运行解决二层环路的协议或使用相关技术,那么一旦网络中的PC开始发送数据,就极有可能产生广播风暴并引发MAC地址漂移。
  4. 交换机检测到MAC地址漂移之后,执行的动作有两种:
  • mac-address flapping action error-down,检测到MAC地址漂移之后,上报告警信息,同时将接口状态设置成error-down(不在转发报文)。
  • mac-address flapping action quit-vlan,检测到MAC地址之后,上报告警信息,通过将检测到MAC地址漂移的接口退出当前所属的vlan。

在这里插入图片描述

  1. 以交换机SW1为例,在GE0/0/2、GE0/0/3接口的配置模式下,配置mac-address flapping action error-down命令(HW),可以配置该接口发生MAC漂移后的处理动作是error-down(被阻塞,不再转发数据)

  2. 当交换机SW1检测到GE0/0/2、GE0/0/3发生MAC地址漂移之后,执行动作为error-down,GE0/0/2或者GE0/0/3将被置为Error-Down,不再转发数据,如此一来,该接口相当于被阻塞,于是网络中的二层环路也就被打破了。同时,交换机SW1也会上报告警信息:


    May 11 2020 14:29:32+08:00 SWl %%01ERRDOWN/4/ERRDOWN_DOWNNOTIFY(1)[14]:Notify interface to change status to error-down.(InterfaceName=GigabitEthernet0/0/3, Cause=mac-address-flapping)

  3. 在SW1上使用display mac-address flapping record命令也能查看到相应的变化:

    在这里插入图片描述

从上述输出信息可以看到,GE0/0/3接口被设置了“D”标记,这意味着该接口己经被置为Error-Down状态。使用display interface GigabitEthernet 0/0/3命令,也可以进一步确认该接口当前的状态:

在这里插入图片描述

  1. 假设将接口检测到发生MAC地址漂移后的处理动作设置为quit-vlan(离开VLAN):
  • 当交换机SW1检测到GE0/0/2、GE0/0/3发生MAC地址漂移之后,执行动作为quit-vlan,GE0/0/2或者GE0/0/3将退出vlan 10,从而使得VLAN 10的流量在网络中不会存在二层环路,
  • 此时在交换机上还能看到如下告警:

    May 11 2020 14:54:23+08:00 SW1 L2IFPPI/4/MFLPQUITVLANALARML:OID 1.3.6.1.4.1.2018.5.25.160.3.11 (vlan=10) lnterface GE0/0/3 leaved from vlan 10 because mac move detected.
  1. 在SW1上使用display mac-address flapping record命令也能查看到相应的变化:

    在这里插入图片描述

  2. 在接口的配置视图中除了能配置发生MAC地址漂移后的处理动作,还能配置发生MAC地址漂移时接口动作的优先级。

  • 缺省时,接口的优先级为127,可以使用mac-address flapping action priority priority命令(HW)可以修改该值,值越大,优先级越高。
  • 当交换机检测到两个或者两个以上的接口发生MAC地址漂移并且接口都配置了处理动作时:

    (1)它将把优先级最低的接口关闭或退出VLAN,

    (2)如果这些接口的优先级都相等,那么漂移后接口将执行相应的动作,如果漂移后的接口并没有配置mac-address flapping action,那么漂移前接口执行动作。

    (3)需要注意的是,接口优先级只在相同的动作间发挥作用,例如两个接口都将mac-address flapping action设置为error-down,那次优先级将在二者间发挥作用,而如果两个接口中,一个配置了error-down,另一个配置了quit- vlan,那么一旦发生MAC地址漂移,无论这两个接口的优先级如何,它们都将执行各自所配置的动作。



恢复被惩罚接口

  • 缺省时,如果接口由于发生了MAC地址漂移从而被设置为Error-Down,是不会自动恢复的,此时需要在接口配置视图下先执行shutdown命令,再执行undo shutdown命令,从而将接口恢复到正常工作的状态。
  • 此外,也可以在接口配置视图下执行restart命令重启接口。
  • 如果希望处于Error=Down的接口能够自动恢复,那么可以在系统视图下配置如下命令:error-down auto-recovery cause mac-address-flapping interval 30(HW),当发生MAC地址漂移从而被设置为error-down的接口在延迟30s后自动恢复为UP。
  • 如果接口由于发生了MAC地址漂移,从而被设置为离开VLAN,缺省时,接口可以自动恢复,延迟时间为10 min,也可以在系统视图下使用mac-address flapping quit-vlan recover-time time-value命令(HW)修改该时间。



版权声明:本文为mn3321原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。