Comment supprimer une règle précise de iptables.

Il peut parfois être nécessaire de supprimer une règle de la liste de iptables. La commande pour ce faire est assez simple. Au moins deux options s’offrent à nous.

  1. Supprimer la règle en utilisant tous ses paramètres.
sudo iptables -D <chaine> [-s <adresse IP>] [-d <adresse IP>] [-p <protocole>] [--dport <port>] -j <action>

Par exemple :

sudo iptables -D INPUT -s 1.1.1.1 -p tcp --dport 123 -j ACCEPT
  1. Supprimer la règle en utilisant son numéro de ligne.
sudo iptables -D <chaine> <numéro de ligne>

Par exemple :

sudo iptables -D INPUT 3

D’accord, c’est bien beau tout ça, mais si nous avons des centaines de règles dans notre pare-feu, comment en récupérer facilement le numéro de ligne? Dans mon cas, j’utilise fail2ban pour protéger mon serveur contre les attaques de type bruteforce sur le service SSH. Il en résulte donc que mon pare-feu contient un nombre impressionnant de règles. En fait récupéré le numéro de ligne peut-être bien plus simple qu’il n’y parait.

Par exemple, disons que je cherche à supprimer une adresse IP en particulier (ici, l’adresse 123.123.123.123) de mon pare-feu dans la chaîne fail2ban-ssh.

sudo iptables -L fail2ban-ssh -n --line-number | grep 123.123.123.123

Le résultat de cette commande (si l’adresse 123.123.123.123 est bel et bien bannie) serait similaire à ceci :

323  REJECT     all  --  123.123.123.123         0.0.0.0/0            reject-with icmp-port-unreachable

Où le contenu de la première colonne serait le numéro de ligne, dans cet exemple 323.

Il ne nous resterait qu’à supprimer la ligne 323 avec la commande suivante.

sudo iptables -D fail2ban-ssh 323

Voilà!