已加载的iptables模块列表

时间:2010-01-07 20:53:20

标签: iptables

有没有方便的方法来显示加载的 iptables 模块列表?我可以通过列出/ lib / iptables /(或/ lib64 / iptables /)目录来显示已安装的模块,但我需要有效的模块列表。

6 个答案:

答案 0 :(得分:22)

加载的 iptables 模块可以在 / proc / net / ip_tables_matches proc文件系统条目中找到。

cat /proc/net/ip_tables_matches

在PHP中,我可以通过加载和爆炸文件内容来访问加载的 iptables 模块:

$content = file_get_contents('/proc/net/ip_tables_matches');
$modules = explode("\n", $content);

当然它需要安装proc文件系统(大多数GNU Linux发行版默认安装它)

答案 1 :(得分:4)

这是一个非常古老的帖子,但我们走了:

# lsmod | grep ip

显示了已加载模块的列表,我认为这些模块与iptables有关... /proc/net/ip_tables_matches未显示模块(至少不在RHEL 6中)

答案 2 :(得分:2)

查看以下目录(根据您的内核版本替换):

ls /lib/modules/2.6.32-504.8.1.el6.x86_64/kernel/net/netfilter/

您可以使用(删除目录中列出的.ko)加载模块:

modprobe nf_conntrack_ftp

或者,您可以通过将其添加到:

来确保它在启动时加载
/etc/sysconfig/iptables-config (RHEL/CENTOS) 

IPTABLES_MODULES="nf_conntrack_ftp"

这似乎记录不清。

答案 3 :(得分:1)

尝试使用此功能快速浏览系统中存在的netfilter模块,这里是一个用于粘贴的单行程序:

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

再次为了便于阅读,增加了换行符:

#!/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

文件名将以黄色显示,您可以从中猜出相关模块是否存在。描述和依赖关系是下面两行。

这不会涵盖所有内容(因为这太容易了,ofc)。只有手动查找模块,查看它们是否存在,才能获得100%准确的信息。

iptables -m <match/module name> --help

如果您的系统上存在模块,则在帮助文本的末尾您将获得有关如何使用它的一些信息:

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# 

您的系统上没有该模块:

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#

答案 4 :(得分:0)

由于Gonio建议lsmod列出所有已加载的内核模块,但是grepping&#34; ip&#34;不会给你所有iptables模块。

我宁愿使用

lsmod|grep -E "nf_|xt_|ip"

仍然,我不确定列表是否完整。

答案 5 :(得分:0)

作为一种替代方法,也可以使用Python脚本来完成。

首先请确保您具有iptc库。     sudo pip install-升级python-iptables

(假设您使用的是Python3版本)

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("------------------------------------------")