服务器处理ping包也消耗CPU和网卡中断资源,当攻击者发送超过MTU的巨型ping包,或者持续用大包做洪水测试时,服务器要拆包、校验、应答,瓶颈立刻暴露,接下来按环节逐个查。
第一步:快速确认是不是大包导致
先做三分钟对照测试,本机直接ping服务器小包,命令是ping -l 32 服务器IP,观察延迟,再换大包,ping -l 60000 服务器IP,如果小包延迟正常、大包延迟飙升甚至超时,说明问题和大包相关。
接着在服务器上执行tcpdump -i eth0 icmp and length大于1500(按实际网卡名调整),看是否存在大量分片包,正常业务几乎不会产生这种超大型ICMP包,如果分片包每秒几十上百个,大概率是异常流量,行业共识认为,入站ICMP分片包速率超过正常业务基线,就是风险信号。
第二步:临时止血,让服务先恢复
确认大包异常后不要急着查根因,先止血,Linux服务器命令如下:
iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 1500 -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/sec --limit-burst 10 -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
第一条丢大包,第二条给普通ping留每秒5个的保底配额,第三条关掉多余ping,Windows服务器用高级防火墙入站规则,设置ICMPv4回显请求的“远程IP地址”限制或直接禁用。
sysctl -w net.ipv4.icmp_echo_ignore_all=1
这条命令直接屏蔽所有ping,是应急手段,建议启用一到两个小时,配合日志分析,恢复业务后再细化规则,流量特别大的时候,先让机房在交换机上封掉ICMP入口,优先保住业务端口。
ping值高和带宽耗尽有什么区别
很多运维会把“ping大卡”和“带宽跑满”混为一谈,其实两者处理方向完全不同,带宽耗尽通常对所有端口和协议都有影响,ping大包只是其中一种表现。
区分方法:看业务端口是否同步受影响
服务器被大ping包打满入口带宽时,SSH、Web等服务同样会变慢,因为入口带宽被占完了,执行ss -s看TCP连接状态,再在客户端测试curl -I 服务器IP,如果页面返回时间极长,说明业务端口也受影响。
但有一种特殊场景,服务器入口带宽充足,只是CPU软中断被打满,这时候Web访问依然流畅,只有ping时CPU要额外处理ICMP报文导致延迟高,用
top查看si(软中断)占用,如果si飙高而业务进程不高,属于典型的协议栈攻击。
场景:游戏服务器ping大怎么解决
游戏服务器是ping大包攻击的重灾区,玩家的游戏帧同步数据包本身就小,正常不会超过100字节,如果某个战区服务器突然出现大批7500字节以上的ICMP包,基本可以断定是恶意攻击,常见于新服开服或大型团战活动前。
游戏场景推荐直接在防火墙层面丢弃所有大于MTU的非TCP/UDP协议包,代码配置如下:
iptables -A INPUT -p icmp -m length --length 1450 -j DROP iptables -A INPUT -p icmp -m length --length 1451 -j DROP
保留小ping包便于玩家测延迟,丢弃所有可能造成分片的巨型包,游戏服务器延迟敏感,内核参数net.ipv4.tcp_timestamps建议关闭,减少TCP时间戳选项带来的额外CPU开销。
大包导致服务器卡顿的根因优化
止血做完,业务恢复,接下来才是重头戏:把病根挖出来,同样一条命令,不同的系统版本和内核参数,收效差距不小。
调整系统ICMP处理参数
Linux系统对ICMP报文有默认限制,但默认值偏宽松,编辑/etc/sysctl.conf,添加以下配置:
net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0
第一条忽略广播ping,防止被放大利用,第二条忽略伪造错误报文,第三条和第四条禁止接受重定向包,防路由欺骗,执行sysctl -p生效。
部分云服务器默认开启了超大数据包支持,对TCP MSS做了clamping,但对ICMP没有,建议在云平台安全组里单独增加一条规则,丢弃源端口或目的端口为ICMP且包长超过1400字节的报文,不同云厂商的控制台操作路径略有差异,但都支持协议、端口范围、源IP三要素组合配置。
应用层联动优化
抛开攻击和恶意流量不谈,正常业务中哪些场景会产生大ping包?最常见的就是网络监控系统,如Zabbix、Nagios等监控工具,默认ping包大小只有100字节左右,但如果配置了ping丢包率检测,部分版本会发送带固定载荷的大包。
检查监控平台的Ping检查模板,确认“包大小”字段设为
56或100,有运维在运动式排查中拉了大包监控,后来忘了改回,导致监控服务器每隔几秒就发一个1500字节的ping包,虽然单个不打紧,但几十台监控同时发,服务器软中断飙升,也是造成误伤场景。
Nginx或Apache的client_max_body_size字段不会影响ping包,但服务器网卡驱动和中断合并参数需要调整,推荐设置ethtool -C eth0 rx-usecs 50,降低网卡中断合并延迟,让CPU更及时处理小包请求。
预防大包攻击的长期方案
光靠应急命令防不了下一次,长期来看,需要从入口、系统、业务三方面构建纵深防护。
入口层:限制包长加流量清洗
在服务器前端的硬件防火墙或云高防上,设置ICMP包长阈值,超过2048字节的包直接丢弃,行业内的经验做法是:ICMP回显请求的正常包长理论最大为65507字节,但正常业务几乎不会用到超过MTU的ping包,将阈值设为1280字节(IPv6最小MTU)是安全环保的方案。
服务器带宽按业务实际峰值预留,一台支撑200人同时在线的游戏服务器,入口带宽预留50M就够,如果回源流量轻松超过100M,而业务访问量和日常完全对不上,就存在大ping包或DDoS挤占,需要找机房查看近5分钟流量报表。
高防产品的价格因地域和防护峰值而异,国内主流云厂商的包年高防,防护能力在50G到100G的区间费用相差较大,按需选购迭代即可,如果是小公司自用,建议先使用免费工具配置限制,杜绝一次性付费冲动。
系统层:监控与自动化脚本
定时巡检脚本不能只检查TCP连接数,还得看ICMP请求速率,把以下命令写入crontab,每五分钟跑一次:
icmp_count=$(tcpdump -i eth0 icmp and length greater than 1400 -c 50 -w /dev/null 2>&1) if [ $icmp_count -ge 50 ]; then echo "大包ping超限" | mail -s "告警" admin@example.com; fi
这里的-c 50表示抓50个包就算异常,测试云主机建议抓包时长控制在10秒内,避免长时间抓包影响服务器性能,对比基线的意义在于,正常服务器一天可能都见不到几个大ICMP包,一旦出现强制告警即可。
业内专家指出,定期分析防火墙日志,记录ICMP请求源IP、包长和频率,对“每隔几小时准时出现一波”的周期性流量多加关注,这类往往是扫描探测或蓄力前的踩点。
业务层:按需禁用或降级ICMP
对公网服务器,建议直接关闭ICMP回显,但注意保留traceroute所需的TTL expired消息,配置方式如下:
iptables -A INPUT -p icmp --icmp-type timestamp-request -j DROP iptables -A INPUT -p icmp --icmp-type address-mask-request -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/min --limit-burst 5 -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
策略含义是每分钟允许10次ping,瞬间超过5个就拒收,保证网络管理员手动ping得通,基于定时探测的监控平台也能拿到数据,如果内部监控平台需要更频繁的ping,单独把监控服务器IP加白名单即可。
Windows系统的操作类似,在“高级安全Windows Defender防火墙”中新建入站规则,协议类型选ICMPv4,自定义“数据包大小”设置阈值,将规则放到优先位置,有外网地址的Windows Server建议直接限制ICMP回显,因为Windows对ICMP处理的开销比Linux更高,容易成为攻击放大器。
服务器ping数据包过大常见问题解答
ping大包能测出服务器什么故障?
大包ping可以侧面判断网络链路MTU设置、服务器CPU处理能力和入口带宽余量,小包通而大包丢或慢,多数情况下是MTU不一致导致的分片丢失;大包通但延迟抖动大,则更倾向于带宽拥塞或软中断竞争;当发送万字节以上大包时出现固定时延升高,多见于防火墙转发规则限制。
直接用防火墙丢弃大包会影响正常业务吗?
不会影响绝大多数业务,HTTP、HTTPS、数据库端口走的是TCP协议,与ICMP完全无关,CDN回源和视频流走UDP,也不依赖ICMP,受影响的是仅靠ping做监控的探针,以及traceroute路径测试,建议在丢弃大ICMP包的同时放行TTL到期报文,保证基本排障能力。
游戏服务器ping大如何排查是自身问题还是攻击?
先执行“内外对比”,在服务器本机ping回环地址ping 127.0.0.1 -l 60000,本机大包延迟正常说明网卡和协议栈没问题,再在攻击源地域拉一台相邻机房的测试机,同时ping目标服务器,若延迟和丢包同时异常,结合tcpdump抓包看到海量分片包,基本断定是外部大包攻击,此时联系机房开启流量清洗,而不是简单重启服务,因为重启后攻击流量仍在持续。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/605863.html




