最近、ファイアウォールが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からのすべてのトラフィックがドロップされますか?
これらのルールが適用されるチェーンを表示していないため、言うのは難しいです。
簡単に言うと、ファイアウォールの場合、FORWARDチェーンから始めて、ACCEPT、DROP、またはREJECTに達するまで、順番に一致するすべてのルールに従う必要があります。
この方法ですべてのルールの最後に到達すると、FORWARDのデフォルトポリシーが適用されます。
iptables -L -n
を実行しても、ルールが条件として定義した可能性のあるインターフェース名は表示されません。異なるターゲットで似ているルールは、急いで書かれていない限りa)、おそらく異なるインターフェイス用に条件付けられています b)ぼんやりした管理者c)による何かの一時的な回避策またはd)上記のすべて
代わりにiptables -L -v -n
を使用してください。
あなたの質問に答えるために:パケットの運命は、端末ターゲットとのfirstマッチングルールによって決定されます(ACCEPTとDROPはそのようなターゲットですが、他にもターミナルではないRETURNなので、処理が続行されます)。そのようなルールがない場合は、チェーンのデフォルトポリシーが適用されます。これは、デフォルトでACCEPT
であり、iptables -P <ACCEPT, DROP>
を介して変更できます。
詳細については、 このかなり優れたワークフロードキュメント を参照してください。
Iptablesルールセットを理解する上での私の個人的なお気に入りはコマンドiptables-save
、すべてのルールをstdoutにダンプします。これは、ルールの正しい順序を理解するのに役立ちます。
Iptablesでのパケットトラバーサルの全体像はここにあります: http://www.frozentux.net/iptables-tutorial/images/tables_traverse.jpg