Iptables
iptables connlimit:排除多個IP地址
我目前有這個 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 怎麼可能?
不要那樣做。人們試圖將自己打成各種結,試圖自定義
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 ]