すべてのiptablesルールを表示する


144

iptablesルールをもう少し詳細に表示する方法はありますか?

最近、さまざまなIPにマスカレードを追加しました。

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

それは私がそれをしたいことをしましたが、私が使用するとき:

iptables -L

通常の出力と同じ出力が得られます。

Chain INPUT (policy ACCEPT)
target    prot opt source        destination

Chain FORWARD (policy ACCEPT)
target    prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source        destination

追加したルールを含むルールを表示するにはどうすればよいですか?(システムはCentOS 6です)

回答:


116

使用している場合-L--list現在のファイアウォールルールを一覧表示するオプションを、あなたはまた、適切なNetfilterのテーブルを指定する必要があります(のいずれかをfilternatmanglerawまたはsecurity)。したがって、natテーブルにルールを追加した場合は-t--tableオプションを使用してこのテーブルを明示的に指定する必要があります。

iptables --table nat --list

または、オプションの短い形式を使用します。

iptables -t nat -L

特定のテーブルを指定しない場合、そのfilterテーブルがデフォルトとして使用されます。


より高速な結果を得るには、ホスト名の代わりに数値のIPアドレスを出力するための-n--numericオプションも含めると便利です。これにより、逆DNSルックアップを待つ必要がなくなります。

-v--verboseオプションを含めることにより、さらに多くの情報を取得できます。


113

iptables:5つの異なるテーブルを制御しfilternatmanglerawsecurity。特定の呼び出しでiptables、オプションの引数で指定されたこれらのテーブルの1つのみを表示または変更します-t(デフォルトはfilter)。ファイアウォールの完全な状態を確認するにはiptables、各テーブルを連続して呼び出す必要があります。

さらに、ルールを正確に表現するには、オプションを渡す必要があります-v。そうでない場合、フィルタールールのインターフェイスなど、いくつかの重要な基準が出力で省略されます(たとえば、「すべてを受け入れる」というルールと「ループバックインターフェイスですべてを受け入れる」というルールはでのみ区別できます-v)。

したがって、netfilterルールの完全なプレゼンテーションを取得するには、次のものが必要です。

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

または、iptables-saveプログラムを呼び出して、すべてのテーブルのすべてのルールをで解析できる形式で表示できますiptables-restore。この形式は、人間が合理的に読み取ることもできます(iptablesテーブルを構築するための一連のコマンド呼び出しによく似ています)。


56

iptables -S私のためにトリックを行います。サービスがオフの場合でも、すべてのアクティブなルールがリストされているようです。

manページから:

-S、--list-rules [chain]選択したチェーン内のすべてのルールを出力します。チェーンが選択されていない場合、すべてのチェーンはiptables-saveのように出力されます。他のすべてのiptablesコマンドと同様に、指定したテーブルに適用されます(フィルターがデフォルトです)。


これは本当にクロールの答えです、/ sbin / service iptablesステータスが同様の出力を与えることにも気付きました
-TheLovelySausage

6
+1。それについては「見えない」-manページから:「-S、選択されたチェーンのすべてのルールを印刷する。チェーンが選択されていない場合、すべてのチェーンはiptables-saveのように印刷される」。これは私が通常必要とするものです。
マイクS

3
これが事実だとは思いませんでした。iptables -Sすべてのnatルールを表示しません。これは実行時に確認できますiptables -L -t nat
-mulllhausen

1
@MikeSマニュアルページから、両方のコマンドは指定されたテーブルでのみ動作し、デフォルトでフィルタリングします。「他のすべてのiptablesコマンドと同様に、指定されたテーブルに適用されます(フィルターがデフォルトです)。」ドキュメント内の文言は、-Sと-Lでほぼ同じようにコピーされます。出力のフォーマットのみが異なり、印刷される規則は異なります。これは、少なくともUbuntu 16.04(私のシステムではiptables v1.6.0)で当てはまります。
スコット

ここで@mulllhausenに同意します。natテーブルのルールを表示するには、「sudo iptables --table nat --list」が必要でした。「-S」フラグ自体はそれらを表示しませんでした。
ロバートオシュラー

15

私がやることはiptables-save > iptables_bckp、すべてのレイヤーをバックアップし、ファイルを編集してiptablesを復元することですiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

二重のバックアップを作成して、過去のiptablesを失うことなくそのうちの1つを変更できます。

これは個人的な慣行であり、これが最良の方法であるとは言いませんが、私にとってはうまくいきます。

試してみる


これは、私がこれまでに発見した唯一の現実的な答えであり、実際にすべてのテーブルもダンプします。
クリスハリントン

4

このiptablesコマンドでは、テーブルを指定する必要もあります。指定しない場合、デフォルトでテーブルをフィルタリングします。だから試してください:

iptables -t nat -L

1

次を使用できます。

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

すべてのテーブルを検索し、テーブルに特定のルールを表示します。


1

本当に役立つ場合は、bashスクリプトを記述して、パスで参照されるフォルダーに入れるか、〜/ .bashrcファイルのエイリアスを介して参照することができます。

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

新しいbashスクリプトの実行許可を忘れずに与える chmod

許可が問題になる場合は、すべてのiptablesコマンドの前にsudoを追加する必要があります。


0
iptables -vnxL
iptables -vnxL -tnat

おそらくさらに、これらは非常にまれにしか使用されませんが:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.