Comment puis-je supprimer des règles de iptables?
Je suis d'hébergement spécial HTTP et HTTPS services sur les ports 8006 et 8007 respectivement. Je utiliser iptables pour "activer" le serveur; c'est à dire à la route entrant ports HTTP et HTTPS:
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 mon serveur de nouveau; c'est à dire la restauration d'iptables pour l'état où il était avant d'exécuter les lignes ci-dessus. Cependant, je vais avoir un moment difficile de déterminer la syntaxe pour supprimer ces règles. La seule chose qui semble fonctionner est une chasse d'eau complet:
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 qui va également supprimer d'autres règles iptables qui est indésirable.
- J'ai trouvé qu'il est préférable d'utiliser
-I
au lieu de-A
pourACCEPT
lignes. C'est parce que généralement, la dernière ligne (pourINPUT
de la chaîne par exemple) est unDROP
ouREJECT
et vous voulez que votre règle à venir avant que.-A
place la nouvelle règle après la dernière règle, tandis que-I
le met au début.
Vous devez vous connecter pour publier un commentaire.
Exécuter les mêmes commandes mais de remplacer le "-A" avec l'option "-D". Par exemple:
devient
-I
ou-R
, vous pouvez toujours le supprimer avec-D
.Vous pouvez aussi utiliser la règle du nombre (--line-numbers):
Exemple de sortie :
Donc, si vous souhaitez supprimer deuxième règle :
Mise à jour
Si vous utilisez(d) un tableau spécifique (par exemple, nat), vous devez l'ajouter à la commande delete (merci à @ThorSummoner pour le commentaire)
iptables -L INPUT --line-numbers | grep -oP "([0-9]{1,3}).*tcp.*domain" | cut -d" " -f1
-t nat
, par exemple:sudo iptables -t nat --line-numbers -L
, et de les supprimer avec-t nat
trop, par exemple:sudo iptables -t nat -D PREROUTING 1
(Peut-être intéressant d'ajouter à la réponse?)La meilleure solution qui fonctionne pour moi sans aucun problème semble de cette façon:
1. Ajouter temporaire à la règle avec certains commentaire:
2. Lorsque la règle ajoutée et vous souhaitez le supprimer (ou de tout avec ce commentaire), faites:
Ainsi, vous aurez 100% de supprimer toutes les règles qui correspondent le commentaire $et laisser les autres lignes intacte. Cette solution fonctionne pour les 2 derniers mois avec environ 100 changements de règles par jour - pas de problèmes.L'espoir, il aide
iptables -S | grep "${comment}" | sed 's/^-A //' | while read rule; do iptables -D $rule; done
spamhaus
iptables interdictions, 2) saisir spamhaus.org/drop, 3) grep pour CIDR IP etiptables -A INPUT -s $ip_cidr -j -m comment --comment "spamhaus"
iptables -S | sed "/$comment/s/-A/iptables -D/e"
😉 comme ceciPremière liste de toutes les règles iptables avec cette commande:
il des listes de ce genre:
Puis copiez la ligne de votre choix, et de remplacer
-A
avec-D
à supprimer:iptables: Bad rule (does a matching rule exist in that chain?).
Quoi maintenant?nat
avecsudo iptables -S -t nat
et vous voulez supprimer un retour de règles, la copie n'est pas assez. Vous devez ajouter-t nat
, par exemplesudo iptables -D ... -t nat
.Utilisation
-D
de commande, c'est commentman
page explique:Faire réaliser cette commande, comme tous les autres de commande(
-A
,-I
) travaille sur la table. Si vous en sont pas à travailler sur la table par défaut(filter
table), l'utilisation-t TABLENAME
de préciser que la table cible.Supprimer une règle de correspondance
Remarque: Ceci ne supprime que la première règle de correspondance. Si vous avez beaucoup de règles adapté(ce qui peut arriver dans iptables), exécutez l'opération plusieurs fois.
Supprimer une règle spécifiée comme un nombre
Autres que de compter le nombre vous pouvez afficher la liste de la ligne numéro
--line-number
paramètre, par exemple:iptables -F
Supposons que, si vous souhaitez supprimer des règles de NAT,
Liste ci-annexé IPtables à l'aide de la commande ci-dessous,
Si vous souhaitez supprimer la règle de nat IPtables, exécutez simplement la commande,
Ensuite, vous pouvez vérifier que,