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.

Était-ce utile?

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("------------------------------------------")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top