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)
-L
、--list
オプションを使用して現在のファイアウォールルールを一覧表示する場合は、適切なNetfilterテーブル(filter
、nat
、mangle
、raw
、security
のいずれか)も指定する必要があります。したがって、nat
テーブルのルールを追加した場合は、-t
、--table
オプションを使用してこのテーブルを明示的に指定する必要があります。
iptables --table nat --list
または、オプションの短い形式を使用します。
iptables -t nat -L
特定のテーブルを指定しない場合、filter
テーブルがデフォルトとして使用されます。
より高速な結果を得るには、-n
、--numeric
オプションを含めてホスト名の代わりに数値のIPアドレスを出力することも役立つため、DNSの逆ルックアップを待つ必要がなくなります。
-v
、--verbose
オプションを含めると、さらに多くの情報を取得できます。
iptables
は、filter
、nat
、mangle
、raw
およびsecurity
の5つの異なるテーブルを制御します。特定の呼び出しで、iptables
は、オプション-t
への引数で指定されたこれらのテーブルの1つのみを表示または変更します(デフォルトは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
コマンドの一連の呼び出しに非常によく似ています)。
iptables -S
は私のためのトリックを行います。サービスがオフの場合でも、アクティブなルールがすべてリストされているようです。
Manページから:
-S、--list-rules [chain]選択したチェーンのすべてのルールを出力します。チェーンが選択されていない場合、すべてのチェーンはiptables-saveのように出力されます。他のすべてのiptablesコマンドと同様に、指定したテーブルに適用されます(フィルターがデフォルトです)。
私がすることはiptables-save > iptables_bckp
、これはすべてのレイヤーをバックアップし、ファイルを編集してiptablesを復元しますiptables-restore < iptables_bckp
# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp
二重バックアップを作成して、過去のiptablesを失うことなくそのうちの1つを変更できます。
これは個人的な慣習です。これが最良の方法だとは言いませんが、私にとってはうまくいきます。
試してみる
iptables
コマンドでは、テーブルを指定する必要があります。指定しない場合、デフォルトでテーブルをフィルタリングします。だから試してください:
iptables -t nat -L
以下を使用できます。
# lsmod | grep ip_tables
ip_tables 13193 4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter
すべてのテーブルを検索し、テーブルに特定のルールを表示します。
iptables -vnxL
iptables -vnxL -tnat
おそらくさらに、これらは非常にまれにしか使用されませんが:
iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
それが本当に役立つ場合は、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を追加する必要がある場合があります。