Linux iptables / conntrack のパフォーマンスの問題

Linux iptables / conntrack のパフォーマンスの問題

ラボには 4 台のマシンでテストセットアップがあります。

  • 古い P4 マシン 2 台 (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 のパフォーマンスの問題などを避けるために、すべての着信パケットをドロップします。私は iptraf でパケット統計を監視します。ファイアウォール (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 は、パケットが流れているにもかかわらず、コンソールではほとんど使用できません (ソフト IRQ の数が多い)
  • ルート キャッシュ ガベージ コレクターは予測不可能であり、デフォルト設定では非常に少ないパケット/秒 (<50k パケット/秒) で圧倒されます。
  • ステートフルiptablesルールを有効にすると、t4に到着するパケットレートが約100kパケット/秒に低下し、実質的にパケットの75%以上が失われます。

そして、これが私の主な懸念事項ですが、2 台の古い P4 マシンが可能な限り多くのパケットを送信するため、ネット上のほぼすべての人がこれを実行できるはずです。

それで、私の質問は次のとおりです。構成またはテスト設定で重要なポイントを見落としていませんか? 特に smp システムでファイアウォール システムを構築するための代替手段はありますか?

答え1

ルーティング キャッシュのないカーネル 3.6 以降に移行することをお勧めします。これで問題の一部は解決するはずです。

答え2

T3 のログ設定はどうなっていますか? ドロップされたパケットがすべてログに記録されている場合は、ディスク I/O が原因である可能性があります。

これはテスト環境なので、T3 ログをオフにしてテストを試すことができます。

関連情報