我目前有这个 IPTABLES 命令:
iptables -A INPUT -s ! 192.168.0.2 -p tcp --syn -m connlimit [...] -j DROP
据我所知,此类规则根据各种参数限制了一些连接数,但 192.168.0.2 除外,它可以自由打开无限数量的 TCP 连接。
我担心的是排除更多的 /32 IP(没有特定的范围模式),例如:
iptables -A INPUT -s ! IP1 IP2 ... IPN -p tcp --syn -m connlimit [...] -j DROP
使用 iptables 如何实现这一点?
答案1
不要这样做。人们费尽心机试图自定义iptables
排除规则,但这不是解决问题的正确方法。
相反,使用“先手决定胜负”的逻辑来iptables
为你工作。首先列出例外情况:
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 的数据包,而只是想免除它们进一步的速率限制控制,那么你可以将速率限制逻辑移到单独的链中,并将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 ]