Iptables

iptables connlimit:排除多個IP地址

  • February 10, 2015

我目前有這個 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 發送數據包,而只是讓它們免於進一步的速率限制控制,您可以將速率限制邏輯移到自己的鍊和RETURNINPUT鏈中(為了進一步處理)來自您希望免除速率限制控制的源的數據包:

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 ]

引用自:https://serverfault.com/questions/666378