
Um alle Regeln in iptables zu löschen, benutze ich dies
#!/bin/bash
echo "clearing iptables ... "
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
Dies funktioniert, solange keine Einträge mehr in iptables vorhanden sind, was überprüft wird mit
sudo iptables -L
oder
sudo iptables -S
Allerdings wird Datenverkehr, der an ein anderes Ziel weitergeleitet wurde, weiterhin an dieses Ziel geleitet.
Es scheint, als wären die gelöschten Iptables nach dem Löschen immer noch aktiv!
Bisher konnte ich diese Regeln nur durch einen Neustart des Systems loswerden, was jedoch nicht sehr elegant ist.
InDebianiptables scheint nicht als Dienst ausgeführt zu werden, daher funktioniert das Starten oder Stoppen dieses Dienstes nicht.
Wie kann ich iptables vollständig löschen bzw. zurücksetzen, sodass zuvor definierte Regeln deaktiviert werden?
Antwort1
Das Leeren der iptables-Regeln wirkt sich nicht auf bereits hergestellte Verbindungen aus, die mit umgeleitet wurden
DNAT
. Dies ist relevant, da der Conntrack-Eintrag für UDP-Pakete die Umleitungsinformationen enthält, die neben den iptables-Regeln verwendet werden.Überprüfen Sie die vorhandenen Conntrack-Einträge mit
conntrack -L
und überwachen Sie die Conntrack-Ereignisse mit demconntrack -E
Befehl.Mit dem
conntrack -F
Befehl löschen Sie die Conntrack-Einträge. Die neuen UDP-Pakete werden nicht mehr umgeleitet.netfilter-persistent
Verwenden Sie die Pakete und , um die iptables-Regeln als Dienst zu verwalteniptables-persistent
.Verwenden Sie besser
iptables-save
/iptables-restore
-Befehle, anstatt die manuell auszuführeniptables
. Das ist sicherer und atomarer.Um die iptables-Regeln auf einem Remote-Host zu verwalten, verwenden Sie den
iptables-apply
Befehl, der ein Rollback des Regelsatzes ermöglicht, wenn dieser nicht bestätigt wurde.
Antwort2
sudo ufw status verbose; sudo iptables -L;
Vielleicht läuft ufw weiter? Versuchen Sie, es zu stoppen.
Können Sie etwas mehr über Ihr System, Ihr Netzwerk und den noch weitergeleiteten Datenverkehr erzählen?
1–2 Beispiele sind ok, inkl. der anfänglichen Firewall-Regel.
BEARBEITEN:
Durch einige meiner Skripte überprüft..... Auch die Ketten spülen.
sudo iptables -F INPUT
sudo iptables -F FORWARD
sudo iptables -F OUTPUT
Antwort3
Ihr Skript zum Löschen der iptables-Regeln reicht aus, um alle Regeln zu löschen und die Standardrichtlinie auf ACCEPT zu setzen. Dadurch wird die Firewall effektiv deaktiviert, da keine Regeln vorhanden sind und alles erlaubt ist.
Aus Ihren Kommentaren wissen wir, dass Sie UDP-Pakete senden. Sie haben möglicherweise das Gefühl, dass die alten Regeln noch eine Weile aktiv sind, insbesondere wenn ein kontinuierlicher Strom von UDP-Paketen durch Ihre Firewall-Maschine geht. Dies liegt hauptsächlich daran, dass UDP keine Möglichkeit hat, die Verbindung zu schließen, und die Firewall daher nicht weiß, wann der aktuelle aktive Fluss beendet ist. Die einzige Möglichkeit besteht darin, ein Leerlauf-Timeout zu verwenden, um aktive „Verbindungen“ zu leeren, wenn keine Pakete mehr gesehen werden.
Sie haben zwei Möglichkeiten:
- Warten Sie eine Weile, bevor Sie es erneut versuchen. Dazu müssen alle aktuell aktiven „Verbindungen“ beendet werden. Das UDP-Timeout finden Sie unter
/proc/sys/net/netfilter/nf_conntrack_udp_timeout
. - Verwenden Sie
conntrack
das Tool, um die vorhandenen „Verbindungen“ manuell zu löschen.
Bitte beachten Sie, dass die Linux-Firewall aktive Sockets für TCP/UDP verfolgt, auch wenn UDP ein verbindungsloses Protokoll ist.