Список загруженных модулей iptables - PullRequest
15 голосов
/ 07 января 2010

Есть ли какой-нибудь удобный способ показать список загруженных iptables модулей? Я могу показать установленные модули, перечислив каталог / lib / iptables / (или / lib64 / iptables /), но мне нужен список активных модулей.

Ответы [ 6 ]

22 голосов
/ 15 января 2010

Загруженные 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 монтируют ее по умолчанию)

4 голосов
/ 31 октября 2012

Это действительно старый пост, но здесь мы идем:

# lsmod | grep ip

показывает список загруженных модулей, которые, я думаю, больше всего связаны с iptables ... /proc/net/ip_tables_matches не показывает модули (по крайней мере, не в RHEL 6)

2 голосов
/ 18 февраля 2015

Загляните в следующий каталог (замените на версию вашего ядра):

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"

Это плохо документировано.

1 голос
/ 09 марта 2015

Попробуйте это для быстрого обзора модулей сетевого фильтра, присутствующих в вашей системе, здесь приведен один вкладыш для вставки:

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#
0 голосов
/ 05 февраля 2019

В качестве альтернативного метода это также можно сделать с помощью скрипта Python.

Сначала убедитесь, что у вас есть библиотека iptc. sudo pip install --upgrade 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("------------------------------------------")
0 голосов
/ 24 марта 2014

Как предложил Гонио, lsmod выводит список всех загруженных модулей ядра, но с помощью команды "ip" вы не получите все модули iptables.

Я бы лучше использовал

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

и все же, я не уверен, что список будет полным.

...