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)修改该时间。

MAC地址漂移和应对(二)相关推荐

  1. mac地址漂移flapping的前因后果

    一.什么是mac地址flapping? mac地址漂移是指:在同一个vlan内,mac地址表项的出接口出现变更.如图: 二.产生的原因 1.因为环路或VRRP切换,导致的MAC地址漂移告警.(不予关注 ...

  2. 2022-09-07 网工进阶(三十)以太网交换安全-端口隔离、MAC地址表安全、端口安全、MAC地址漂移防止与检测、链路层安全、流量抑制、风暴控制、IPSG(IP Source Guard)

    概述 目前网络中以太网技术的应用非常广泛.然而,各种网络攻击的存在,不仅造成了网络合法用户无法正常访问网络资源,而且对网络信息安全构成严重威胁,因此以太网交换的安全性越来越重要. 端口隔离 大型网络中 ...

  3. MAC地址、MAC地址表、端口安全、MAC地址漂移

    一.MAC地址 mac地址主要工作在数据链路层,主要用于单个广播域内的数据传输 1.组成 总共48Bit,前24bit是通过向IETF等机构申请用来标识厂商的代码,后24bit由是厂商分配给产品的唯一 ...

  4. 玩转华为数据中心交换机系列 | 配置MAC地址漂移检测示例

    素材来源:华为数据中心交换机配置指南 一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:玩转华为数据中心交换机系列 | 汇总_COCOgsta的博客-CSDN博客 组网需求 如 ...

  5. mac地址漂移导致呼叫失败问题处理过程

    目录 1 现象: 2 组网结构: 3 业务流程: 4  抓包定位一下问题: 4.1 抓包看一下 4.2 更改抓包方式后,重抓 4.3 故障的可能性如下图: 5 结论及改正方法: 6 总结 1 现象: ...

  6. 华为MAC Flapping , MAC的漂移

    华为写的很详细,MAC 地址的漂移会导致流量的中断. 华为阻止MAC地址漂移的方法有三种: 一.端口配置静态MAC地址 在全局视图下,执行命令mac-address static mac-addres ...

  7. 网络工程基础- -mac地址以及端口安全

    网络工程基础-mac地址以及端口安全 前言 MAC地址(英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address)物理地址(P ...

  8. MAC地址飘移查看及解决方法 一般是网络中存在环路

    一. 现象:MAC地址飘移 关于mac地址飘移,在网上查找并总结后,归纳可能为以下七种情况: 1.可能存在环路: 2.可能VRRP.HSRP等协议不正常引起.比如设备主备频繁切换,导致交换机学习同一m ...

  9. 基于MAC地址的安全配置与管理

    MAC地址是网络设备中不变的物理地址,所以基于MAC地址的接入控制就成了最直接,甚至可能是大多数情况下最有效的控制手段.在二层交换网络中,是通过依靠保存在交换机中的MAC地址表来进行寻址的,这时如果控 ...

最新文章

  1. java--内存管理的几点小技巧
  2. 深度学习基础系列(八)| 偏差和方差
  3. 我的 Serverless 实战 — Serverless 架构理念 ( 后端服务器发展 | Serverless 与 ServerFul | Serverless 定义 | 架构优缺点 )
  4. java-基础-变量
  5. 推荐 14 个 GitHub 上优质的原创前端博客文章仓库
  6. windows病毒和linux吗,与Windows相比,Linux很少感染病毒。()
  7. 输入序列连续的序列检测
  8. spring cloud全家桶_吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软
  9. TOJ3651确定比赛名次
  10. 简述java的异常机制_JAVA异常机制简述
  11. HDU 5935 2016CCPC杭州 C: Car
  12. python 动态语言 优美_Python动态语言之魅力大揭秘
  13. 算法课 - 最大流问题
  14. Vue项目打包文件过大(优化)
  15. cad图层置顶的lisp_cad中如何将一个图层置于上层
  16. 代理服务器为何受欢迎?
  17. Markdown标记语言知识梳理
  18. my music / NightWish / Groove Coverage / DJ
  19. iOS searchbar实现汉字更具拼音首字母排序
  20. 【C语言】杨辉三角(等腰三角)

热门文章

  1. Complier Validation via Equivalence Modulo Inputs
  2. java sencha_sencha cmd安装创建项目与编译,特详细。
  3. 什么是UID、UED、UXD、IXD、UCD、IAD,看这篇就足够了
  4. configure: error: Package requirements (sqlite3 」 3.7.4) were not met:
  5. 开始使用 Elasticsearch (1)
  6. 【跟我学Puppet】1.5 Puppet 3.7 使用Hiera定义配置
  7. python电话模块_Python常用模块
  8. CSS4day(圆角边框,阴影,浮动详解及其示例)
  9. 软件测试基础理论学习和小案例(一)
  10. Android程序的入口