iptablesトラバーサルとチェーンポリシー、手動編集

iptablesトラバーサルとチェーンポリシー、手動編集

私は iptables ファイルを手動で編集するのが好きですが、少し混乱する点があります。

マニュアルから iptables を理解した方法によると、iptables はルールを上から下まで走査し、一致するものがない場合はログに記録され、下部のデフォルト ルールによって拒否されます。

すべて順調です。

しかし、これらは何を意味するのでしょうか:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
<accept ssh, ssl, etc>
<log all, deny all>

上部のチェーンには、デフォルトのポリシー「受け入れ」があります。これは、filter後でマッチングするために、パケットをテーブルに受け入れるということだけを意味しているのでしょうか。マニュアルを読んだ後、私にとっては、すべてを受け入れてルールを読み取らないように感じられます。なぜなら、ルールはデフォルトでこのように動作するからです。何かが一致すると、ルールの読み取りを停止し、ポリシーに記述されているとおりに動作します。この動作に関するドキュメントはありますか。十分に具体的なものは見つかりません。

表の後に、これも見ました*filter:

*filter
:RH-Firewall-1-INPUT - [0:0]

これにより、独自のチェーンを追加し、他のチェーンをこのチェーンにルーティングできるようになります。

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

しかし、ここではこのチェーンに対して「ACCEPT」または「DROP」はまったく指定されておらず、代わりにダッシュ (-) が使用されています。

さらに混乱してしまいますが、どのように機能するのでしょうか?

答え1

  1. 組み込みチェーンのポリシーは、チェーン内のすべてのルールを通過したが、決定的なターゲットと一致するルールが 1 つもなかった場合のパケットの処理方法を決定します。上記の例では、チェーンのポリシーが であるため、チェーン内のすべてのルールを通過したが、決定的なターゲットと一致するルールが 1 つもなかった場合のパケットは ed にFORWARDなります。ACCEPTACCEPT

  2. ユーザー定義チェーンにはポリシーを設定できません。決定的なターゲットを持つルールに一致せずにユーザー定義チェーンを最後まで通過したパケットは、パケットを送信したチェーンの次のルールで、ユーザー定義チェーン (「呼び出しチェーン」) に送信された元のチェーンに戻ります。

決定的なターゲットはパケットを処分するものであり、例としてはDROP、、およびが挙げられます。非処分ターゲットには、、およびヌル ターゲットが含まれますACCEPT(ターゲットのないルールを持つことはまったく問題ありません)。パケットが処分ターゲットのあるルールに一致すると、そのパケットは処分されたとみなされ、それ以上のルール処理は行われません。パケットが処分ターゲットのないルールに一致すると、パケット処理は次のルールで続行されます。MASQUERADELOG

ターゲットマッチングと処分に関するこの論理の重要な帰結は、先勝者が勝利SFでは、次のような連鎖を持つ質問をよく見かけます。

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

これには、Webサーバー(tcp dpt:80)へのアクセスをブロックする単一のルールが含まれています。単一の外部IPアドレス、たとえば が1.2.3.4このWebサーバーにアクセスできるようにしたいので、次のルールを追加します。

iptables -A INPUT -p tcp --dport 80 -s 1.2.3.4 -j ACCEPT

そしてこのような連鎖が起こります

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80

ご覧のとおり、最後のルールのパケット数はゼロです。そしてそれらは常にゼロになる. パケットは、その前のルールに一致しなければ最後のルールに一致することはできず、その前のルールは決定的 ( DROP) であるため、パケットは最後のルールに到達することはありません。

これを正しく対処する方法は例外がルールよりも優先されるようにする、 このような:

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
   20   875 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

ここで、例外的な受け入れが最初に処理され、次に例外的なサーバーから来ていない他の Web サーバー パケットが処理されてドロップされ、最後にチェーン ポリシーが他のすべてのパケットを処理して受け入れます。

関連情報