我写了以下防火墙规则:
iptables -A INPUT -m hashlimit --hashlimit 1/hour --hashlimit-burst 3 --hashlimit-mode srcip,dstport --hashlimit-name ssh -j ACCEPT
我原以为爆发会在一小时后充电 1,但实际上它甚至比一分钟更快地充电 1。我从相同的源 IP 和相同的目标端口发送消息,所以我希望它接受 3 个连接,然后每小时接受 1 个。但它接受的更多(每 20-30 秒一次)。如果我使用--limit 1/hour我可以观察到预期的行为,但我需要使用 hashlimit 因为我需要过滤每个 srcip 和 dstport。我究竟做错了什么?谢谢!
我认为您遇到了即将到期的条目。手册页的豁免:
并且使用选项指定保存任何哈希条目的时间量
--hashlimit-htable-expire
。我不知道这个条目的默认值是多少,但我猜它比一小时短得多,这可以解释为什么你可以连接的速度比预期的快。您应该考虑进一步调整这些值,例如每分钟允许一个 - 在这种情况下,您的服务器只需要记住最后一分钟的 IP,而不是最后一小时的 IP。
一个问题
--hashlimit 1/hour
应该是--hashlimit-upto 1/hour
如果使用-j ACCEPT
看
man iptables-extensions