
Ich versuche gerade herauszufinden, wie iptables
es 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 -v
kann 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-save
wä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-save
nach 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