Logo Neo93
记一次华为Auto Port-defend started 导致业务频繁投退故障处理与分析

记一次华为Auto Port-defend started 导致业务频繁投退故障处理与分析

June 20, 2025
2 min read
Table of Contents

背景

业务部分反馈存在业务频繁出现投退现象,每次投退时间在几十秒至几分钟不等,投退的站点多的时候成百,较少的时候十几个,初步怀疑是网络原因造成的。

处理过程

到达现场后,先查看了关键节点网络设备的日志信息,不出所料在关键节点交换机设备上看到了相关的日志信息:

CleanShot 2025-06-20 at 19.10.13@2x

交换机本机防攻击

从图中可以看到,交换机在短时间内收到了大量的ARP报文,使得交换机自身判定为存在ARP-miss攻击行为,于是启动了Auto Port-defend(端口自动防御功能),这是华为交换机本机防攻击的一种。

CleanShot 2025-06-20 at 19.35.27@2x

Auto Port-defend,这是华为交换机提供的一种安全机制,用于防止给予端口的拒绝服务(DoS)攻击。通过限制特定协议报文的流量,特别是发往CPU的流量(网络设备在处理ARP报文时,需要消耗CPU资源),来保护交换机免受攻击。该功能默认是开启的,端口防攻击缺省配置默认参数如下表所示:

参数缺省配置
端口防攻击支持防范的报文类型具体可以通过命令 auto-port-defend protocol disable 查看支持的报文类型
端口防攻击功能的状态已开启
端口防攻击的检查阈值端口防攻击的检查阈值,缺省情况下,XLDP为默认CAR10%,其他协议为默认CAR80%。缺省情况下,一般的款型IP分片报文端口防攻击的检查阈值为1228pps。缺省情况下,S5755-S款型IP分片报文的检测阈值为614pps。
端口防攻击的采样比采样比为8,即每8个报文采样1个报文。
端口防攻击的老化探测周期300秒

CPU防攻击缺省配置:

参数缺省配置
防攻击策略设备自带的一个名为 default 的防攻击策略,并且该策略已经被引用
协议报文的 CPCAR设备对上送的报文按照 default 策略缺省的限速值进行限速,可以通过命令 display cpu-defend configuration 查看
协议联动功能具体可通过命令 application-apperceive enable 查看支持的报文类型。
动态自适应调整协议报文的默认 CPCAR具体可以用过命令 cpu-defend dynamic-adjust enable 查看支持的报文类型
过滤器功能未配置
主机防攻击功能未开启主机防攻击功能

通过查看日志信息以及接口的流量信息,初步判断频繁投退的原因是由于存在大量的ARP报文,导致了交换机启动了端口的防御功能,导致业务出现了短暂的中断情况。

现场咨询了业务应用厂家,表示业务自身的探测机制以及业务流程机制就是会发送大量的ARP报文以及ICMP报文,所以现在想要解决问题,措施只有2个:

  1. 业务系统厂家优化程序,减少ICMP报文以及ARP报文的发送。
  2. 在交换机层面,关闭或调整端口防御、CPU防护功能的阈值。

为了保证业务的正常运行,目前段时间内的解决方法只能使用第2种措施。

华为交换机 auto-port-defendauto-defend 同时开启的情况下,两者会有冲突。前者是针对某个有问题的端口进行防御,后者是针对单个IP进行防御

关闭 auto-port-defend 配置:

cpu-defend policy test
auto-defend enable		# 使能 auto-defend 防御
undo auto-port-defend enable	# 关闭auto-port-defend
quit
cpu-defend-policy global		# 全局应用
 
# 添加某个IP到白名单
acl 2000
rule permit source x.x.x.x 0		
cpu-defend policy test
auto-defend whitelist 1 acl 2000
 
# 关闭指定协议的端口防攻击功能
cpu-defend policy test
auto-port-defend protocol arp-request disable
auto-port-defend protocol arp-reply disable
# 配置端口防攻击的老化探测周期
auto-port-defend aging-time <aging-time>
# 配置端口防攻击的白名单
auto-port-defend whitelist <whitelist-id> acl 2000

ARP-miss攻击防护

ARP-miss攻击原理:

如果网络中有用户向设备发送大量目的IP地址不能解析的IP报文(即路由表中存在该IP报文的目的IP对应的路由表项,但设备上没有该路由表项中下一跳对应的ARP表项),将导致设备触发大量的ARP Miss消息。这种触发ARP Miss消息的IP报文(即ARP Miss报文)会被上送到CPU进行处理,设备会根据ARP Miss消息生成和下发大量临时ARP表项并向目的网络发送大量ARP请求报文,这样就增加了设备CPU的负担,同时严重消耗目的网络的带宽资源。

ARP Miss消息攻击的步骤:

CleanShot 2025-06-20 at 19.51.52@2x
  1. 攻击者向网关发送目的地址为10.2.1.5/24且不能解析的IP报文。
  2. 由于设备没有学习到10.2.1.5的MAC地址,触发ARP Miss消息。
  3. 设备根据ARP Miss消息生成和下发临时ARP表项,向目的网络发送ARP请求报文。
  4. 临时ARP表项的老化时间超时后,会清除临时ARP表项。如果此时设备转发IP报文匹配不到对应的ARP表项,且攻击者不断发送不能解析的IP报文,网关会重复执行2和3步骤,一直循环重复,这样就增加了设备CPU的负担,同时严重消耗目的网络的带宽资源。

相关配置:

# 1. 配置基于源IP地址的ARP Miss消息限速功能。
arp miss anti-attack rate-limit source-ip [ source-ip-address [ mask { mask-length | mask } ] ] maximum limit-value			# 配置ARP Miss消息限速功能。
 
# 2. 配置基于VLAN的ARP Miss消息限速功能。
vlan vlan-id		# 进入VLAN视图。
arp miss anti-attack rate-limit limit-value		# 配置ARP Miss消息限速功能。
 
# 3. 配置基于接口的ARP Miss消息限速功能。
interface { interface-name | interface-type interface-number }		# 进入接口视图。
undo portswitch		# 将接口从二层模式切换到三层模式。
arp miss anti-attack rate-limit limit-value		# 配置ARP Miss消息限速功能。
 
arp miss disable		# 禁止VBDIF接口上送ARP Miss消息。
undo arp miss disable		# 允许VBDIF接口上送ARP Miss消息。

配置后,通过观察,问题得到解决;