用iptables限制ICMP请求速率是防御ICMP Flood攻击最直接有效的手段,通过limit模块基于令牌桶机制控制每秒5个、突发10个的Echo Request包,既保障诊断功能又防耗尽资源。

用 iptables 限制 ICMP 请求速率,是防御“死亡之 Ping”(即 ICMP Flood)攻击最直接有效的手段之一。核心思路不是完全禁用 ping,而是控制单位时间内允许通过的 ICMP 包数量,既保障网络连通性诊断功能,又防止恶意高频请求耗尽带宽或 CPU。
理解关键:ICMP 类型与速率控制原理
ping 使用的是 ICMP 协议中的 Type 8(Echo Request),响应为 Type 0(Echo Reply)。iptables 的 limit 模块可对匹配规则的包进行速率限制,基于“令牌桶”机制:设定平均速率(如每秒 5 个)和突发上限(如最多允许 10 个),超出则丢弃。
注意:limit 模块不跟踪连接状态,只统计进入 INPUT 链的包频次;且需配合 --limit-burst 合理设置,避免正常 ping 被误限。
基础防护规则(推荐配置)
以下规则插入到 INPUT 链开头(确保优先匹配):
- iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 5/sec --limit-burst 10 -j ACCEPT
- iptables -A INPUT -p icmp --icmp-type 8 -j DROP
说明:
– 第一条允许每秒最多 5 个新 ping 请求,初始桶容量为 10,适合短时探测(如连续 ping -c 5);
– 第二条将所有未被第一条放行的 Type 8 包直接丢弃;
– Echo Reply(Type 0)默认放行,无需额外限制,因它是响应行为,不会主动发起攻击。
增强策略:区分来源与细化类型
若需更精细控制,可结合源 IP 或其他 ICMP 类型:
- 对特定网段放宽限制(如运维内网):
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type 8 -j ACCEPT - 限制重定向(Type 5)等易被滥用类型:
iptables -A INPUT -p icmp --icmp-type 5 -m limit --limit 1/sec -j DROP - 记录超限请求便于审计(加 LOG 链):
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/min --limit-burst 3 -j LOG --log-prefix "ICMP-LIMIT-DROP: "
验证与持久化要点
执行后立即测试:
- 本机执行 ping -f 目标IP(flood 模式),观察是否明显变慢或超时;
- 用 iptables -L -n -v | grep icmp 查看计数器,确认 DROP 规则有命中;
- 检查系统日志(journalctl -u iptables 或 /var/log/messages)是否有 LOG 记录。
规则重启失效?需保存并启用开机加载:
– CentOS/RHEL:service iptables save 或 iptables-save > /etc/sysconfig/iptables
– Debian/Ubuntu:安装 iptables-persistent 并运行 netfilter-persistent save

















