Existe-t-il un moyen d'afficher les règles de iptables
de manière plus détaillée?
J'ai récemment ajouté la mascarade à une gamme d'adresses IP:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart
Qui a fait ce que je veux, mais quand j'utilise:
iptables -L
J'obtiens la même sortie que d'habitude:
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'ajoute? (le système est CentOS 6)
Lorsque vous utilisez le -L
, --list
option pour répertorier les règles de pare-feu actuelles, vous devez également spécifier la table Netfilter appropriée (une de filter
, nat
, mangle
, raw
ou security
). Donc, si vous avez ajouté une règle pour la table nat
, vous devez spécifier explicitement cette table à l'aide de la -t
, --table
option:
iptables --table nat --list
Ou en utilisant le formulaire abrégé des options:
iptables -t nat -L
Si vous ne spécifiez pas de table spécifique, la table filter
est utilisée par défaut.
Pour des résultats plus rapides, il peut être utile d'inclure également le -n
, --numeric
option pour imprimer des adresses IP numériques au lieu de noms d'hôtes, évitant ainsi d'attendre les recherches DNS inversées.
Vous pouvez obtenir encore plus d'informations en incluant le -v
, --verbose
option.
iptables
contrôle cinq tables différentes: filter
, nat
, mangle
, raw
et security
. Lors d'un appel donné, iptables
affiche ou modifie uniquement l'une de ces tables, spécifiée par l'argument de l'option -t
(par défaut à filter
). Pour voir l'état complet du pare-feu, vous devez appeler successivement iptables
sur 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 qui dit "tout accepter" et une règle qui dit "tout accepter sur l'interface de bouclage" ne peut être distinguée qu'avec -v
).
Ainsi, pour obtenir une présentation complète des règles de netfilter, vous devez
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-save
programme, qui affiche toutes les règles de toutes les tables dans un format qui peut être analysé par iptables-restore
. Ce format est également raisonnablement lisible par les humains (c'est à peu près comme une série d'appels à la commande iptables
pour construire la table).
iptables -S
fait l'affaire pour moi. Il semble répertorier toutes les règles actives, même lorsque le service est désactivé.
Depuis la page de manuel:
-S, --list-rules [chaîne] Imprime 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).
Ce que je fais, c'est d'exécuter iptables-save > iptables_bckp
, cela sauvegardera toutes les couches, puis éditera le fichier et restaurera les iptables iptables-restore < iptables_bckp
# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp
Vous pouvez faire une double sauvegarde afin de modifier l'un d'entre eux sans perdre vos anciennes 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
La commande iptables
requiert également que vous spécifiiez la table, sinon elle sera par défaut filtrée sur la table. Alors essayez:
iptables -t nat -L
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 le tableau.
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
Si cela peut vraiment vous aider, vous pouvez écrire un script bash et le placer dans un dossier référencé par votre chemin ou le référencer via 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 d'accorder à votre nouveau script bash les autorisations d'exécution avec chmod
Si l'autorisation est un problème, vous devrez peut-être ajouter Sudo devant toutes les commandes iptables
.