Linuxルーターをiptables
で構成しています。次のようなことを表明する構成の受け入れテストを作成したいと思います。
古代のFAQiptables -C
オプションをほのめかして、「ポートZでXからYへのパケットが与えられた場合、それは受け入れられるか、ドロップされるか」などの質問をすることができます。 FAQはこのように機能することを示唆していますが、iptables
の場合(ただし、例で使用されているようにipchains
ではない可能性があります)、-C
オプションはすべてのルールを実行するテストパケットをシミュレートするのではなく、完全に一致するルールの存在をチェックします。これはテストとしての価値がほとんどありません。ルールが存在するだけでなく、望ましい効果があることを主張したいと思います。
さらに多くのテストVMと仮想ネットワークを作成し、nmap
などのツールで効果を調べることを検討しました。ただし、これらすべての追加の仮想マシンを作成するのは複雑であるため、このソリューションは避けています。これは、テストトラフィックを生成するための非常に重い方法です。また、本番環境の実サーバーでも機能する自動テスト方法があれば便利です。
この問題を他にどのように解決できますか?任意のトラフィックを生成またはシミュレートするために使用できるメカニズムがあり、それがiptables
によってドロップまたは受け入れられたかどうか(またはドロップされるかどうか)を知ることができますか?
少しコーディングする準備ができている場合は、次のことを試すことができます。
clone
システムコールにCLONE_NEWNET
フラグを使用するか、ip netns add
およびip netns exec
コマンドを使用して、新しいネットワーク名前空間を作成します。tun
ドライバーまたはip link add
を使用して一連の仮想ネットワークインターフェイスを作成します。iptables-restore
を使用して構成をロードしますtun
またはveth
デバイスを介して多数のパケットをルールにフィードしますtun
またはveth
デバイスから正しいパケットを取得することを確認してくださいこのアプローチは、転送されたパケットのルールをテストするのに最適です。 iptablesが使用されているマシンとの間の接続には少し手間がかかりますが、この方法でテストすることも可能です。
使用できる一連のコマンドの例を次に示します。
ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-Host
ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-Host
ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2
ip netns exec test-iptables-lan-Host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-Host route add default gateway 203.0.113.1
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-Host
これにより、テスト用に3つのネットワーク名前空間が作成され、そのうちの1つに一連のiptablesルールが読み込まれます。他の2つは、インターネット上の誰かとLAN上のホストの役割を果たします。
上記の例では、最初のtelnet
コマンドはtest-iptables-lan-Host
名前空間からの接続を拒否し、2番目のtelnet
コマンドは、ルールセットがパケットをドロップするとタイムアウトになります。
これは、最初のネットワーク名前空間には影響しません。これは、デフォルトですべての本番環境で行われる名前空間です。本番環境からさらに分離する唯一の方法は、別のホスト(物理または仮想)で実行することです。
専門家の世界は、2社が提供するハードウェア/ソフトウェアの助けを借りてそれを行います。
最初のケースでは、Ixia400Tシャーシ+ Ixloadのようなものを使用できます。
2番目のケースでは、SmartbitsまたはTestcenterラインとそれに対応するアプリケーション
これらのデバイスは、(とりわけ)選択したターゲットサーバーでさまざまな種類の要求を実行する多くのクライアントをエミュレートできます。事前定義された一連の攻撃テストを含むサーバーのセキュリティをテストする準備ができており、いつでも独自のセットを定義できます。また、負荷ストレステストなどの他の多くの機能もあります。
安いオプションではありません。