Linux

使用 iptables 限制用於高負載伺服器的埠的傳入連接總數

  • June 1, 2019

我有一個正在偵聽埠的伺服器程序,我想限制該埠的傳入 TCP 連接總數。

我嘗試了以下規則:

-A INPUT -p tcp --syn --match multiport --dports 443,4443 -m connlimit --connlimit-above 15000 --connlimit-saddr --connlimit-mask 0 -j DROP

但它會引入“ksoftirqd”的高 CPU 使用率和高數據包響應延遲。伺服器的正常流量大約有 14000 ~ 15000 個來自 9000 ~ 11000 個不同源 IP 的連接。還有其他解決方案嗎?

作業系統:Red Hat Enterprise Linux Server 7.5 版。

iptables:v1.4.21

遇到性能問題並不奇怪,因為您現在要求系統花費大量時間來計算連接數以確定它們是否超過任意數量,並且它必須對每個新請求執行此操作。(出於某種原因,您似乎建立了很多短暫的聯繫。如果可以的話,盡量避免這種情況。)

最終,如果您想保持這種性能水平,您應該在伺服器前面放置一個單獨的防火牆,它可以進行所有必要的連接跟踪並讓您的伺服器專注於為其應用程序提供服務。但是,這會引入一點延遲,因此如果您的應用程序對延遲非常敏感,那麼您可能根本沒有任何好的解決方案。(除了使短暫的連接壽命更長。)

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