交换机
园区网交换机
数据中心与云计算交换机
行业精选交换系列
工业交换机
意图网络指挥官
无线
放装型无线接入点
墙面型无线接入点
智分无线接入点
室外无线接入点
场景化无线
无线控制器
行业精选无线系列
统一运维
身份管理
服务产品
运营商
政府
金融
互联网
制造业
高教/职教
医疗卫生
交通
公共安全
Ruijie-ACTIVE#sh cpu
=======================================
CPU Using Rate Information
CPU utilization in five seconds: 99.29%
CPU utilization in one minute : 55.20%
CPU utilization in five minutes: 18.05%
NO 5Sec 1Min 5Min Process
0 1.00% 1.01% 1.01% LISR INT
1 1.21% 1.44% 1.46% HISR INT
4 0.00% 0.01% 0.03% printk_task
11 93.64% 44.01% 8.88% snmpd //snmpd的cpu占用率很高
12 0.00% 0.00% 0.00% snmp_trapd
Ruijie-ACTIVE#sh cpu
=======================================
CPU Using Rate Information
CPU utilization in five seconds: 99.99%
CPU utilization in one minute : 99.98%
CPU utilization in five minutes: 66.60%
NO 5Sec 1Min 5Min Process
0 0.02% 0.60% 0.75% LISR INT
1 0.61% 0.68% 1.03% HISR INT
4 95.47% 91.14% 52.66% printk_task //当console口打印很多信息的时候,printk_task进程的cpu占用率很高
11 0.31% 0.47% 2.34% snmpd
12 0.00% 0.00% 0.00% snmp_trapd
show log有这样的刷屏的日志
*Jun 26 20:50:58: Ruijie-ACTIVE %SNMP-3-AUTHFAIL: Authentication failure for SNMP req from host 54.214.18.121
*Jun 26 20:50:59: Ruijie-ACTIVE %SNMP-3-AUTHFAIL: Authentication failure for SNMP req from host 54.214.18.122
snmpd:snmp模块初始化线程,接收、处理snmp请求报文并返回响应的报文,如果cpu占有率高的话,原因通常是受到网管端的报文攻击。
printk_task:打印日志信息/调试信息,如果cpu占有率高的话,原因通常是控制台在不停地打印日志信息或调试信息
SNMP模块的工作机制如下:
snmpd任务循环在监听客户端(也就是网管服务器)发送过来的snmp报文,当接收到报文后,会串行(因为是单任务处理)的处理各个从UDP缓冲中送到snmpd的报文,在处理报文过程,首先对报文进行解析,若发现报文携带的Community与设备上面配置的不合法,则会提示认证失败。若报文携带的Community与设备上面配置的相关合法,则会将报文送到具体的mib功能模块进行处理,等待处理完成后,返回处理结果,并响应respone报文。若外界网管发包的速率太快,1秒钟发送大量的报文,报文会先存放在udp socket缓冲区中,然后上层snmpd触发去获取udp缓冲区的报文,进行处理,大报文多的情况下,则有可能导致snmpd cpu占用较高。
printk_task任务的工作机制如下:
循环的监听是否有log信息要输出,当各个模块有log信息要输出时,则会触发printk_task打一条日志到终端控制台,在故障现象中,当一条SNMP请求报文认证失败时,会打出一条认证失败的log信息,若外界网管端,发送大量的snmp请求报文过来时,在都认证失败的情况下,将有可能导致设备一直需要输出SNMP认证失败的log信息,最终导致printk_task任务cpu升高。
故障原因:
通过以上信息可以初步判断是由校外地址54.214.18.121等非法的服务器不断发起SNMP扫描引起的,频率极高,因设备都开启了SNMP-AGENT功能,所以当COMMUNITY不对的时候就会不断送CPU处理,从而导致不断打印PRINT信息,使得CPU飙高,这时转发层面没有影响,但管理层面登陆很困难。
解决方法:
1)关于snmp的检测,print的控制台打印方面先前的版本做的不够优化,存在不合理,10.4(3b17)之后做了全面的优化,即使在遭受攻击或者有大量日志需要打印的时候也会使cpu保持一个良好的值,所以这个问题可以尝试通过升级软件到10.4(3b17)p3版本来优化解决。
2)如果不方便升级,那么还有另外一种方法,就是通过镜像抓包或者是了解到这些snmp报文从哪里端口发过来的,可以在相应的端口的IN方向配置ACL过滤掉snmp认证失败日志里面所提到的非法IP,这样报文在端口就被丢弃,不会送snmp模块处理,也就不会占用CPU,也就不会产品失败的log需要控制台消耗资源打印,例如
Ruijie(config)#ip access-list extended SNMPdeny
Ruijie(config-ext-nacl)#deny ip host 54.214.18.121 any
Ruijie(config-ext-nacl)#deny ip host 54.214.18.122 any
Ruijie(config-ext-nacl)#permit ip any any
Ruijie(config)#inter g1/1
Ruijie(config-if-GigabitEthernet 1/1)#ip access-group SNMPdeny in
注意:不能通过snmp-server community关联ACL的方式来解决,因为这样只是简单使snmp认证报文当不满足ACL条件的时候失败,但是实际snmp报文是已经送cpu处理了,虽然最终攻击者snmp认证失败,但是设备的cpu会因此还是很高,并且控制台还是会打印snmp失败log。