J'héberge des services HTTP et HTTPS spéciaux sur les ports 8006 et 8007 respectivement. J'utilise iptables pour "activer" le serveur; c'est-à-dire pour router 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 se trouvait 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 chasse d'eau 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é.
-I
au lieu de-A
pour lesACCEPT
lignes. C'est parce que généralement, la dernière ligne (pour laINPUT
chaîne par exemple) est unDROP
ouREJECT
et vous voulez que votre règle vienne avant cela.-A
met la nouvelle règle après la dernière règle, tout en la-I
mettant au début.Réponses:
Exécutez les mêmes commandes mais remplacez le "-A" par "-D". Par exemple:
devient
la source
-I
ou-R
, vous pouvez toujours la supprimer avec-D
.Vous pouvez également utiliser le numéro de la règle ( --line-numéros ):
Exemple de sortie:
Donc, si vous souhaitez supprimer la deuxième règle:
Mettre à jour
Si vous utilisez (d) une table spécifique (par exemple nat), vous devez l'ajouter à la commande delete (merci à @ThorSummoner pour le commentaire)
la source
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 les supprimer avec-t nat
aussi, par exemple:sudo iptables -t nat -D PREROUTING 1
(Peut-être utile d'ajouter à la réponse?)La meilleure solution qui fonctionne pour moi sans aucun problème ressemble à ceci:
1. Ajoutez une règle temporaire avec un commentaire:
2. Lorsque la règle a été ajoutée et que vous souhaitez la supprimer (ou tout ce qui contient ce commentaire), procédez comme suit:
Ainsi, vous supprimez à 100% toutes les règles qui correspondent au commentaire $ et laissez les autres lignes intactes. Cette solution fonctionne depuis 2 mois avec environ 100 changements de règles par jour - aucun problème.
la source
iptables -S | grep "${comment}" | sed 's/^-A //' | while read rule; do iptables -D $rule; done
spamhaus
interdictions iptables, 2) saisir spamhaus.org/drop , 3) grep pour les IP CIDR etiptables -A INPUT -s $ip_cidr -j -m comment --comment "spamhaus"
iptables -S | sed "/$comment/s/-A/iptables -D/e"
;) comme çaListe d'abord toutes les règles iptables avec cette commande:
il répertorie comme:
Copiez ensuite la ligne souhaitée et remplacez-la
-A
par-D
pour la supprimer:la source
iptables: Bad rule (does a matching rule exist in that chain?).
quoi maintenant?nat
avecsudo iptables -S -t nat
et que vous souhaitez supprimer l'une des règles renvoyées, la copie ne suffit pas. Vous devez ajouter-t nat
, par exemplesudo iptables -D ... -t nat
.Utilisez la
-D
commande, voici comment laman
page l'explique:Réalisez cette commande, comme toutes les autres commandes (
-A
,-I
) qui fonctionnent sur certaines tables. Si vous ne travaillez pas sur la table par défaut (filter
table), utilisez-t TABLENAME
pour spécifier cette table cible.Supprimer une règle pour correspondre
Remarque: Cela supprime uniquement la première règle correspondante. Si plusieurs règles correspondent (cela peut se produire dans iptables), exécutez-le plusieurs fois.
Supprimer une règle spécifiée sous forme de nombre
Outre le comptage du nombre, vous pouvez répertorier le numéro de ligne avec
--line-number
paramètre, par exemple:la source
iptables -F
Supposons que, si vous souhaitez supprimer des règles NAT,
Listez les IPtables ajoutés à l'aide de la commande ci-dessous,
Si vous souhaitez supprimer la règle nat des IPtables, exécutez simplement la commande,
Ensuite, vous pouvez vérifier que,
la source