iptables通过-m limit模块基于令牌桶机制限制ICMP Echo Request速率,如每秒1个、突发3个,先ACCEPT合规请求再DROP超限包,有效缓解“死亡之Ping”攻击。

可以通过 iptables 的 -m limit 模块限制单位时间内 ICMP 响应数量,有效缓解“死亡之Ping”(即恶意大量发送 ICMP Echo Request 导致系统资源耗尽)。
理解核心机制:limit 模块如何起作用
-m limit 是 iptables 的匹配模块,它不直接丢包,而是基于令牌桶算法控制匹配规则的触发频率。关键参数包括:
-
--limit:指定平均速率,如
1/sec、5/min、20/hour - --limit-burst:初始允许突发请求数,默认为 5;超过此值后按 --limit 速率放行
- 需配合
-j ACCEPT或-j DROP使用,通常先 ACCEPT 合法流量,再 DROP 超限流量
设置 ICMP 响应限速的典型规则
以下命令限制本机对 ICMP Echo Request 的响应频率为每秒最多 1 个,突发上限为 3 个:
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
说明:
- 第一条规则匹配并放行符合限速条件的 ping 请求
- 第二条规则丢弃所有未被第一条匹配的 ping 请求(即超频部分)
- 注意顺序不能颠倒,否则限速规则无效
验证与调试技巧
启用规则后可使用以下方法确认效果:
- 用
iptables -L INPUT -n -v查看各规则匹配包数量,观察 DROP 计数是否增长 - 用
ping -c 10 -i 0.1 host快速发包测试(间隔 0.1 秒发 10 个),正常应只收到约 3~4 个回复 - 若完全无响应,检查是否误限了其他 ICMP 类型(如不可达、超时),建议仅针对
echo-request限速
进阶建议与注意事项
生产环境建议结合其他防护手段提升健壮性:
- 禁用不必要的 ICMP 类型:
iptables -A INPUT -p icmp ! --icmp-type echo-request -j DROP - 将限速规则放在更早链位置(如 RAW 或 MANGLE 表的 PREROUTING),避免被 conntrack 等模块干扰
- 考虑使用
hashlimit模块实现按源 IP 限速,防止单一攻击者占用全部配额 - 规则持久化:CentOS/RHEL 用
service iptables save,Debian/Ubuntu 推荐用iptables-persistent


















