Die beste Lösung, die bei mir ohne Probleme funktioniert, sieht so aus:
1. Temporäre Regel mit Kommentar hinzufügen:
comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION
2. Wenn die Regel hinzugefügt wurde und Sie sie (oder alles mit diesem Kommentar) entfernen möchten, tun Sie Folgendes:
iptables-save | grep -v "${comment}" | iptables-restore
Sie löschen also zu 100 % alle Regeln, die mit $comment übereinstimmen, und lassen andere Zeilen unberührt. Diese Lösung funktioniert seit 2 Monaten mit etwa 100 Regeländerungen pro Tag - keine Probleme. Ich hoffe, es hilft
Führen Sie die gleichen Befehle aus, aber ersetzen Sie das "-A" durch "-D". Zum Beispiel:
iptables -A ...
wird
iptables -D ...
Sie können auch die Nummer der Regel verwenden (--line-numbers ):
iptables -L INPUT --line-numbers
Beispielausgabe:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:domain
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
3 ACCEPT udp -- anywhere anywhere udp dpt:bootps
4 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
Wenn Sie also die zweite Regel löschen möchten:
iptables -D INPUT 2
Aktualisieren
Wenn Sie eine bestimmte Tabelle (z. B. nat) verwenden, müssen Sie sie dem Löschbefehl hinzufügen (danke an @ThorSummoner für den Kommentar)
sudo iptables -t nat -D PREROUTING 1
Listen Sie zuerst alle iptables-Regeln mit diesem Befehl auf:
iptables -S
es listet auf wie:
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Kopieren Sie dann die gewünschte Zeile und ersetzen Sie einfach -A
mit -D
um das zu löschen:
iptables -D XYZ -p ...