iptables connlimit:排除多个IP地址

我目前有这个IPTABLES命令:

iptables -A INPUT -s ! 192.168.0.2 -p tcp --syn -m connlimit [...] -j DROP 

据我所知,这样的规则限制了各种参数之后的一些连接数,除了可以自由打开无限数量的TCP连接的192.168.0.2之外。

我关心的是排除更多/ 32个IP(没有特定的范围模式),例如:

 iptables -A INPUT -s ! IP1 IP2 ... IPN -p tcp --syn -m connlimit [...] -j DROP 

iptables怎么可能?

不要这样做。 人们把自己捆绑在各种尝试定制iptables排除的节点上,但这不是解决问题的正确方法。

相反,使用iptables的first-dispositive-match-wins逻辑来为你工作。 首先列出例外:

 iptables -A INPUT -s 192.168.1.1 -p tcp [...] -j ACCEPT iptables -A INPUT -s 192.168.2.2 -p tcp [...] -j ACCEPT iptables -A INPUT -s 192.168.3.3 -p tcp [...] -j ACCEPT 

然后规则:

 iptables -A INPUT -p tcp --syn -m connlimit [...] -j DROP 

如果您不想盲目ACCEPT来自这些特权源IP的数据包,而只是将其限制在进一步的速率限制控制之下,则可以将速率限制逻辑自行closures,并RETURN到主INPUT链(用于进一步处理)来自您希望免除速率限制控制的来源的数据包:

 iptables -N ratelimiter iptables -A ratelimiter -s 192.168.1.1 -j RETURN iptables -A ratelimiter -s 192.168.2.2 -j RETURN iptables -A ratelimiter -s 192.168.3.3 -j RETURN iptables -A ratelimiter --syn -m connlimit [...] -j DROP # iptables -A INPUT -p tcp [...] -j ratelimiter iptables -A INPUT [ further business-appropriate checks ]