iptablesによるフィルタ設定
Rev.8を表示中。最新版はこちら。
1.iptablesとは
iptablesコマンドを使用することでLinuxカーネルのIPフィルタやNATを設定できる。2.テーブルとチェーン
iptablesにはテーブルとチェーンと呼ばれるものがある。IPフィルタ、NATなどの各用途に応じてfilter,nat,mangleのテーブルがある(表-1。カーネルのconfigにも依存する)。各テーブルの中にチェーンがありチェーンの中にフィルタなどのルールが連なっている。チェーンは複数ありパケットの種類によってどのチェーンが使用されるかは異なる。例えばfilterテーブルのINPUTチェーンは自システム宛のパケットに対して適用され、OUTPUTチェーンは自システムが送信するパケットについて適用される(表-2)。チェーンは自分で新しく定義して、既存のチェーンから呼び出すこともできる。図-1 テーブルとチェーンの概要
表-1 各テーブルの用途
No. | テーブル | 用途 |
---|---|---|
1 | filter | IPフィルタの設定を行う |
2 | nat | IPマスカレードの設定を行う |
3 | mangle | TOSフィールドの書き換えなどパケットの 書き換えルールを設定する。QoSをするのに使う。 |
表-2 filterテーブルのチェーン
No. | チェーン | 適用パケット |
---|---|---|
1 | INPUT | 自システム宛の受信パケット (中継パケットは含まない) |
2 | OUTPUT | 自システムからの送信パケット (中継パケットは含まない) |
3 | FORWARD | 中継パケット |
3.テーブル情報の表示
現在のfilterテーブルの情報を表示する場合(FedoraCoreでファイアウォール設定を有効にしてインストールした場合はいっぱい表示されるはず)
ルールの詳細を表示したい場合は-vオプションをつける。
# /sbin/iptables -LNATテーブルの情報を表示する場合
# /sbin/iptables -t nat -L
4.ルールのマッチングの仕方
パケットはその種類に応じたチェーンで評価される(例えば自システム宛の受信パケットならINPUTチェーン)。チェーンの中のルールを最初から調べてい き、ルールにマッチした場合、指定したターゲット(ACCEPT, DROP, QUEUE, RETURN)に従って動作する。マッチしなかった場合は次のルールへ進む。チェーンの終端に達した場合は上位(呼出し元)のチェーンへ戻るが、最上位のチェーンだった場合は、チェーンポリシーで指定されているターゲットに従って動作する。表-3 ターゲットの動作
No. | ターゲット | 動作 |
---|---|---|
1 | ACCEPT | パケットを通す |
2 | DROP | パケットを捨てる |
3 | QUEUE | パケットをカーネルからユーザ空間に渡す |
4 | RETURN | チェーンを辿るのをやめて、上位のチェーンに戻る。 最上位であった場合は、チェーンポリシーで指定されている ターゲットに従って動作する。 |
5 | REJECT | DROPと同じくパケットを捨てる。廃棄時にICMPエラーを 返す点がDROPと異なる。返すエラー種別は--reject-with オプションで設定できる。 |
5.ルールの設定
ルールの追加
/sbin/iptables -t filter -A INPUT -s 192.168.10.0/24 -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp -m multiport --dports 10000,1111 -j ACCEPT
/sbin/iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
削除
6.テーブル情報のファイルへの保存
全テーブルの内容をファイルに出力# /sbin/iptables-save > iptables.txt
ファイルの内容をテーブルに反映させる
# /sbin/iptables-restore < iptables.txt
7.現在の設定の保存
iptablesで設定した内容は保存しておかないと、システムをリスタートすると消えてしまう。以下のようにスタートアップスクリプトにsave引数を指定して実行することで現在のテーブルの内容がファイルに保存され、起動時に読み込まれるようになる。# /etc/init.d/iptables save[捕捉]
FedoraCoreの場合は起動時に/etc/sysconfig/iptablesの内容を読み込んでiptablesを初期化している。上記のコマンドを実行することで現在のテーブル内容がこのファイルに保存される。
iptablesをいろいろ設定したが、一旦初期状態に戻したい場合は以下のようにすれば、/etc/sysconfig/iptablesが読み込まれて起動時の状態に戻せる。
# /etc/init.d/iptables restart