web-dev-qa-db-ja.com

ロードされたiptablesモジュールのリスト

ロードされたiptablesモジュールリストを表示する便利な方法はありますか?/lib/iptables /(または/ lib64/iptables /)ディレクトリを一覧表示することで、インストールされているモジュールを表示できますが、アクティブなモジュールリストが必要です。

15
Emre Yazici

ロードされた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ディストリビューションはデフォルトでマウントします)

22
Emre Yazici

これは本当に古い投稿ですが、ここに行きます:

# lsmod | grep ip

ロードされたモジュールのリストを示していますが、ほとんどがiptablesに関連していると思います... /proc/net/ip_tables_matchesモジュールは表示されません(少なくともRHEL 6では表示されません)

4
Gonio

次のディレクトリを確認してください(カーネルバージョンごとに置き換えてください)。

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"

これは十分に文書化されていないようです。

2
Stuart

システムに存在する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

ファイル名は黄色で表示され、問題のモジュールが存在するかどうかを推測できます。説明と依存関係は、以下の2行です。

これはすべてをカバーするわけではありません(これは簡単すぎるためです)。モジュールを手動で調べて存在するかどうかを確認するだけで、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#
1
sjas

Gonioが提案したように、lsmodはロードされたすべてのカーネルモジュールを一覧表示しますが、「ip」をgrepすると、すべてのiptablesモジュールが表示されるわけではありません。

私はむしろ使用したい

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

それでも、リストが完全になるかどうかはわかりません。

0
Aas

別の方法として、これは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
Keith Macdonald