50 votes

Supprimer une chaîne iptables avec toutes ses règles

J'ai une chaîne annexée avec de nombreuses règles comme :

> :i_XXXXX_i - [0:0]
> -A INPUT -s 282.202.203.83/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.62.253/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.60.62/32 -j i_XXXXX_i 
> -A INPUT -s 224.93.27.235/32 -j i_XXXXX_i 
> -A OUTPUT -d 282.202.203.83/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.62.253/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.60.62/32 -j i_XXXXX_i 
> -A OUTPUT -d 224.93.27.235/32 -j i_XXXXX_i

lorsque j'essaie de supprimer cette chaîne avec :

iptables -X XXXX

mais j'ai obtenu l'erreur suivante (j'ai déjà essayé iptables -F XXXXX) :

iptables : Trop de liens.

Existe-t-il un moyen simple de supprimer la chaîne par une seule commande ?

54voto

Tom Points 720

Vous ne pouvez pas supprimer des chaînes lorsque des règles avec '-j CHAINTODELETE' y font référence. Déterminez ce qui fait référence à votre chaîne (le lien) et supprimez-le. De même, flush puis kill.

-F, --flush [chaîne]

Rincer la chaîne sélectionnée (toutes les chaînes du tableau si aucune n'est donnée). Cela équivaut à supprimer toutes les règles une par une.

-X, --delete-chain [chain]

Supprime la chaîne optionnelle définie par l'utilisateur. Il ne doit y avoir aucune référence à la chaîne. Si c'est le cas, vous m règles de référence avant que la chaîne puisse être supprimée. La chaîne doit être vide, c'est-à-dire qu'elle ne doit contenir aucune règle. Si aucun argument n'est donné, il tentera tentera de supprimer toutes les chaînes non construites du tableau.

20voto

Att Righ Points 311

C'est potentiellement hors sujet, mais c'est ce que j'ai fait après avoir trouvé cet article ! Pour certains cas d'utilisation, l'option -D d'iptables peut être utile. Puisqu'elle vous permet d'effacer les règles de référence ajoutées par programme avec -A (si vous savez précisément comment vous les avez ajoutées).

Par exemple

    iptables -N MYCHAIN
    iptables -A INPUT -i interface -j MYCHAIN
    iptables -A MYCHAIN -j ACCEPT

peut être inversée avec

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN

16voto

Jeff Thomas Points 183

Vous avez besoin de deux étapes, mais cela se fait en un clin d'œil. un commande.

Créez un fichier et placez-y ceci.

# Empty the entire filter table
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

Enregistrez le fichier sous le nom de "clear-all-rules". Maintenant, exécutez la commande suivante :

iptables-restore < clear-all-rules

Désormais, vous pouvez l'effacer à tout moment à l'aide d'une seule commande.

13voto

Priyan R Points 687

Voici un plan alternatif. Il implique trois commandes, et non une seule, mais avec un peu de chance, il devrait fonctionner.

Déposez votre iptables dans un fichier :

iptables-save > /tmp/iptables.txt

Supprimer TOUTES les utilisations (et références) de la chaîne incriminée :

sed -i '/i_XXXXX_i/d' /tmp/iptables.txt

Ensuite, rechargez le jeu de règles :

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt

5voto

gfullam Points 101

Dans le fichier man d'iptables, il y a une option -S

S Affiche toutes les règles de la chaîne sélectionnée. Si aucune chaîne n'est sélectionnée, toutes les chaînes sont imprimées comme dans iptables-save. Comme toutes les autres commandes d'iptables elle s'applique à la table spécifiée (filter est la valeur par défaut).

En utilisant iptables -S | grep <CHAINNAMEHERE> . Par exemple :

root@root:~# iptables -S | grep TRAFFICLOG

-N TRAFFICLOG

-A FORWARD -i eth0 -j TRAFFICLOG

vous pouvez alors voir quelles sont les règles qui bloquent la suppression de la chaîne de la table. Passez en revue chaque règle (à l'exception de la règle iptables -N <CHAINNAMEHERE> et supprimez la règle à l'aide de la touche -D option

- Supprime une ou plusieurs règles de la chaîne sélectionnée. Il existe deux versions de cette commande : la règle peut être spécifiée sous la forme d'un numéro dans la chaîne (en commençant par 1 pour la première règle) ou d'une règle à supprimer. chaîne (en commençant par 1 pour la première règle) ou une règle à faire correspondre.

Par exemple iptables -D FORWARD -i eth0 -j TRAFFICLOG . Une fois que vous avez supprimé chaque règle de votre chaîne, rincez la chaîne à l'aide de la commande -F option, iptables -F <CHAINNAMEHERE> .

- Efface la chaîne sélectionnée (toutes les chaînes du tableau si aucune n'est donnée). Cela équivaut à supprimer toutes les règles une par une.

Supprimez ensuite votre chaîne à l'aide de la fonction -X option, iptables -X <CHAINNAMEHERE>

- Supprime la chaîne optionnelle définie par l'utilisateur. Il ne doit pas y avoir de références à la chaîne. Si c'est le cas, vous devez supprimer ou remplacer les règles de référence avant de pouvoir supprimer la chaîne. La chaîne doit être vide, c'est-à-dire qu'elle ne doit contenir aucune règle. Si aucun argument n'est donné, il tentera de supprimer toutes les chaînes non construites de la table.

Iptables est un ensemble d'outils compliqués et un tutoriel idéal est donc nécessaire. Vous pouvez en essayer un à l'adresse suivante www.iptables.info

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X