iptablesはルールが一致してもデフォルトのポリシーを使用します

iptablesはルールが一致してもデフォルトのポリシーを使用します

現在、どのように機能するかを学ぼうとしていますiptables。以下を読みました:

パケットが到着すると (またはチェーンによってはパケットが送信されると)、iptables はこれらのチェーン内のルールと 1 つずつ照合します。一致するものが見つかると、ターゲットにジャンプして、それに関連付けられたアクションを実行します。どのルールとも一致するものが見つからない場合は、チェーンのデフォルト ポリシーの指示に従って処理するだけです。デフォルト ポリシーもターゲットです。1

次のように、フィルター テーブルに INPUT チェーンを設定しました。

$ iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -i wg0 -j ACCEPT

wg0 インターフェイスを使用して別のマシン (10.0.0.2) からマシン (10.0.0.1) に ping を実行すると、機能するようになりました。

を使用するとiptables -S INPUT -v、パケット カウンターとバイト カウンターが増加しているため、ルールが一致していることも確認できます。

ログ ターゲットを追加すると、iptables -I INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "これがさらに確認されます。 を使用したパケットを確認できるようになりましたdmesg -w

ただし、デフォルト ポリシーを DROP に設定すると、パケットはログに記録されなくなり、ping も実行できなくなります。

$ iptables -S INPUT
-P INPUT DROP
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT

よく分かりません。最初に一致したルールのターゲットが使用されると思いましたか? (LOG ターゲットは例外のようです)

ルールは以前も一致していたので、デフォルト ポリシーが変更された後でも引き続き一致するはずですよね?

誰かがこれを説明してくれたらとても嬉しいですリンクの私に対する行動。

ping が機能しているときの出力iptables-save:

# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*mangle
:PREROUTING ACCEPT [31842:2917695]
:INPUT ACCEPT [28740:2664375]
:FORWARD ACCEPT [3102:253320]
:OUTPUT ACCEPT [23607:5802958]
:POSTROUTING ACCEPT [26366:6035482]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*raw
:PREROUTING ACCEPT [217327:66651913]
:OUTPUT ACCEPT [102949:46884985]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*nat
:PREROUTING ACCEPT [115:6688]
:INPUT ACCEPT [49:2632]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [62:3720]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*filter
:INPUT ACCEPT [974:119665]
:FORWARD ACCEPT [474:28440]
:OUTPUT ACCEPT [558:81105]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:18:42 2022

iptables-saveINPUT チェーンのデフォルト ポリシーを DROP に変更し、ping が機能しなくなった後の出力:

# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*mangle
:PREROUTING ACCEPT [32468:2982249]
:INPUT ACCEPT [29284:2723905]
:FORWARD ACCEPT [3184:258344]
:OUTPUT ACCEPT [23854:5839963]
:POSTROUTING ACCEPT [26695:6077511]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*raw
:PREROUTING ACCEPT [217953:66716467]
:OUTPUT ACCEPT [103193:46921614]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*nat
:PREROUTING ACCEPT [165:9268]
:INPUT ACCEPT [73:3868]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [71:4260]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*filter
:INPUT DROP [205:26532]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26:9060]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:22:19 2022

(ここでは言及しなかった Wireguard VPN 設定に関連する追加のルールがいくつかありますが、それらは私のデフォルト ポリシーの質問には関係ないようです)

答え1

コメントで述べたようにこの答え解決策は、eth0 インターフェイス上のパケットも許可することでした。wg0 インターフェイスは仮想的なもので、トンネルを確立するには eth0 インターフェイスが必要なので、これは理にかなっています。

答え2

ルールは行ごとに処理されます。したがって、ルールに一致するものがある場合、その IP パケットに対して他のルールは処理されません。ルールが一致するパケットに対して ACCEPT ターゲットを指定している場合、パケットは残りのルール チェックをスキップし、宛先への送信を続行できます。ルールが DROP ターゲットを指定している場合、そのパケットはシステムへのアクセスを拒否され、パケットを送信したホストには何も返されません。

あなたが述べたように、次のルールセットでは、ドロップが最初にマッチングされ、パケットをログに記録するために次の行に進むプロセスはそれ以上ありません。

iptables -S INPUT
-P INPUT DROP   ***Matched Line***
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT

ログ記録を追加し、同時にパケットをドロップしたい場合は、次のようなものが役立つかもしれません。

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

詳細については、以下のリンクを参照してください。 Linux IPTables ファイアウォールでドロップされたパケットをログ ファイルに記録する方法

関連情報