我错误地认为限制模块是针对每个源 IP 的,但它似乎基于所有请求:
577 36987 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 limit: avg 3/sec burst 5
46 3478 LOG icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 LOG flags 0 level 4 prefix `INET-PING-DROP:'
46 3478 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8
...
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 limit: avg 3/sec burst 5
0 0 LOG icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 LOG flags 0 level 4 prefix `WEB-PING-DROP:'
0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8
如何根据源 IP 地址使用 iptables / netfilter 对 icmp 进行速率限制?
答案1
如果你仍然想知道提示:
iptables -I INPUT -p icmp -m hashlimit --hashlimit-name icmp --hashlimit-mode srcip --hashlimit 3/second --hashlimit-burst 5 -j ACCEPT
假设 INPUT 中的最后一条规则是 drop,或者默认策略是 DROP。每个 IP 每秒最多可 ping 3 次(突发 5 次)。并非所有传入 IP 都总计,正如您使用 -m limit 发现的那样。