二层转发的转发表是mac表,设备通过MAC表查找报文的出接口,如果查表失败,报文就会进行广播,所以广播风暴是二层网络中最常见的现象。因此,如何保证转发表的安全和如何抑制广播风暴,是二层网络安全的重点问题
为了保证二层流量能够正常转发,针对不同的应用场景,交换机提供了不同的方法保证转发表的安全。譬如:MAC防漂移和端口安全通过MAC和接口的绑定,保证MAC表的安全。DHCP Snooping通过记录用户DHCP的认证信息,保证动态用户的安全接入。
接口只要接收到报文,就会进行MAC表项学习。交换机从正确的接口学习到合法用户的MAC表后,又从其他接口接收到非法用户的攻击报文时,就会导致MAC表项学习错误,二层转发出现异常。
最典型的场景如下图所示,非法用户通过模拟网关的源MAC向接入交换机发送报文,网关对应MAC1的出接口就会从IF1漂移到IF2。这样下行用户向网关发送报文时,通过MAC表项查询到的出接口就是错误的IF2,用户的报文就无法转发到网关,二层转发异常。
针对该场景,S交换机有两种方法进行安全预防:
配置静态MAC:
把网关的MAC和接口手动绑定,使网关的MAC无法发生漂移。
[SwitchA] mac-address static 3-3-3 gigabitethernet 0/0/10 vlan 4 //假设网关的MAC是3-3-3,接口是GE0/0/10,把接口和MAC在VLAN 4的广播域内绑定
配置MAC学习优先级:
使IF1接口MAC学习优先级高于IF2接口,这样如果IF2接口再收到源MAC是MAC1的报文时,不再进行MAC学习,使MAC地址不进行漂移。
[SwitchA] interface gigabitethernet 0/0/10 //连接网关的接口[SwitchA-GigabitEthernet0/0/10] mac-learning priority 3 //配置接口MAC学习优先级为最高值3
说明:有些交换机不支持配置MAC学习优先级,可以通过配置MAC Spoofing功能设置网关接口为信任接口,防止网关的MAC地址漂移,配置方法如下:
[SwitchA] mac-spoofing-defend enable //全局使能MAC Spoofing功能 [SwitchA] interface gigabitethernet 0/0/10 //连接网关的接口 [SwitchA-GigabitEthernet0/0/10] mac-spoofing-defend enable //配置接口为信任接口
端口安全也是一种保证转发表安全的特性。在接口上使能端口安全功能后,接口上学习到的MAC地址就会自动转换为安全MAC,实现MAC地址和接口绑定,这样该MAC对应的用户就只能从该接口接入,无法再从其他接口接入。
另外,端口安全还可以通过设置接口下MAC表项的个数限制用户接入,保证只有先到的用户能够接入,后来的用户无法接入,同时也防止了黑洞MAC泛洪攻击导致MAC表溢出的问题。
但是端口安全无法判断接入的用户是否合法,只能保证先到的用户可以接入,如果先到的用户是非法的,也是可以接入的。
如上图,某企业为了保证接入用户的安全性,防止非法用户通过发送源MAC频繁变化的报文攻击网络,同时防止非法用户通过仿冒MAC地址接入网络。要求一个接口下只允许三个用户接入,同时要求这三个用户只能从指定接口接入,不能从任意端口接入。
为了实现上面安全策略,可以在SwitchA的GE0/0/1接口上配置端口安全功能,在有非法用户想要通过该接口接入时,还可以上报告警。在交换机配置端口安全的方法如下:
[SwitchA] interface gigabitethernet 0/0/1 [SwitchA-GigabitEthernet0/0/1] port-security enable //接口使能端口安全功能 [SwitchA-GigabitEthernet0/0/1] port-security max-mac-num 3 //配置接口下只允许绑定三个MAC地址,也就是说只允许三个用户接入,默认情况下接口使能端口安全后,只能绑定一个MAC地址 [SwitchA-GigabitEthernet0/0/1] port-security mac-address sticky //使能Sticky MAC功能,在保存配置重启后,接口和MAC的绑定不会消失
什么是广播风暴?
就是广播、未知组播以及未知单播报文过多或者在网络中成环的一种现象。
为什么会有广播风暴?
二层转发是根据MAC表项转发的,如果报文的MAC地址在MAC表中找不到对应的出接口,报文就会在VLAN内所有端口进行转发,从而产生广播风暴。
怎么抑制广播风暴呢?
抑制广播风暴最根本的方法是找到报文的出接口,使报文进行单播转发。然而在实际应用中,由于MAC表的规格限制和二层转发的原理,广播风暴是无法彻底解决的,只能尽可能的减少安全风险。
交换机提供了两种安全方法:一是基于不同维度进行流量抑制,二是通过风暴控制阻塞端口或Error-Down端口。
流量抑制可以从下面3个维度进行抑制:
1、基于接口进行流量限制
在接口的入方向上,分别对三类报文按百分比、包速率和比特速率进行流量抑制。
2、基于VLAN进行流量限制
对某个VLAN的上行流量,分别对三类报文按比特速率进行流量抑制。
3、基于接口进行流量阻塞
在接口的出方向上,阻塞这三类报文的转发。
这些功能又该怎么应用呢?我们从下图拓扑看一下应用场景和配置方法。
SwitchA是汇聚层交换机,通过接口GE0/0/1接入网络的用户属于两个VLAN,VLAN 10和 VLAN 20;通过接口GE0/0/2接入网络的用户属于VLAN 30;通过接口GE0/0/3接入网络只有一个固定的用户,该用户对安全要求较高,不希望收到广播、未知组播以及未知单播报文。
配置思路:
配置方法:
基于VLAN配置流量抑制,限制每个VLAN广播、未知组播以及未知单播报文的流量。
[SwitchA] qos car qoscar1 cir 1000 //配置Qos模板,承诺速率是1000kbit/s [SwitchA] vlan 10 [SwitchA-vlan10] broadcast-suppression qoscar1 //在VLAN视图下应用该模板,对广播报文进行抑制,承诺速率是1000kbit/s [SwitchA-vlan10] multicast-suppression qoscar1 //在VLAN视图下应用该模板,对未知组播的抑制,承诺速率是1000kbit/s [SwitchA-vlan10] unicast-suppression qoscar1 //在VLAN视图下应用该模板,对未知单播的抑制,承诺速率是1000kbit/
基于接口配置流量抑制,限制该接口广播、未知组播以及未知单播报文的流量。
[SwitchA] interface gigabitethernet 0/0/2 [SwitchA-GigabitEthernet0/0/2] broadcast-suppression 5 //广播报文速率最多占接口速率的5% [SwitchA-GigabitEthernet0/0/2] multicast-suppression 5 //未知组播报文速率最多占接口速率的5% [SwitchA-GigabitEthernet0/0/2] unicast-suppression 5 //未知单播报文速率最多占接口速率的5%
说明:基于接口的流量抑制,有三种配置方式:可以基于百分比,包速率和比特速率分别抑制
基于接口阻塞广播、未知组播以及未知单播报文的流量
[SwitchA] interface gigabitethernet 0/0/3 [SwitchA-GigabitEthernet0/0/3] broadcast-suppression block outbound //阻塞广播报文 [SwitchA-GigabitEthernet0/0/3] multicast-suppression block outbound //阻塞未知组播报文 [SwitchA-GigabitEthernet0/0/3] unicast-suppression block outbound //阻塞未知单播报文
风暴控制不仅可以通过设置速率控制广播、未知组播以及未知单播报文,还可以在速率超过设置阈值时对接口执行惩罚动作。
1、阻塞端口:
2、 Error-Down端口:
配置方法:
[SwitchA] error-down auto-recovery cause storm-control interval 20 //如果接口被风暴控制error down,20秒后接口自动恢复 [SwitchA] interface gigabitethernet 0/0/5 [SwitchA-GigabitEthernet0/0/5] storm-control broadcast min-rate 1000 max-rate 2000 //广播报文执行惩罚动作的阈值 [SwitchA-GigabitEthernet0/0/5] storm-control action error-down //风暴控制的惩罚动作是error down [SwitchA-GigabitEthernet0/0/5] quit [SwitchA] interface gigabitethernet 0/0/6 [SwitchA-GigabitEthernet0/0/6] storm-control multicast min-rate percent 5 max-rate percent 20 //未知组播报文执行惩罚动作的阈值 [SwitchA-GigabitEthernet0/0/6] storm-control action block //风暴控制的惩罚动作是阻塞端口