STP安全简介
STP(spanning-treeprotocol)的运行并不是“无懈可击”的,STP的运行中也存在安全隐患,所以需要用到STP的安全机制来解决这些潜在的隐患。本实验就来介绍3种STP的安全机制:Bpdu Guard、RootGuard、Loop Guard。
原理:交换环境中,STP在运行过程中通过发送BPDU的方式来选举root及维护STP的运行。而STP的安全规则也是通过对BPDU的“监测”来实现的。实施STP的安全规则是对接入的交换设备进行限制(交换机在接入到交换环境时会发送BPDU信息)。限制交换机不能接入到网络,只能终端接入;限制交换机发送信息抢占root角色等。
BpduGuard
设置Bpdu Guard的交换机只允许终端设备接入进来,不允许交换机的接入,所以,本规则一般用在交换网络的末端,即终端与交换机连接部分。可以在全局下开启,也可以在端口下开启,但是有所不同:
如果Bpdu Guard在全局开启,则只对portfast端口有影响,当Portfast端口收到BPDU后,会shutdown端口,需要注意,某些型号的交换机会将接口error-disabled。
如果BPDU GUARD是在接口下开启的,将对任何端口有影响,无论是正常端口还是portfast端口,当端口收到BPDU后,会变成error-disabled状态。
ROOTGuard
在交换网络中,当两点之间存在多条冗余链路时,就会因为重复的数据包在网络中传递,引起广播风暴,并且还会造成交换机MAC地址表错误,使网络不稳定,因此造成环路。所以需要借助STP来阻塞网络中两点之间多余的链路,而只留一条活动链路,即为转发状态,其它多余链路变为Blocking状态,当转发状态的链路中断时,再启用Blocking状态的端口。但是由于单向链路故障不仅会使Blocking状态的端口错误地变成指定端口,还会造成根端口错误地变成指定端口。
所以要通过启用Root Guard来解决。开启了Root Guard的端口在收不到BPDU的情况下,并不会认为网络是无环的,并不会错误地将端口变成指定端口,而是将收不到BPDU的端口变成loop-inconsistent状态,此状态等同于blocking状态。
举个例子来说:考虑到网络的合理性与稳定性,将SW1选为根交换机是最佳选择,如果要将其它交换机选为根交换机或网络需要变动,都会引起不必要的麻烦。由于可以任意将一台交换机接入网络,而新接入的交换机,有很大的可能会因为自己拥有更高的Bridge-ID而抢夺当前根交换机的角色,这样就会引起网络的震荡。所以只要控制好连接新加入交换机的端口角色,就能够阻止对方成为根交换机。
开启了Root Guard功能的端口,如果在此端口上连接的新交换机试图成为根交换机,那么此端口并不会成为根端口,相反,此端口将进入inconsistent (blocked) 状态,从而防止新加入交换机抢占根角色来影响网络。
注:
运行MSTP时,开启Root guard的端口强制成为指定端口;
开启Root guard的端口在那个VLAN,Root guard就对那些VLAN起作用;
Root guard在可能连接新交换机的端口上面开启;
支持PVST+,Rapid PVST,MSTP;
二层端口才能发送BPDU信息,所以实验时一定要注意关闭三层交换机的端口角色。
LOOPGUARD
LOOPGuard主要用来避免根端口或阻塞端口错误地过渡到转发状态而产生桥接环路;当交换机在启用loop guard特性的非指定端口上停止接收BPDU时,交换机将使得端口进入STP“不一致环路”(inconsistentports)阻塞状态,当不一致端口再次收到BPDU时,端口将根据BPDU自动过滤 到STP状态。
注:
Portfast端口不能开启Loop Guard;
Loop Guard和Root Guard不能同时开启;
Loop Guard多用在光纤,双绞线网络,冗余链路中,这些网络环境中容易出现单向传输故障,如下图:
链路正常运行时,SW3的fa0/2端口是阻塞状态的。但是当SW2的fa0/22出现故障时,SW2不能发送BPDU信息到SW3(但是SW3能发送BPDU信息到SW2),所以这时SW3判断链路出现问题,把fa0/2端口从阻塞状态改为开启状态(指定端口)。此时,SW3的所有端口都处于Forward状态,从而导致交换环路的产生。此时就可以通过Loop Guard来避免fa0/2成为转发状态的端口,从而避免环路。
一.实验目的
了解STP安全在交换环境的应用;
了解STP安全的应用规则;
理解STP安全在实际环境中的应用
二.实验拓扑
实验环境:IOU—L2交换机。
三.实验规划
实验中SW1设置为所有VLAN的主VLAN,SW3作为接入的交换机,即启用STP安全的交换机,SW4作为测试用。然后在SW3上与SW4相连的端口开启STP安全,验证STP的安全机制在交换网络中是怎么工作的。
四.实验步骤
实验前,把SW1设置成所有VLAN的主Root角色,SW2设置为次root角色
SW1(config)#spanning-tree vlan 1-1005 root primary
SW2(config)#spanning-tree vlan 1-1005 root secondary
查看SW1
现在SW1就是一个主ROOT。
实验一:BPDU保护
本实验要用SW4作为一个新的接入者来验证实验的效果
查看SW3的端口开启状态
目前的e3/1是开启状态。
在e3/1上开起BPDU GUARD
然后看弹出来的信息
*Apr 24 12:56:19.023: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDUon port Ethernet3/1 with BPDU Guard enabled. Disabling port.
SW3(config)#
*Apr 24 12:56:19.023: %PM-4-ERR_DISABLE: bpduguard error detectedon Et3/1, putting Et3/1 in err-disablestate
*Apr 24 12:56:20.035: %LINEPROTO-5-UPDOWN: Line protocol onInterface Ethernet3/1, changed state todown
SW3(config)#
*Apr 24 12:56:21.023: %LINK-3-UPDOWN: Interface Ethernet3/1, changed state to down
再show查看端口状态
在受到BPDU信息影响后,E3/1端口down掉了并提示error-disabled(error-disabled信息一些型号的设备可能不会出现)。
实验二:root保护
RootGUARD主要是防止新加入的交换机抢占ROOT角色以至于造成网络震荡,影响网络环境。
目前设置的是SW1为整个网络的root,现在我们对上面的网络进行还原
关闭e3/1的BPDU GUARD功能
SW3(config)#inter e3/1
SW3(config-if)#no spanning-tree bpduguard enable
Shutdown,然后在no shutdown重启此端口
首先研究正常情况下SW4会不会抢占Root角色
在R4上查看谁是root角色
SW4#sho spanning-tree
VLAN0001
Spanning tree enabledprotocol ieee
Root ID Priority 24577
Address aabb.cc00.0600
//参照上页的图知,此为SW1的MAC地址
Cost 200
Port 98 (Ethernet3/1)
HelloTime 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext1)
Address aabb.cc00.0900
HelloTime 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 15
如图显示,目前STP网络中的root角色仍然是SW1.
修改R4的优先级,让R4抢占root角色(以vlan1为例)。
SW4(config)#spanning-tree vlan 1 priority 4096
查看
SW1上查看
仍然是SW4.
接下来实验开启ROOT GUARD之后的情况
把SW4的优先级调大,让SW1成为root
SW4(config)#spanning-tree vlan 1 priority 32768
在SW3的e3/1上开启ROOTGUARD
再次调整SW4的优先级,抢占ROOT(给SW4一个更低的优先级)
SW4(config)#spanning-tree vlan 1 priority 4096
如图,受到BPDU的影响,接口被列入inconsistent(blocked)状态。
查看被列入inconsistent(blocked)状态的端口
列入inconsistent(blocked)状态后,此端口不会再发送信息。
实验二:LOOP环路保护
如图,SW1为根桥,当链路收敛之后,SW3的e2/3会被阻塞。但是当SW2的e2/3端口出现故障后(不能向SW3发送BPDU信息),sw3会错误的判断SW2的e2/3已经down并把自己的e2/3端口从阻塞状态改为转发状态,之后,六个端口就全部成转发状态,造成环路。
接下来开始实验
查看各个交换机端口的状态
sho spanning-tree
如图,SW1,SW2的端口都处于转发状态,SW3的e2/3端口处于阻塞状态。
我们先看在正常情况下,当SW2不向SW3发送BPDU时,SW3的e2/3会出现什么情况
接下来模拟sw2的e2/3端口不能发送BPDU信息。
SW2(config)#inter e2/3
SW2(config-if)#spanning-tree bpdufilter enable
//过滤e2/3端口的BPDU信息,模拟SW2不向SW3发送BPDU时的情况。
然后查看SW3的e2/3状态
如图:SW3错误的判断SW2的e2/3端口down并把自己的阻塞端口e2/3开启为转发状态,此时再看看其他设备的端口STP状态
都是转发状态,也就是说现在三台设备的所有端口都处于转发状态,此时就形成了环路。
那么要怎样避免这种情况呢?看下面的实验。
开启Loop Guard避免环路:
首先关闭SW2 e2/3的BPDU过滤
SW2(config)#inter e2/3
SW2(config-if)# spanning-tree bpdufilter disable
查看SW3的STP端口状态
已经从转发状态变回BLK状态。
实施策略
SW3(config)#inter e2/3
SW3(config-if)#spanning-tree guard loop
查看开启了Loop Guard的端口
可以看到,e2/3已经开启了loop Guard。
再次开启SW2端口的BPDU过滤
SW2(config)#inter e2/3
SW2(config-if)#spanning-tree bpdufilter enable
查看SW3的STP端口状态
如图:SW3的e2/3被标记为*LOOP_Inc,被放入了inconsistent(blocked)状态,可以用另一个命令查看:
由于开启了Loop Guard,当sw3的e2/3收不到BPDU信息时,就会把端口放入inconsistent(blocked)状态。
五.实验总结
1. STP安全包括三大部分:BPDU Guard;Root Guard;Loop Guard;
2. BPGU Guard可以防止接终端的端口接交换设备;可以在全局启用(只适用于portfast),也可以在端口启用;
3. Root Guard可以防止新接入的设备抢占STP的Root角色。一般用在可能接入新设备的端口上;违反策略时,端口将进入inconsistent(blocked) 状态;
4. Loop Guard可以防止单链路故障,一般用在光纤,冗余网络。