383 votes

Comment puis-je supprimer des règles spécifiques d'iptables ?

J'héberge des services spéciaux HTTP et HTTPS sur les ports 8006 et 8007 respectivement. J'utilise iptables pour "activer" le serveur, c'est-à-dire pour acheminer les ports HTTP et HTTPS entrants :

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006 
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007  
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007 

Cela fonctionne comme un charme. Cependant, je voudrais créer un autre script qui désactive à nouveau mon serveur ; c'est-à-dire restaurer iptables à l'état dans lequel il était avant d'exécuter les lignes ci-dessus. Cependant, j'ai du mal à trouver la syntaxe pour supprimer ces règles. La seule chose qui semble fonctionner est une purge complète :

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Mais cela supprimera également d'autres règles iptables, ce qui n'est pas souhaité.

4 votes

J'ai constaté qu'il est préférable d'utiliser -I au lieu de -A pour ACCEPT lignes. En effet, en général, la dernière ligne (dans le cas de INPUT par exemple) est une DROP ou REJECT et tu veux que ta règle passe avant ça. -A place la nouvelle règle après la dernière règle, tandis que -I le met au début.

5voto

lakshmikandan Points 2088

Supposons que, si vous voulez supprimer les règles NAT,

Listez les IPtables ajoutées en utilisant la commande ci-dessous,

# sudo iptables -L -t nat -v

Chain PREROUTING (policy ACCEPT 18 packets, 1382 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    7   420 DNAT       tcp  --  any    any     anywhere             saltmaster           tcp dpt:http to:172.31.5.207:80
    0     0 DNAT       tcp  --  eth0   any     anywhere             anywhere             tcp dpt:http to:172.31.5.207:8080

Si vous souhaitez supprimer la règle nat des IPtables, exécutez simplement la commande,

# sudo iptables -F -t nat -v

Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'

Ensuite, vous pouvez le vérifier,

# sudo iptables -L -t nat -v

2voto

Vous pouvez également utiliser la syntaxe suivante

 iptables -D <chain name> <rule number>

Par exemple

Chain HTTPS 
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
    ACCEPT     all  --  10.0.0.0/8           anywhere
    ACCEPT     all  --  182.162.0.0/16       anywhere

Pour supprimer la règle

ACCEPTER tout -- 10.0.0.0/8 partout

iptables -D HTTPS 2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X