La mejor solución que funciona para mí sin ningún problema se ve de esta manera:
1. Agregue una regla temporal con algún comentario:
comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION
2. Cuando se agregue la regla y desee eliminarla (o todo lo que tenga este comentario), haga lo siguiente:
iptables-save | grep -v "${comment}" | iptables-restore
Por lo tanto, eliminará al 100 % todas las reglas que coincidan con $comment y dejará las demás líneas intactas. Esta solución funciona durante los últimos 2 meses con alrededor de 100 cambios de reglas por día, sin problemas. Espero que ayude
Ejecute los mismos comandos pero reemplace "-A" con "-D". Por ejemplo:
iptables -A ...
se convierte
iptables -D ...
También puede usar el número de la regla (--line-numbers ):
iptables -L INPUT --line-numbers
Salida de ejemplo:
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
Entonces, si desea eliminar la segunda regla:
iptables -D INPUT 2
Actualizar
Si usa (d) una tabla específica (por ejemplo, nat), debe agregarla al comando de eliminación (gracias a @ThorSummoner por el comentario)
sudo iptables -t nat -D PREROUTING 1
Primero enumere todas las reglas de iptables con este comando:
iptables -S
se enumera como:
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Luego copie la línea deseada y simplemente reemplace -A
con -D
para borrar eso:
iptables -D XYZ -p ...