Question
Y at-il moyen pratique de montrer chargé iptables Liste des modules? Je peux afficher les modules installés par répertoire INSCRIPTIONS / lib / iptables / (ou / lib64 / iptables /) mais je dois la liste des modules actifs.
La solution
Loaded iptables modules peuvent être trouvés dans / proc / net / ip_tables_matches entrée du système de fichiers proc.
cat /proc/net/ip_tables_matches
En PHP, je peux accéder à la charge iptables modules en chargeant et en pleine explosion contenu du fichier:
$content = file_get_contents('/proc/net/ip_tables_matches');
$modules = explode("\n", $content);
Bien sûr, il nécessite système de fichiers proc doit être monté (GNU Linux La plupart des distros le monter par défaut)
Autres conseils
Ceci est un poste vraiment vieux, mais ici nous allons:
# lsmod | grep ip
affiche une liste des modules chargés, que je pense que la plupart sont liés à iptables ...
/proc/net/ip_tables_matches
ne montre pas les modules (du moins pas dans RHEL 6)
Jetez un oeil dans le répertoire suivant (remplacez par votre version du noyau):
ls /lib/modules/2.6.32-504.8.1.el6.x86_64/kernel/net/netfilter/
Vous pouvez charger le module à l'aide (laisser tomber le .ko
comme indiqué dans le répertoire):
modprobe nf_conntrack_ftp
Vous pouvez vous assurer qu'il est chargé au démarrage en l'ajoutant à:
/etc/sysconfig/iptables-config (RHEL/CENTOS)
IPTABLES_MODULES="nf_conntrack_ftp"
Cela semble être mal documenté.
Essayez ceci pour un aperçu rapide sur les modules netfilter présents sur votre système, ici un one-liner pour coller:
for i in /lib/modules/$(uname -r)/kernel/net/netfilter/*; do echo "\e[33;1m$(basename "$i")\e[0m"; strings "$i" | \grep -e description -e depends| sed -e 's/Xtables: //g' -e 's/=/: /g' -e 's/depends=/depends on: /g'; echo; done
Encore une fois pour une meilleure lisibilité, avec des sauts de ligne ajouté:
#!/bin/bash
for i in /lib/modules/$(uname -r)/kernel/net/netfilter/*
do
echo "\e[33;1m$(basename "$i")\e[0m"
strings "$i" | \grep -e description -e depends | sed -e 's/Xtables: //g' -e 's/=/: /g' -e 's/depends=/depends on: /g'
echo
done
Nom du fichier apparaît en jaune, à partir de laquelle vous pouvez deviner si le module en question existe ou non. Description et dépendances sont les deux lignes ci-dessous.
Ce ne couvre pas tout (parce que ce serait trop facile, ofc). Seulement regardant les modules, manuellement pour voir si elles existent, vous donne 100% des informations précises.
iptables -m <match/module name> --help
Si un module existe sur votre système, à la fin du texte d'aide, vous obtiendrez quelques informations sur la façon de l'utiliser:
ctr-014# iptables -m limit --help
iptables v1.4.14
Usage: iptables -[ACD] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
...
[!] --version -V print package version.
limit match options:
--limit avg max average match rate: default 3/hour
[Packets per second unless followed by
/sec /minute /hour /day postfixes]
--limit-burst number number to match in a burst, default 5
ctr-014#
Il le module n'est pas présent sur votre système:
ctr-014# iptables -m iplimit --help
iptables v1.4.14: Couldn't load match `iplimit':No such file or directory
Try `iptables -h' or 'iptables --help' for more information.
ctr-014#
Gonio a suggéré des listes de lsmod tous les modules du noyau chargés, mais grep "ip" vous ne donnera pas tous les modules iptables.
Je préférerais utiliser
lsmod|grep -E "nf_|xt_|ip"
et encore, je ne suis pas sûr que la liste sera complète.
En tant que méthode alternative, cela peut aussi être fait avec un script Python.
D'abord assurez-vous que vous avez la bibliothèque IPTC. sudo Pip installer --upgrade python-iptables
(En supposant python3 est votre version)
import iptc
table = iptc.Table(iptc.Table.FILTER)
for chain in table.chains:
print("------------------------------------------")
print("Chain ", chain.name)
for rule in chain.rules:
print("Rule ", "proto", rule.protocol, "src:", rule.src, "dst:" , rule.dst, "in:", rule.in_interface, "out:", rule.out_interface)
print("Matches:")
for match in rule.matches:
print(match.name)
print("Target:")
print(rule.target.name)
print("------------------------------------------")