使用 iptables 限制允许访问的物理客户端数量

使用 iptables 限制允许访问的物理客户端数量

我有一项工作需要编写 iptables 规则来限制连接我的服务器的物理设备的数量,我尝试过 hashlimit,但似乎不起作用,下面是我的规则:

iptables -I INPUT 1 -p tcp -m hashlimit --hashlimit 1000/s --hashlimit-mode srcip,srcport --hashlimit-name hosts --hashlimit-htable-size 1 -j ACCEPT
iptables -I INPUT 2 -j REJECT

在第一行中,我对 hashlimit 的大小进行了限制,它只有 1,所以根据网站上关于 hashlimit 的说明哈希限制关于 iptables,有这样一段话:

这将设置要使用的最大可用存储桶数。在此示例中,这意味着最多可以同时打开并处于活动状态的端口为 500 个。

所以,我猜如果我将限制设置为 1,它只是允许保留一个 tcp 连接,但是当我尝试使用 nc 建立另一个 tcp 连接时,我发现我仍然可以让连接工作,所以有什么提示吗?

答案1

--hashlimit-htable-size指定哈希表中的桶数。将其设置为 1 意味着每个条目都映射到同一个桶(即,无论源/目标如何,您都是全局限制)。此参数不是必需的,因此您应该忽略它。

--hashlimit允许的速率由您设置为的选项指定1000/s,因此每秒将允许 1000 个数据包。

您还会对源端口进行散列,该端口会随着客户端的每次连接尝试而改变,因此您实际上不会限制任何东西。

你想要的规则是这样的:

iptables -I INPUT 1 -p tcp -m hashlimit --hashlimit 1/s --hashlimit-mode srcip --hashlimit-name hosts -j ACCEPT

相关内容