La meilleure solution qui fonctionne pour moi sans aucun problème ressemble à ceci:
1. Ajoutez une règle temporaire avec quelques commentaires :
comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION
2. Lorsque la règle est ajoutée et que vous souhaitez la supprimer (ou tout avec ce commentaire), faites :
iptables-save | grep -v "${comment}" | iptables-restore
Ainsi, vous supprimerez à 100 % toutes les règles qui correspondent à $comment et laisserez les autres lignes intactes. Cette solution fonctionne depuis 2 mois avec environ 100 changements de règles par jour - aucun problème. J'espère que cela aide
Exécutez les mêmes commandes mais remplacez le "-A" par "-D". Par exemple :
iptables -A ...
devient
iptables -D ...
Vous pouvez également utiliser le numéro de la règle (--line-numbers ):
iptables -L INPUT --line-numbers
Exemple de sortie :
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
Donc, si vous souhaitez supprimer la deuxième règle :
iptables -D INPUT 2
Mettre à jour
Si vous utilisez (d) une table spécifique (par exemple nat), vous devez l'ajouter à la commande de suppression (merci à @ThorSummoner pour le commentaire)
sudo iptables -t nat -D PREROUTING 1
Listez d'abord toutes les règles iptables avec cette commande :
iptables -S
il s'énumère comme :
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Copiez ensuite la ligne souhaitée, et remplacez simplement -A
avec -D
pour supprimer ça :
iptables -D XYZ -p ...