次のページ 前のページ 目次へ

6. どのようにパケットはフィルターを通り抜けるか

カーネルは起動時に `filter' テーブルという所に 3つのルールリストを 保持しています。これらのリストはファイアーウォールチェイン、 または単にチェインと呼ばれます。3つのチェインは INPUT, OUTPUT そして FORWARD と呼ばれて います。

ASCII アートファンのために、チェインはこのように配置されています (これは、2.0 および 2.2 カーネルの配置と大変異なっています!) :


入って来る┌──────┐   / ̄ ̄ ̄\        出て行く
      ―→│ルーティング│→|FORWARD |――→
          │の決定      │   \___/         ↑
          └──────┘                      │
                   │                           │
                   ↓                        / ̄ ̄\
                / ̄ ̄\                    |OUTPUT|
               |INPUT |                    \__/
                \__/                        ↑
                   │                           │
                   └─→ ローカル プロセス ──┘
(訳注: この他に NAT 用のチェインとして、‘ルーティングの決定’の手前に `PREROUTING' チェインが、‘出て行く’の手前に `POSTROUTING' チェインが あります。)

3つの円は、上で述べた 3つのチェインを表わしています。パケットが図上 の 1つの円に達したら、そのチェインが検査されてパケットの運命を決めます。 もし、チェインがパケットを DROP(破棄)すると言ったら、パケットはそこで 抹殺されますが、もし、チェインがパケットを ACCEPT(受け入れ)すると言ったら、 パケットは図上を移って行きます。

1つのチェインは複数のルールのチェックリストから構成されて います。各々のルールは「もし、パケットのヘッダーがこんなだったら、 パケットをこのようにしなさい」と指示します。もし、あるルールがパケット とマッチしなければ、チェイン内の次のルールが調べられます。最終的に、 調べるルールが無くなったら、カーネルはそのチェインのポリシー (方針)を見て何をするか決めます。セキュリティ意識の強いシステムでは、 このポリシーは普通、パケットを DROP するようにカーネルに指示します。

  1. パケットが入って来たとき(例えば、イーサネットカードから)、 カーネルは最初にパケットの行き先を見ます。これは‘ルーティング’ と呼ばれます。
  2. もし、行き先が自分の Linux ボックスなら、パケットは図では下に 降りて INPUT チェインに入ります。もし、そこを通過すれば、パケットは それを待っているプロセスに受け取られます。
  3. そうでないなら、カーネルのフォワード(転送)機能が有効に なっていない場合、あるいはカーネルがそのパケットのフォワードの方法を 知らない場合、パケットは破棄されます。フォワード機能が有効になっていて、 パケットの行き先が別のネットワークインターフェイス(もう 1つあるなら)であれば、図ではパケットは右の方へ進み FORWARD チェイン に入ります。もし、ACCEPT されれば、パケットは送り出されます。
  4. 最後になりますが、この箱で動いているプログラムは ネットワークへパケットを送ることができます。これらのパケットは 直接 OUTPUT チェインに入ります。もし、そこで ACCEPT と言われれば、 パケットはその行き先に従ったインターフェイスから出て行きます。


次のページ 前のページ 目次へ