iptables用-m limit限制ICMP请求速率是缓解“死亡之Ping”的首要防线,通过先ACCEPT合规请求(如1/sec+burst3)、再DROP超限包实现;仅限echo-request(Type 8),避免影响traceroute等诊断功能。

用 iptables 的 -m limit 模块限制 ICMP 响应速率,是缓解“死亡之Ping”最常用也最有效的第一道防线。它不禁止 ping,而是控制单位时间内允许响应的请求数,既保留运维诊断能力,又防止恶意高频请求拖垮系统。
基础限速规则怎么写
核心是两条规则配合使用,顺序不能错:
- 先放行合规请求:iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/sec --limit-burst 3 -j ACCEPT
- 再丢弃超限包:iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
说明:--limit 1/sec 表示平均每秒最多处理 1 个 echo-request;--limit-burst 3 是初始桶容量,允许短时突发(比如连续 ping -c 5),之后就严格按 1 秒 1 个放行。
为什么只限 echo-request,不碰其他 ICMP 类型
ping 使用的是 ICMP Type 8(Echo Request),响应是 Type 0(Echo Reply)。攻击者发洪水只会猛刷 Type 8,而 Type 0 是内核自动回复的,不会被主动滥用。所以限速只需针对 --icmp-type echo-request。误限 type 3(destination-unreachable)或 type 11(time-exceeded)会影响 traceroute 和路径诊断,反而增加排障难度。
常见配置参数参考
根据服务器角色和网络环境,可调整速率值:
- 高安全要求的公网服务器:--limit 1/sec --limit-burst 2
- 普通业务服务器(兼顾可用性):--limit 5/sec --limit-burst 10
- 内网管理节点(信任环境):可放宽至 --limit 10/sec --limit-burst 15,或直接对内网网段放行
注意:--limit-burst 不宜设得过大,否则起不到限流作用;也不宜过小(如设为 1),否则正常连续 ping 也会被断连。
验证规则是否生效
执行后别急着认为搞定,要动手验证:
- 查看匹配计数:iptables -L INPUT -n -v,观察第二条 DROP 规则的包计数是否随测试增长
- 本地快速测试:ping -c 10 -i 0.1 本机IP(0.1 秒间隔发 10 个),预期收到约 3–4 个 reply(受 burst 和 rate 共同影响)
- 若完全无响应,检查是否漏加 -p icmp 或拼错 --icmp-type,或规则被其他更早的 DROP 规则拦截

















