-m limit模块默认全局计数,无法按源ip限速;应改用-m hashlimit(按srcip模式)或-m recent实现每个ip独立限速,避免多ip攻击绕过。

不能直接用 -m limit 限制单个源IP的ICMP频率——这个模块默认是全局计数,不是按IP区分的。想实现“每个IP每秒最多1个Ping”,得配合 -m hashlimit 或 -m recent,而不是基础 limit 模块。
为什么 -m limit 不行
-m limit 统计的是所有来源的总请求数。比如设成 --limit 1/sec,那整个服务器每秒只放行1个 echo-request,不管来自1个IP还是100个IP。攻击者用多个IP发包,这条规则就形同虚设。
正确做法:用 -m hashlimit(推荐)
它支持按源IP哈希分桶计数,真正实现“每个IP独立限速”:
- 允许每个IP每秒最多1个ICMP echo-request,突发容许3个:
- 上面这行是“超限就丢”,所以要先加一条放行规则在它前面:
-
--hashlimit-mode srcip是关键,表示按源IP做限速 -
--hashlimit-name必须唯一,用于内核识别该限速策略 - 两条规则顺序不能错:先 ACCEPT 合规的,再 DROP 超限的
备选方案:-m recent(兼容老内核)
如果系统不支持 hashlimit(如某些CentOS 6或旧Debian),可用 recent 模块模拟:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 记录每个IP首次请求时间,60秒内只允许1次新请求:
- 注意:
--hitcount 2表示“第2次起算超限”,即每个IP最多1次/60秒 - 这种写法略粗糙(无burst控制),但足够防简单扫描
验证和保存
规则生效后,可用 iptables -L INPUT -n -v 查看匹配计数;测试时建议从不同IP分别 ping,观察是否各自受限。
保存规则(以 Debian/Ubuntu 为例):
sudo iptables-save > /etc/iptables/rules.v4CentOS/RHEL 可用 service iptables save 或写入 /etc/sysconfig/iptables。










