iptablesの自動テストを作成するにはどうすればよいですか?


13

Linuxルーターをで構成していますiptables。私は次のようなことを断言する構成の受け入れテストを書きたいです:

  • インターネット上の誰かからのトラフィックは転送されません。
  • 企業LANのホストからDMZのWebサーバーのポート80へのTCPが転送されます。

古代のFAQはiptables -C、「XからYへのパケットをポートZで与えられた場合、受け入れられるか、ドロップされるか」といった質問をすることができるオプションを暗示しています。FAQはこのように動作することを示唆していますが、(例で使用しているようにではiptablesないかもしれませんがipchains-Cオプションは、すべてのルールを実行するテストパケットをシミュレートするのではなく、正確に一致するルールの存在をチェックするようです。これはテストとしてはほとんど価値がありません。規則が存在するというだけでなく、規則が望ましい効果を持っていると断言したいと思います。

テスト用の仮想マシンと仮想ネットワークをさらに作成しnmap、エフェクトなどのツールでプローブすることを検討しました。ただし、これらの追加の仮想マシンをすべて作成する複雑さのため、このソリューションは避けています。これは、テストトラフィックを生成するための非常に重い方法です。また、実稼働環境の実サーバーでも機能する自動化されたテスト方法論があると便利です。

この問題を他にどのように解決できますか?任意のトラフィックを生成またはシミュレートするために使用するメカニズムがあり、それがドロップまたは受け入れられるiptablesかどうかを知っていますか?


この1はあまりにも面白いかもしれません:security.stackexchange.com/questions/31957/...を
dawud

1
@dawudどちらも重複しているとは思いません。ポートスキャンの実行方法を知っています。これは良いテストではありません。なぜなら、制御できる宛先とソースとの間のテストに限定されているからです。私の懸念は、サーバーから自分自身を締め出すことでもありません。ファイアウォールルールが、設計した効果を実際に持っているかどうかを自動的にテストしたいと思います。
フィルフロスト

回答:


2

少しコーディングする準備ができているなら、これを試すことができます:

  • システムコールのCLONE_NEWNETフラグを使用するcloneか、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つのネットワーク名前空間が作成され、その中のiptablesルールのセットがロードされます。他の2つは、インターネット上の誰かとLAN上のホストの役割を果たします。

上記の例では、最初のtelnetコマンドはtest-iptables-lan-hostネームスペースからの接続拒否をtelnet取得し、2番目のコマンドはルールセットがパケットをドロップするとタイムアウトを取得します。

これは初期のネットワーク名前空間には影響しません。初期の名前空間は、デフォルトですべてのプロダクションが行われる名前空間です。本番環境からさらに分離する唯一の方法は、別のホスト(物理または仮想)で実行することです。


0

プロの世界では、2社が提供するハードウェア/ソフトウェアの助けを借りてそれを行っています。

www.ixiacom.com

www.spirent.com

最初のケースでは、Ixia 400Tシャーシ+ Ixloadのようなものを使用できます。

2番目のケースでは、SmartbitsまたはTestcenterのラインとそれに対応するアプリケーション

これらのデバイスは、(特に)選択したターゲットサーバーでさまざまな種類の要求を実行する多くのクライアントをエミュレートできます。事前定義された一連の攻撃テストを含むサーバーのセキュリティをテストする準備ができており、独自のセットをいつでも定義できます。また、負荷ストレステストなどの他の多くの機能も備えています。

安価なオプションではありません。


それは...静かに有効な答えをダウングレードすることができますどのように平易無知見るために驚くべきである
パット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.