
私は 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 つもなかった場合のパケットは ed に
FORWARD
なります。ACCEPT
ACCEPT
ユーザー定義チェーンにはポリシーを設定できません。決定的なターゲットを持つルールに一致せずにユーザー定義チェーンを最後まで通過したパケットは、パケットを送信したチェーンの次のルールで、ユーザー定義チェーン (「呼び出しチェーン」) に送信された元のチェーンに戻ります。
あ決定的なターゲットはパケットを処分するものであり、例としてはDROP
、、およびが挙げられます。非処分ターゲットには、、およびヌル ターゲットが含まれますACCEPT
(ターゲットのないルールを持つことはまったく問題ありません)。パケットが処分ターゲットのあるルールに一致すると、そのパケットは処分されたとみなされ、それ以上のルール処理は行われません。パケットが処分ターゲットのないルールに一致すると、パケット処理は次のルールで続行されます。MASQUERADE
LOG
ターゲットマッチングと処分に関するこの論理の重要な帰結は、先勝者が勝利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 サーバー パケットが処理されてドロップされ、最後にチェーン ポリシーが他のすべてのパケットを処理して受け入れます。