iptables設定ドキュメント

 

iptablesとは、パケットフィルタリングやIPマスカレード・NATを行なうサービスの事である。

iptablesはカーネル2.4から実装されたサービスで、それ以前はipchainsというものがその代わりにあった。iptablesはipchainsの機能を理解しやすく整理し、機能を強化したツールである。

パケットフィルタリングを行なうfilterIPマスカレードとNAT処理を行なうnat、複数のポートをまとめて1つのポートで処理を行なうように見せかけるmangleという3つのテーブルから成っている事から、iptablesという名前がついている。

 

■構成

マシンにはNIC2枚刺さっており、外に繋がっているNICeth0、内側のネットワークに繋がっているNICeth1とする。

 

■準備

/etc/sysconfig以下に「ipchains」もしくは「iptables」ファイルが存在していないかをチェック。もしどちらかがあるなら、すでにiptables(又はipchains)が設定されているという事になる。

ここではどちらも存在しなかった場合、あるいはiptablesが存在した場合を元に設定を行なっていく。

★filterテーブル 

■フィルタリングテーブルの参照

iptablesで現在のフィルタリングテーブルを見る

# /sbin/iptables -nL

 

Chain INPUT (policy ACCEPT)

target      prot  pot  source                   destination

 

Chain FORWARD (policy ACCEPT)

target      prot  pot  source                   destination

 

Cahin OUTPUT (policy ACCEPT)

target      prot  pot  souce                    destination

最初は全て許可(ACCEPT)に設定されている。

上の状態では、設定されているテーブルは無い。

 

# /sbin/iptables -nL -v

とすると、もっと詳しく表示させる事もできる。

 

iptablesfilter)コマンド

コマンドの基本構造

# /sbin/iptables <オプション> <チェーン> (<ルール> <ルール指定>) (-j) <ターゲット>

 オプション

-A 設定の追加

-D 設定の削除

-P デフォルトポリシーの設定

-L 現在の設定を表示する

-F チェーンからポリシー以外の設定を削除

-I 新しいルールを特定の位置に挿入

 チェーン

INPUT 入力パケット

FORWARD 転送するパケット

OUTPUT 出力パケット

 ルール

-s 送信元IPアドレス

-d 宛先IPアドレス

--dport 受け入れるポート番号

-p プロトコル(tcp,udp,icmpなど)

-i 受信インターフェース

-o 送信インターフェース

 ターゲット(-j

ACCEPT 許可

DROP 破棄・不許可

REJECT 拒否

 

■フィルタリングテーブルの設定(INPUTチェーン)

フィルタリングは、まず全て遮断。それから許すものだけ通す設定を追加していくという方法で設定するのが常套手段である。

 

次のコマンドで全てのINPUTパケットをDROP(破棄)する

# /sbin/iptables -P INPUT DROP

 このままでは、自分自身(localhost)へのパケットも全て破棄されてしまうので、まずlocalhostへのパケットを通す。

# /sbin/iptables -A INPUT -i lo -j ACCEPT

 次に、eth1(内側のネットワーク)から来るパケットは安全と見なす事ができるため、全て通す。

# /sbin/iptables -A INPUT -i eth1 -j ACCEPT

次に、外部の他のPCからのパケットを受け入れる。

# /sbin/iptables -A INPUT -p tcp -s 192.168.5.0/24 --dport 22 -j ACCEPT

これは、192.168.5.0/24ゾーンから22番ポート(sshサービス)へのtcpパケットアクセスが来た時に通すという設定である。

しかし、この設定では外部からのアクセスにはまだ応答しない。なぜなら、22番ポートは応答するが、応答を返す時には1024番〜65535番ポートのいずれかのポートを使用して応答を行なうからである。1024番〜65535番ポートは閉じてある。これを開けなければならないが、全て開けてしまえばセキュリティ的に問題である。

そのため、次のコマンドを使用する。

# /sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

RELATED,ESTABLISHEDというのは、現在使用している応答に関するポートを開ける、というオプションである。これにより、安全に応答を返す事ができるようになる。

 

ここまで設定して来た項目は、まだ保存されていない。保存するには次のコマンドを使用する。

# /etc/init.d/iptables save

すると/etc/sysconfig/に保存ファイルiptablesが作成される。

 

# /sbin/iptables -nL -v

のコマンドで詳細表示をさせると

Chain INPUT (policy DROP 30 packets 3485 bytes)

pkts bytes  target    prot opt in out   souce       destination

1444 98610 ACCEPT   all --  lo  *   0.0.0.0/0      0.0.0.0/0

   0     0 ACCEPT   all --  eth1 *  0.0.0.0/0      0.0.0.0/0

   0     0 ACCEPT   tcp --  *  *   192.168.5.0/24 0.0.0.0/0   tcp dpt:22

   0     0 ACCEPT   all --  *  *   0.0.0.0/0       0.0.0.0/0   state RELATED,ESTABLISHED

 

Chain FORWARD (policy ACCEPT 0 packets, 0 byte)

pkts bytes  target    prot opt in out   souce       destination

 

Chain OUTPUT (policy ACCEPT 0 packets, 0 byte)

pkts bytes  target    prot opt in out   souce       destination

という風に、設定が加えられているのが分かる。

この状態だと、マシンに来るパケットはフィルタリングできているが、フォワードさせて他のマシンに届くパケットはまったくフィルタリングされていない。

 

■フィルタリングテーブルの設定(FORWARDチェーン)

FORWARDチェーンでは自分自身へのパケットではなく、転送するパケットのみに付いて記述することに注意する。

設定は-A INPUT-A FORWARDに変える事が違うくらいで、大きく変わる事は何も無い。このマシンをルータ状態にしている場合、フォワードするパケットを制限したりする事で、ファイアウォールとして機能させる事ができるようになる。

例えば

# /sbin/iptables -A FORWARD -s 192.168.100.10 -i eth0 -j DROP

とする事で、192.168.100.10を宛先とする通信をフォワードさせない事ができる。

もちろん設定を保存しなければ再起動後は設定が元に戻ってしまう。

 

■フィルタリングテーブルの設定(OUTPUTチェーン)

OUTPUTに関しては、自分自身が送出するパケットの制限なのであまり使用する事はない。ACCEPTのままにしておけばよいだろう。

 

 戻る




100MB無料ホームページ可愛いサーバロリポップClick Here!