我正在设置一项服务,需要限制每个端口的连接数。
每个客户端可以有多个连接,所以我想使用 IP 地址来限制它,但 IP 地址不是唯一的,而且可能会改变。(我知道多个客户端可以在 NAT 后面连接,这是可以的)
有没有办法使用 iptables 来做到这一点?
答案1
应该可以使用两个限制检查(也许--connlimit-saddr
):
第一个检查是检查连接总数 (connlimit-mask 0),限制为 0(零)。如果服务器仍低于限制(例如,如果
--connlimit-upto 0
成功),则接受连接。如果检查表明您高于零,则进行第二个检查。第二个检查针对的是单个 IP 地址(connlimit-mask 32(对于 IPv4)或 128(对于 IPv6)。限制也是零连接,但结果相反:如果你多于限制,则接受连接。如果等于或低于限制,则拒绝新连接。
如果在步骤 1 中总体检查显示“高于零”,但单独检查没有给出相同的结果,则意味着所有当前连接都来自与新地址不同的地址。
如果我的逻辑正确的话,这应该可行:
-A INPUT -p tcp --dport 1234 -j LIMITED
-A LIMITED -4 -m connlimit --connlimit-saddr --connlimit-mask 0 --connlimit-upto 0 -j ACCEPT
-A LIMITED -4 -m connlimit --connlimit-saddr --connlimit-mask 32 --connlimit-above 0 -j ACCEPT
-A LIMITED -j REJECT