BPDU Guard, BPDU Filter, Root Guard, Loop Guard 和UDLD是思科交换机在安全方面考虑所提出的几个特性,能帮助维护网络的稳定性和提高网络安全性。如果有任何可疑的设备接入现有网络、有环路的产生或者线路故障,交换机会自动进行相应的措施,包括把端口暂时关闭来防止危害的发生。下面挨踢小茶详细讲解一下这几个特性。
BPDU Guard
BPDU Guard是对BPDU(Bridge Protocol Data Unit)报文的一个保护机制,来防止网络环路的行程。BPDU Guard是在PortFast模式下配置的,只有在配置了PortFast的情况下才能配置。经过PortFast配置的端口都应该是连接终端的端口,这些端口一般情况下是不会收发BPDU报文的,但是如果该端口配置了BPDU Guard,而在端口接入一台新交换机的话,因为交换机默认会发送BPDU报文,因此BPDU Guard特性就会被激活。
当BPDU Guard被激活后,相应的端口就会进入errdisable状态,这个时候不会进行任何数据的收发。BPDU Guard规定配置所在的接口是比必须接入终端(主机、服务器、打印机等),而非交换设备,一旦非法接入交换设备,就会触发BPDU Guard特性。一旦触发了该特性,这个端口只能等网络工程师手动进行恢复或者配置相应的恢复机制才能恢复到正常收发状态。
PS:BPDU Guard和PortFast配合配置在接入层交换机的接入端口。
相关配置:
switch(config)#[no] spanning-tree portfast edge bpduguard default |全局模式
switch(config-if)#spanning-tree bpduguard enable |接口配置模式
BPDU Filter
BPDU Filter和BPDU Guard一样,也是和PortFast配合使用的。当PortFast功能在端口开启以后,这个端口会正常接收和发送BPDU报文。BPDU Guard的工作是阻止这个端口接收BPDU报文(一接收就把这个端口给errdisable掉),而不阻止发送BPDU报文。而BPDU Filter的工作则是阻止该端口参与任何STP的BPDU报文接收和发送。
BPDU Filter支持在交换机上阻止PortFast-enabled端口发送BPDU报文,这些端口本应该介入终端,而终端是不参与STP(Spanning Tree Protocol)生成树协议的,BPDU报文对他们没有任何意义。阻止发送BPDU报文能达到节省资源的目的。
全局模式下配置BPDU Filter,会导致:
该交换机上所有开启了PortFast功能的端口都会启用BPDU Filter功能
如果端口收到BPDU报文,这个端口将失去PortFast状态,BPDU Filter功能也会丧失,从而成为普通端口参与STP
刚开启的时候,端口会发送10个BPDU报文,如果期间收到任何BPDU报文,这个端口的PortFast和BPDU Filter功能会丧失
接口配置模式下配置BPDU Filter,会导致:
端口忽略BPDU报文
不发送任何BPDU报文
PS:BPDU Filter和PortFast配合配置在接入层交换机的接入端口。如果BPDU Guard和BPDU Filter同时配置上,那么只有BPDU Filter会起作用!
相关配置:
switch(config)#spanning-tree portfast bpdufilter default |全局模式
switch(config-if)#spanning-tree bpdufilter enable |接口配置模式
Root Guard
Root Guard在阻止2层环路上有非常显著的效果,Root Guard强制性将端口设置为designated状态从而阻止其他交换机成为根交换机。换句话说,Root Guard捍卫了根桥在STP中的地位。如果在开启了Root Guard功能的接口上收到了一个优先级更高的BPDU,宣称自己才是跟桥,那么交换机会将这个接口状态变为root-inconsistent状态,原跟桥保持原有的优先地位。
Root Guard不像其他STP的增强特性一样可以在全局模式下开启,它只能手动在所有需要的口开启(那些跟桥不应该出现的接口)。Root Guard特性能有效的防止一个非法授权的设备接入到网络中,并且通过发送优先级高的BPDU报文来冒充自己是跟桥,能有效提高网络的安全性。
如果端口处于root-inconsistent状态,要如何恢复?这个恢复过程是自动的,只要当接口不再受到优先级别高的BPDU之后,该端口就会通过正常的STP状态达到forwarding状态从而正常转发数据,不用任何手工干预。
PS:Root Guard应该配置在所有接入端口中,即接入终端的端口。
相关配置:
switch(config-if)#spanning-tree guard root
Loop Guard
Loop Guard为二层网络提供了防止环路的功能(STP生成树的环路)。如图所示,交换机A是STP跟桥,交换机C的右边端口本身是处于Blocking状态,现在的状态是STP正常状态,不存在环路。当交换机B和交换机C之间的链路存在单向失效时(即C能向B发送信息,B不能向C发送信息),C没有收到B发来的BPDU报文。
当C没有收到B的BPDU报文时间超过Max_age时间即老化时间的时候,C认为B已经不存在了,于是把Blocking口装换为Forwarding状态,从而产生了入下图所示的环路。 而如果开启了Loop Guard功能后,C会自动把右边端口状态更改为Loop Inconsistent状态,从而阻止环路的进一步发生! 同样的,当处于Loop Inconsistent状态的接口再次收到BPDU报文的时候,会根据BPDU报文的内容进行STP计算,从而恢复正常状态。因此Loop Guard的恢复也是完全自动的,无需手工干预。 需要注意的是: - Loop Guard不能再启用了Root Guard的交换机上使用
- Loop GUard不能再启用了Port Fast或者Dynamic Vlan port上使用
UDLD UDLD(Unidirectional Link Detection)是二层的链路检测协议,用来检测光口的二层链路状态。当链路出现单向传输故障的时候,UDLD能检测到这个故障并且把这个端口给关闭。UDLD能在端口是UP/UP状态但无法收到或发送BPDU报文的情况下发挥作用。 当UDLD开启后,相应的端口会以默认的15秒为周期发送UDLD报文并且期望收到相应的UDLD报文,如果在老化时间(默认是45秒)都没有收到相应的UDLD报文的话,就会认定存在单向链路失效,把该端口变为errdisable状态。 PS:UDLD一般和Loop Guard配合使用。 配置: Switch(config-if)# udld enable [aggressive] |全局模式 Switch(config)# udld { enable | aggressive } |接口配置模式
|