Linux iptables / conntrack 效能問題

Linux iptables / conntrack 效能問題

我在實驗室裡有一個測試設置,有 4 台機器:

  • 2 台舊 P4 機器(t1、t2)
  • 1 Xeon 5420 DP 2.5 GHz 8 GB RAM (t3) Intel e1000
  • 1 Xeon 5420 DP 2.5 GHz 8 GB RAM (t4) Intel e1000

自從過去幾個月我們遭受了多次 syn-flood 攻擊以來,為了測試 Linux 防火牆的效能。所有機器都運行 Ubuntu 12.04 64 位元。 t1、t2、t3透過1GB/s交換器互連,t4透過額外的介面連接到t3。所以 t3 模擬防火牆,t4 是目標,t1,t2 扮演攻擊者,透過產生封包風暴(192.168.4.199 是 t4):

hping3 -I eth1 --rand-source --syn --flood 192.168.4.199 -p 80

t4 丟棄所有傳入資料包,以避免與網關混淆、t4 的效能問題等。我已如下設定防火牆(t3):

  • 庫存 3.2.0-31-generic #50-Ubuntu SMP 內核
  • rhash_entries=33554432 作為核心參數
  • sysctl 如下:

    net.ipv4.ip_forward = 1
    net.ipv4.route.gc_elasticity = 2
    net.ipv4.route.gc_timeout = 1
    net.ipv4.route.gc_interval = 5
    net.ipv4.route.gc_min_interval_ms = 500
    net.ipv4.route.gc_thresh = 2000000
    net.ipv4.route.max_size = 20000000
    

(我做了很多調整,以便在 t1+t2 發送盡可能多的資料包時保持 t3 運行)。

這些努力的結果有些奇怪:

  • t1+t2 設法分別發送大約 200k 資料包/秒。在最好的情況下,t4 總共大約有 200k,因此一半的資料包遺失。
  • t3 在控制台上幾乎無法使用,儘管資料包流經它(大量軟中斷)
  • 路由快取垃圾收集器遠非可預測的,並且在預設設定下被很少的資料包/秒(<50k 資料包/秒)淹沒
  • 啟動有狀態 iptables 規則會使到達 t4 的封包速率下降到大約 100k 封包/秒,實際上遺失了超過 75% 的封包

這是我主要關心的問題 - 兩台舊的 P4 機器發送盡可能多的資料包 - 這意味著網路上的幾乎每個人都應該能夠做到這一點。

所以我的問題是:我是否忽略了配置或測試設定中的一些重要點?是否有其他方法可以建造防火牆系統,特別是在 smp 系統上?

答案1

我會遷移到核心 >= 3.6,它不再有路由快取。這應該可以解決你的部分問題。

答案2

您在 T3 上的日誌記錄設定如何?如果記錄了所有丟棄的資料包,則磁碟 I/O 可能是原因。

由於這是一個測試環境,您可以在關閉 T3 日誌記錄的情況下嘗試測試。

相關內容