iptables verwendet die Standardrichtlinie, obwohl die Regel übereinstimmt

iptables verwendet die Standardrichtlinie, obwohl die Regel übereinstimmt

Ich versuche gerade herauszufinden, wie iptableses funktioniert. Ich habe Folgendes gelesen:

Wenn ein Paket ankommt (oder geht, je nach Kette), gleicht iptables es nacheinander mit den Regeln in diesen Ketten ab. Wenn es eine Übereinstimmung findet, springt es zum Ziel und führt die damit verbundene Aktion aus. Wenn es keine Übereinstimmung mit einer der Regeln findet, tut es einfach, was die Standardrichtlinie der Kette vorgibt. Die Standardrichtlinie ist auch ein Ziel.1

Ich habe meine INPUT-Kette auf der Filtertabelle nun wie folgt eingerichtet:

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

Das Pingen der Maschine (10.0.0.1) von einer anderen Maschine (10.0.0.2) über die wg0-Schnittstelle funktioniert jetzt.

Mithilfe von iptables -S INPUT -vkann ich außerdem erkennen, dass die Regel zutrifft, da die Paket- und Bytezähler ansteigen.

Das Hinzufügen eines Protokollziels mit iptables -I INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "bestätigt dies weiter. Ich kann die Pakete jetzt mit sehen dmesg -w.

Wenn ich jetzt jedoch die Standardrichtlinie auf DROP setze, werden keine Pakete mehr protokolliert und ein Ping ist nicht mehr möglich:

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

Ich verstehe das nicht. Ich dachte, es wird das Ziel der ersten passenden Regel verwendet? (Das LOG-Ziel scheint eine Ausnahme zu sein)

Die Regeln stimmten vorher überein und sollten daher auch nach der Änderung der Standardrichtlinie noch übereinstimmen, oder?

Ich würde mich sehr freuen, wenn mir das jemand erklären könnteLinksVerhalten mir gegenüber.

Ausgabe iptables-savewährend der Pingvorgang funktioniert:

# 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

Ausgabe iptables-savenach der Änderung der Standardrichtlinie der INPUT-Kette auf DROP und Pingen funktioniert nicht mehr:

# 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

(Es gibt hier einige zusätzliche Regeln zu meinem Wireguard-VPN-Setup, die ich nicht erwähnt habe, aber sie schienen für meine Frage zur Standardrichtlinie nicht relevant zu sein)

Antwort1

Wie in einem Kommentar zudiese AntwortDie Lösung bestand darin, auch Pakete auf der Schnittstelle eth0 zuzulassen. Dies ist sinnvoll, da die Schnittstelle wg0 nur virtuell ist und die Schnittstelle eth0 zum Aufbau eines Tunnels erforderlich ist.

Antwort2

Die Regeln werden zeilenweise verarbeitet. Wenn also eine Übereinstimmung mit einer Regel vorliegt, werden für dieses IP-Paket keine anderen Regeln verarbeitet. Wenn die Regel ein ACCEPT-Ziel für ein übereinstimmendes Paket angibt, überspringt das Paket die restlichen Regelprüfungen und kann zu seinem Ziel weitergeleitet werden. Wenn eine Regel ein DROP-Ziel angibt, wird diesem Paket der Zugriff auf das System verweigert und nichts wird an den Host zurückgesendet, der das Paket gesendet hat.

Wie Sie angegeben haben, wird im folgenden Regelsatz „Drop“ zuerst gepaart und es gibt keinen weiteren Prozess, um zur nächsten Zeile zu gehen und Ihre Pakete zu protokollieren.

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

Wenn Sie nun Protokollierung hinzufügen und dabei Pakete löschen möchten, kann Ihnen so etwas helfen.

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

Weitere Einzelheiten entnehmen Sie bitte dem Link unten. So protokollieren Sie von der Linux IPTables-Firewall gelöschte Pakete in einer Protokolldatei

verwandte Informationen