我有一个工作,写一个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,所以根据关于iptables的websit hashlimit的hashlimit的说明,它说:
这将设置要使用的最大可用存储区。 在这个例子中,这意味着最多500个端口可以同时打开和激活。
所以,我想如果我设置限制为1,它只是允许一个tcp连接保持,但是当我尝试与nc另一个TCP连接,我发现我仍然可以得到连接的工作,所以任何提示?
--hashlimit-htable-size指定散列表中桶的数量。 将其设置为1表示每个条目都映射到同一个存储区(即,无论src / dst是全局限制的)。 这个参数不是必需的,所以你应该忽略它。
允许的速率由--hashlimit选项指定,您已经设置为1000/s ,因此允许每秒1000个数据包。
你也在源端口上散列,这将随着客户端的每次连接尝试而改变,所以你不会实际限制任何东西。
你想要的规则是这样的:
iptables -I INPUT 1 -p tcp -m hashlimit --hashlimit 1/s --hashlimit-mode srcip --hashlimit-name hosts -j ACCEPT