iptables hashlimit 速率未按预期工作

iptables hashlimit 速率未按预期工作

我写了以下防火墙规则:

iptables -A 输入 -m hashlimit --hashlimit 1/小时 --hashlimit-burst 3 --hashlimit-mode srcip,dstport --hashlimit-name ssh -j 接受

我原本以为一小时后会充值 1,但实际上一分钟内就充值 1。我从同一个源 IP 和同一个目标端口发送消息,所以我原本以为它每小时会接受 3 个连接,然后 1 个。但它接受的更多(每 20-30 秒一个)。如果我使用--限制 1/小时我可以观察到预期的行为,但我需要使用 hashlimit,因为我需要根据 srcip 和 dstport 进行过滤。我做错了什么?谢谢!

答案1

我认为您遇到了即将过期的条目。手册页中的一项例外情况:

  --hashlimit-burst amount
         Maximum initial number of packets to match: this number gets recharged by
         one every time the limit specified above is not reached, up to this number;
         the default  is  5. When  byte-based rate matching is requested, this
         option specifies the amount of bytes that can exceed the given rate.
         This option should be used with caution -- if the entry expires, the burst
         value is reset too.

并且任何哈希条目的保存时间都是通过选项指定的--hashlimit-htable-expire。我不知道这个条目的默认值是什么,但我猜它比一小时短很多,这可以解释为什么你的连接速度比预期的要快。

您应该考虑进一步调整这些值,例如每分钟允许一个 - 在这种情况下,您的服务器只需要记住最后一分钟的 IP,而不是最后一小时的 IP。

答案2

一个问题是 --hashlimit 1/hour 如果 --hashlimit-upto 1/hour 使用-j ACCEPT

man iptables-extensions

相关内容