beste Weg, um alle Iptables-Regeln zu löschen

83

Ich habe derzeit dieses Snippet:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

Gibt es eine Möglichkeit, dass eine undurchlässige Regel nach dieser Ausführung am Leben bleibt?

Die Idee ist, eine vollständig saubere iptables-Konfiguration zu haben, die leicht durch einen neuen Regelsatz ersetzt werden kann (egal, Routen / ifconfigs Parameter).

kagali-san
quelle

Antworten:

107

Um Ihre Frage kurz und bündig zu beantworten: Nein, nach dem Leeren jeder Tabelle würde es keine "Rest" -Regeln geben. Um jedoch gründlich zu sein, sollten Sie die Richtlinie für die integrierten Komponenten INPUTund FORWARDKetten wie folgt festlegen ACCEPT:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

Klare ip6tables Regeln:

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X

... und das sollte es tun. iptables -nvLsollte diese (oder sehr ähnliche) Ausgabe erzeugen:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Sam Halicke
quelle
9
Du hast 'raw' vergessen: iptables -t raw -F iptables -t raw -X
kK-Storm
there would not be any "leftover" rules after flushing every tableOP spült nicht jeden Tisch. Du auch nicht. So sieht es aus, wenn Sie gründlich sein wollen . Und vielleicht möchten Sie hinzufügen iptables -t "$table" -Z. Beachten Sie, dass Sie auf diese Weise die Liste der Tabellen und ihrer Ketten fest codieren. Daher würde ich ernsthaft über eine Lösung zur Sicherung und Wiederherstellung nachdenken . Oder Sie können einfach iptables entladen .
X-Yuri
23

Dadurch wird Ihr iptables-System korrekt auf einen sehr einfachen Zustand zurückgesetzt:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

Alle Richtlinien werden auf ACCEPT zurückgesetzt und jede aktuell verwendete Tabelle gelöscht. Alle Ketten außer den eingebauten Ketten existieren nicht mehr.

Jerub
quelle
1
Ordentlicher Hack! Ich würde mich jedoch nicht darauf verlassen, da es immer möglich ist, dass subtile Änderungen am Speicher- / Wiederherstellungsformat dazu führen, dass es nicht mehr funktioniert. Halten Sie sich am besten an die API, die das iptablesTool explizit bereitstellt (IMO).
Steven Montag
3
Ich habe es mir anders überlegt: Das Datenformat wird sich wahrscheinlich nicht mehr ändern, da es so weit verbreitet ist. +1.
Steven Montag
2
+1, interessanter Hack
Sam Halicke
Dies schaffte es, übrig gebliebene UFW-Ketten loszuwerden, was die akzeptierte Antwort nicht tat.
20.
Das ist ein kleines Detail, aber Sie könnten die erste ersetzt werden soll print $1mit print $0konsequent sein :)
x-yuri
2

Wann immer ich die Firewall deaktivieren muss, sieht das so aus:

  • iptables-save > iptables.bak
  • service iptables stop (Ich bin auf Fedora)
Realn0whereman
quelle
1

Sie können einfach iptables'Module aus dem Kernel entladen :

modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter

UPD Leider zu schön um wahr zu sein. Solange eine Regel oder eine benutzerdefinierte Kette in einer Tabelle vorhanden ist, ist der Referenzzähler des entsprechenden Moduls 1 und modprobe -rschlägt fehl. Sie können Regeln und benutzerdefinierte Ketten wie folgt löschen:

echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore

oder:

iptables-save | awk '/^[*]/ { print $1 "\nCOMMIT" }' | iptables-restore

Möglicherweise möchten Sie Module auch auf diese Weise entladen (keine fest codierten Modulnamen):

lsmod | egrep ^iptable_ | awk '{print $1}' | xargs -rd\\n modprobe -r

Positiv zu vermerken ist, dass sich danach iptables-saveeine schöne leere Ausgabe ergibt :)

x-yuri
quelle
Das könnte der Hammer hier sein. Vielen Dank.
Konrad Gajewski
0

Das kann man mit 1 oder 2 Befehlen machen:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

Ergebnis:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target     prot opt in     out     source               destination         
Mugoma J. Okomba
quelle
5
Wenn die Standardrichtlinien derzeit auf DROP festgelegt sind, ist dies eine schnelle Möglichkeit, den Server zu sperren. Also, nein, es ist kein 1 oder 2 Befehlsprozess. Sie müssen zuerst auf AKZEPTIEREN setzen, wenn dies nicht der Fall ist.
RyanH
0

Ich musste in letzter Zeit alle Verbindungen sperren, was ich letztendlich getan habe

iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP

zum speichern würde ich folgendes empfehlen

Ubuntu:

/etc/init.d/iptables save
/sbin/service iptables save

RedHat / CentOS:

/etc/init.d/iptables save
/sbin/iptables-save

Zusätzlich zur Sicherung aller aktuellen UFW-Regeln habe ich diese in der Vergangenheit verwendet

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./

Ich denke, dass dies für zukünftige Referenz nützlich sein kann. Dachte ich würde teilen.

Boschko
quelle
0

Sichert die Konfiguration in der Datei iptables_backup.conf und bereinigt alle Regeln.

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

So stellen Sie die vorherige Konfiguration wieder her:

iptables-restore < iptables_backup.conf
Zibri
quelle