無料Wikiサービス | デモページ
Linuxなどのメモ書き

iptablesによるフィルタ設定


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 -L
NATテーブルの情報を表示する場合
# /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.ルールの設定 (IPフィルタを例に)

ルールを追加するには-Aオプションの後にチェーン名を指定して、その後にルールの詳細とターゲット(-j オプション)を指定する。以下に設定例を示す。

SourceIPが192.168.10.0/24の受信を拒否するフィルタルール
# /sbin/iptables -t filter -A INPUT -s 192.168.10.0/24 -j DROP

SourceIPが192.168.10.0/24の受信を拒否してICMPErrorを返すフィルタルール
# /sbin/iptables -t filter -A INPUT -s 192.168.10.0/24 -j REJECT
    --reject-with icmp-host-prohibited

ルールには複数の条件を同時に指定できる。
SourceIPが192.168.10.0/24でTCP宛先ポートが10000番のパケットを受け付けるルール
# /sbin/iptables -t filter -A INPUT -p tcp --dport 10000
    -s 192.168.10.0/24 -j ACCEPT
-mオプションで拡張マッチングモジュールを使用することができる。
複数ポートを同時に設定する場合。
# /sbin/iptables -t filter -A INPUT -p tcp -m multiport
    --dports 10000,10001 -s 192.168.10.0/24 -j ACCEPT

チェーン内のルールにどれもマッチしなかった場合は、チェーンポリシーにしたがって動作するのでチェーンポリシーも忘れず設定すること。チェーンポリシーは以下のように設定できる。
filter テーブルのINPUTチェーンのポリシーをDROPに設定。
/sbin/iptables -t filter -P INPUT DROP

6.テーブル情報のファイルへの保存

全テーブルの内容をファイルに出力
# /sbin/iptables-save > iptables.txt

ファイルの内容をテーブルに反映させる
# /sbin/iptables-restore  < iptables.txt

ルールを書き換える場合は、iptablesコマンドで更新していってもよいが、iptables-saveでルールをテキストに保存して直接編集した方が楽。

iptables-restoreでルールをテーブルに反映させただけでは、リスタートさせると消えてしまうので保存しておく必要があるので注意。下記参照のこと。

7.現在の設定の保存

iptablesで設定した内容は保存しておかないと、システムをリスタートすると消えてしまう。以下のようにスタートアップスクリプトにsave引数を指定して実行することで現在のテーブルの内容がファイルに保存され、起動時に読み込まれるようになる。
# /etc/init.d/iptables save
[捕捉]
FedoraCoreの場合は起動時に/etc/sysconfig/iptablesの内容を読み込んでiptablesを初期化している。上記のコマンドを実行することで現在のテーブル内容がこのファイルに保存される。

iptablesをいろいろ設定したが、一旦初期状態に戻したい場合は以下のようにすれば、/etc/sysconfig/iptablesが読み込まれて起動時の状態に戻せる。
# /etc/init.d/iptables restart



最終更新 2006/09/23 16:07:01 - kztomita
(2006/05/17 11:25:18 作成)
添付ファイル
iptables.png - kztomita