web-dev-qa-db-ja.com

iptablesはどのようにルールを実行しますか?

最近、ファイアウォールが2つのサーバー間のトラフィックをブロックする問題が発生しており、iptablesが同じIPに適用される複数のルールをどのように処理するかを確認したいと思います。実行した場合iptables -L -n | grep 1.2.3.4次の出力が表示されます:

ACCEPT    all  --  1.2.3.4      0.0.0.0/0
DROP      all  --  1.2.3.4      0.0.0.0/0
ACCEPT    all  --  0.0.0.0/0            1.2.3.4
DROP      all  --  0.0.0.0/0            1.2.3.4

Iptablesはこれらのルールをどのように処理しますか? 1.2.3.4からのすべてのトラフィックがドロップされますか?

2
Dave Child

これらのルールが適用されるチェーンを表示していないため、言うのは難しいです。

簡単に言うと、ファイアウォールの場合、FORWARDチェーンから始めて、ACCEPT、DROP、またはREJECTに達するまで、順番に一致するすべてのルールに従う必要があります。

この方法ですべてのルールの最後に到達すると、FORWARDのデフォルトポリシーが適用されます。

2
ktf

iptables -L -nを実行しても、ルールが条件として定義した可能性のあるインターフェース名は表示されません。異なるターゲットで似ているルールは、急いで書かれていない限りa)、おそらく異なるインターフェイス用に条件付けられています b)ぼんやりした管理者c)による何かの一時的な回避策またはd)上記のすべて

代わりにiptables -L -v -nを使用してください。

あなたの質問に答えるために:パケットの運命は、端末ターゲットとのfirstマッチングルールによって決定されます(ACCEPTとDROPはそのようなターゲットですが、他にもターミナルではないRETURNなので、処理が続行されます)。そのようなルールがない場合は、チェーンのデフォルトポリシーが適用されます。これは、デフォルトでACCEPTであり、iptables -P <ACCEPT, DROP>を介して変更できます。

詳細については、 このかなり優れたワークフロードキュメント を参照してください。

6
the-wabbit

Iptablesルールセットを理解する上での私の個人的なお気に入りはコマンドiptables-save、すべてのルールをstdoutにダンプします。これは、ルールの正しい順序を理解するのに役立ちます。

Iptablesでのパケットトラバーサルの全体像はここにあります: http://www.frozentux.net/iptables-tutorial/images/tables_traverse.jpg

2
f4m8