ロードされた iptables モジュールのリストを表示する便利な方法はありますか? /lib/iptables/
(または/lib64/iptables/
) ディレクトリをリストすることでインストール済みのモジュールを表示できますが、アクティブなモジュールのリストが必要です。
6 に答える
読み込まれた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 ディストリビューションはデフォルトでマウントします)。
これは本当に古い投稿ですが、ここに行きます:
# lsmod | grep ip
ロードされたモジュールのリストを表示します。これはほとんどがiptablesに関連していると思います...
/proc/net/ip_tables_matches
モジュールは表示されません(少なくともRHEL 6では表示されません)
Gonio が示唆しているように、lsmod はロードされたすべてのカーネル モジュールを一覧表示しますが、「ip」を grep してもすべての iptables モジュールが得られるわけではありません。
むしろ使いたい
lsmod|grep -E "nf_|xt_|ip"
それでも、リストが完全になるかどうかはわかりません。
システムに存在する netfilter モジュールの簡単な概要については、これを試してください。貼り付け用のワンライナーを次に示します。
for i in /lib/modules/$(uname -r)/kernel/net/netfilter/*; do echo -e "\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 "\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#
別の方法として、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("------------------------------------------")