La migliore soluzione che funziona per me senza problemi appare in questo modo:
1. Aggiungi una regola temporanea con qualche commento:
comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION
2. Quando la regola è stata aggiunta e desideri rimuoverla (o tutto ciò che contiene questo commento), esegui:
iptables-save | grep -v "${comment}" | iptables-restore
Quindi, eliminerai al 100% tutte le regole che corrispondono al commento $ e lascerai intatte le altre righe. Questa soluzione funziona negli ultimi 2 mesi con circa 100 modifiche alle regole al giorno - nessun problema. Spero che sia d'aiuto
Esegui gli stessi comandi ma sostituisci "-A" con "-D". Ad esempio:
iptables -A ...
diventa
iptables -D ...
Puoi anche utilizzare il numero della regola (--line-numbers ):
iptables -L INPUT --line-numbers
Esempio di output :
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
Quindi, se desideri eliminare la seconda regola :
iptables -D INPUT 2
Aggiorna
Se usi (d) una tabella specifica (ad esempio nat), devi aggiungerla al comando delete (grazie a @ThorSummoner per il commento)
sudo iptables -t nat -D PREROUTING 1
Per prima cosa elenca tutte le regole di iptables con questo comando:
iptables -S
elenca come:
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Quindi copia la riga desiderata e sostituisci semplicemente -A
con -D
per eliminarlo:
iptables -D XYZ -p ...