Affichage de toutes les règles iptables

145

Existe-t-il un moyen de voir les iptablesrègles un peu plus en détail?

J'ai récemment ajouté masquerade à plusieurs adresses IP:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

Ce qui a fait ce que je veux, mais quand j'utilise:

iptables -L

Je reçois le même résultat que je reçois normalement:

Chain INPUT (policy ACCEPT)
target    prot opt source        destination

Chain FORWARD (policy ACCEPT)
target    prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source        destination

Comment puis-je voir les règles, y compris celles que j'ai ajoutées? (le système est CentOS 6)

TheLovelySausage
la source

Réponses:

117

Lorsque vous utilisez la -L, --listoption pour lister les règles de pare - feu en cours, vous devez également spécifier la table Netfilter appropriée (un filter, nat, mangle, rawou security). Ainsi, si vous avez ajouté une règle pour la nattable, vous devez explicitement spécifier cette table à l'aide de l' option -t,--table

iptables --table nat --list

Ou en utilisant la forme abrégée des options:

iptables -t nat -L

Si vous ne spécifiez pas de table spécifique, la filtertable est utilisée par défaut.


Pour des résultats plus rapides, il peut être utile d'inclure également -n, --numericpossibilité d'imprimer des adresses IP numériques au lieu de noms de domaine, évitant ainsi la nécessité d'attendre pour les recherches DNS inverses.

Vous pouvez obtenir plus d' informations en incluant la -v, --verboseoption.

Anthony Geoghegan
la source
113

iptablescontrôle cinq tables différentes: filter, nat, mangle, rawet security. Lors d’un appel donné, iptablesn’affiche ou ne modifie qu’une de ces tables, spécifiée par l’argument de l’option -t(valeur par défaut filter). Pour connaître l'état complet du pare-feu, vous devez appeler iptablessuccessivement chacune des tables.

De plus, pour obtenir une représentation précise des règles, vous devez passer l'option -v. Sinon, certains critères importants sont omis dans la sortie, tels que l'interface dans les règles de filtrage (par exemple, une règle indiquant «tout accepter» et une règle indiquant «tout accepter sur l'interface de bouclage» ne peut être distinguée -v).

Ainsi, pour obtenir une présentation complète des règles de netfilter, vous avez besoin de

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

Vous pouvez également appeler le iptables-saveprogramme, qui affiche toutes les règles de tous les tableaux dans un format pouvant être analysé iptables-restore. Ce format est également raisonnablement lisible par les humains (il ressemble beaucoup à une série d'appels à la iptablescommande pour construire la table).

Gilles
la source
56

iptables -Sfait le tour pour moi. Il semble lister toutes les règles actives, même lorsque le service est désactivé.

De la page de manuel:

-S, --list-rules [chain] 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 iptables-save. Comme toutes les autres commandes iptables, elle s’applique à la table spécifiée (le filtre est la valeur par défaut).

Cameron
la source
C'est vraiment une réponse kwl, j'ai aussi remarqué que / sbin / service iptables status donne une sortie similaire
TheLovelySausage
6
+1 Aucun 'semble' à ce sujet - depuis la page de manuel: "-S, Imprimer 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 iptables-save". C'est celui dont j'ai habituellement besoin.
Mike S
3
Je n'ai pas trouvé que c'était le cas. iptables -Sne montre pas toutes mes règles de nat, ce que je peux voir quand je coursiptables -L -t nat
mulllhausen
1
@MikeS Dans la page de manuel, les deux commandes ne fonctionnent que sur la table spécifiée, filtrer par défaut. "Comme toutes les autres commandes iptables, il s’applique à la table spécifiée (le filtre est la valeur par défaut)." Les termes de la documentation sont copiés presque à l'identique pour -S et -L, ils ne diffèrent que par le formatage de la sortie, pas par les règles imprimées. Ceci est vrai au moins sur Ubuntu 16.04 qui sur mon système est iptables v1.6.0.
Scott
D'accord avec @mulllhausen ici. J'avais besoin de "sudo iptables --table nat --list" pour afficher les règles de ma table nat. le drapeau "-S" à lui seul ne les montre pas.
Robert Oschler
15

Ce que je fais est d'exécuter iptables-save > iptables_bckp, cela sauvegarderait toutes les couches, puis éditerais le fichier et restaurerait le fichier iptablesiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

Vous pouvez faire une double sauvegarde afin de modifier l’une d’elles sans perdre vos iptables.

C'est une pratique personnelle, je ne dis pas que c'est la meilleure façon, mais pour moi, ça marche très bien.

Essayer

tachomi
la source
C’est la seule réponse réaliste que j’ai trouvée jusqu’à présent qui supprime également tous les tableaux.
Chris Harrington
4

La iptablescommande nécessite également que vous spécifiiez la table, sinon filtrer la table par défaut. Alors essayez:

iptables -t nat -L
utilisateur425
la source
1

Vous pouvez utiliser:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

Pour trouver toutes les tables et afficher une règle spécifique dans la table.

Tur Le
la source
1

Si cela vous aide vraiment, vous pouvez écrire un script bash et le placer dans un dossier référencé par votre chemin ou par l’intermédiaire d’un alias dans le fichier ~ / .bashrc.

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

N'oubliez pas de donner à votre nouveau script bash des autorisations d'exécution avec chmod

Si l'autorisation pose problème, vous devrez peut-être ajouter sudo devant toutes les iptablescommandes.

ob1
la source
0
iptables -vnxL
iptables -vnxL -tnat

éventuellement en plus, bien que ceux-ci soient très très rarement utilisés:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
sjas
la source