iptablesとは
iptablesとは、Linuxに実装されたパケットフィルタリング型のファイアウォール機能である。ネットワークのパケットを直接処理する部分であり、カーネル内で動作する。 そのため、統一的に全てのアプリケーションのセキュリティを高めることができる。システム全体で不正な通信を排除し、安全な通信だけをアプリケーションに届ける役割を担う。
Linuxカーネル2.6にはNetfilterと呼ばれるパケットフィルタリングモジュールが採用されている。パケットフィルタリングとは、ネットワークインタフェースを通過するパケットを、その内容によってフィルタする機能である。
Netfilterは、The netfilter.org projectによって開発・保守されていて、パケットフィルタリング、アドレス変換、パケットの操作などの処理をサポートしている。従来のIPv4ネットワークだけでなく、IPv6にも対応している。Netfilterは、カーネルに組み込まれるモジュールの部分と、設定・管理を行うコマンドの部分の2つで構成されている。iptablesは厳密にはこのコマンドを指している。
パケットの処理
Netfilterはパケットを受信すると、パケットの検査を行った後、以下の6つのステップでパケットを処理する。
- PREROUTING
- ROUTING
- FORWARD
- INPUT
- OUTPUT
- POSTROUTING
パケットの検査
Netfilterがパケットを受け取ると、入力されたパケットが正しいものであるか検査する。チェックサムを調査し、内容的に正しいものかどうか調査する。正しくない場合、そのパケットは破棄される。不正な構造を持ったパケットが送り込まれた場合でも、あらかじめそれを破棄することにより、以降のステップの安全性を保つ。
PREROUTING
パケットのリダイレクトなど、ネットワークインタフェースから送られてきたパケットに対して、アドレス変換などの処理を行う。
ROUTING
ルーティング(経路決定)を行う。パケットの終点アドレスを調べ、それに従ってパケットの送り先を決定する。
FORWARD
ネットワークインタフェースから渡されたパケットの転送を行う。
INPUT
ローカルプロセスへのパケットの配送を行う。
OUTPUT
ローカルプロセスからネットワークインタフェースへパケットを送信する。
POSTROUTING
ネットワークに出力されるパケットに対しての処理を行う。アドレス変換などの処理を行う。
パケットフィルタリングの範囲
パケットフィルタリングは、「通信元のホスト」「通信先のホスト」「利用するプロトコル(サービス)」「パケットが届いた物理インタフェース」といった基準で実施することができる。ネットワークインタフェースは、イーサネットのほか、PPP、SLIP、PLIPなど、パケットをカプセル化できるものならどんなものにも対応している。
パケットフィルタリングは、Linuxカーネル内のパケットの処理段階のどこで実施するかにより効果が異なる。例えば、INPUTやOUTPUTでパケットフィルタリングを実施すれば、自サーバ上のアプリケーションに関する通信を制御することができる。また、ルータとして設置されたLinuxマシンの、FORWARDでパケットフィルタリングを行えば、組織内のコンピュータに送られる通信を制御することができる。
テーブル
Netfilterではパケットフィルタリング、アドレス変換、パケット処理の3つの機能を提供する。iptablesコマンドやip6tablesコマンドでは、この機能に対応した概念として「テーブル」がある。テーブルには、以下の3種類がある。
- filter
パケットフィルタリングで参照するテーブルを指定。 - nat
新しい接続を開くパケットが参照するテーブルを指定。現在のところ、ip6tablesではnatテーブルを使用することはできない。 - mangle
特別なパケットが参照するテーブルを指定。
チェイン
Netfilterでは、特定の条件に当てはまるパケットに対して処理ルールを定義する。この条件のグループをチェイン(chain)と呼ぶ。チェインには、最初から定義されている組み込みチェインと、後から定義するユーザ定義チェインの2種類がある。
パケットの処理で説明を行った6つの各ステップは、そのままPREROUTINGチェイン、ROUTINGチェイン、FORWARDチェイン、INPUTチェイン、OUTPUTチェイン、POSTROUTINGチェインとして利用することができる。テーブルによって利用できる組み込みチェインに制限がある。組み込みチェインは、パケットの処理段階に応じたルールを追加することができる条件グループと考えることができる。
- INPUTチェイン
パケットが入ってくる時にチェック。利用できるテーブルは、filterとmagnleである。 - OUTPUTチェイン
パケットが出て行く時にチェック。利用できるテーブルは、filter、natとmagnleである。 - FORWARDチェイン
パケットをフォワーディングする時にチェック。利用できるテーブルは、filterである。 - PREROUTINGチェイン
パケットが入ってきた時に、パケットを変換。利用できるテーブルは、natとmagnleである。 - POSTROUTINGチェイン
パケットが出て行く時にパケットを変換。利用できるテーブルは、natである。
ユーザ定義チェイン
iptablesおよびip6tablesでは、必要に応じてテーブルにユーザ定義のチェインを作成できる。ユーザ定義チェインに対しては、削除、変更の処理を行うことができる。なお、全ての操作で、テーブルの指定は省略することができ、省略した場合にはfilterテーブルに対して操作が行われる。
ターゲット
Netfilterでは、ルールに合致したパケットに対して、様々な処理を行うことができる。この処理をターゲット(target)と呼ぶ。代表的なターゲットは以下となる。
- ACCEPT
パケットを通過させる。 - DROP
パケットを破棄する。 - RETURN
チェイン内のルール評価を終了する。 - REDIRECT
パケットを特定のポートにリダイレクトする。 - REJECT
パケットを破棄し、その旨をICMPを使って通知する。オプションでICMPの通知メッセージタイプを指定できる。 - SNAT
パケットの送信元アドレスを修正する。natテーブルで、後述するPOSTROUTINGチェインでのみ利用できる。iptablesのみで利用できる。 - DNAT
パケットの送信先アドレスを修正する。natテーブルの、PREROUTING、OUTPUTチェインで利用できる。iptablesのみで使用できる。 - MASQUERADE
パケットの送信元アドレスを修正する。natテーブルで、後述するPOSTROUTINGチェインでのみ利用できる。iptablesのみで利用できる。 - LOG
マッチしたパケットをカーネルログに記録する。
【カテゴリ】:セキュリティ  OS  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |