(57)【要約】【課題】  ファイアウォールアーキテクチャ中にファイアウォールを実装するための方法を提供すること。【解決手段】  本ファイアウォールアーキテクチャは、複数のネットワーク層および第１のファイアウォールエンジンを含む。層は、パケットおよびパケット情報を第１のファイアウォールエンジンに送り、パケットコンテキストを維持し、その後の層にパケットコンテキストを渡し、パケットを処理する。第１のファイアウォールエンジンは、パケット情報を１つまたは複数のインストールされているフィルタと比較して、パケットをどのように扱うべきかを示すアクションを層に返す。【選択図】  図８
2004362590.tif 000002
【特許請求の範囲】
【請求項１】
要求ステージでファイアウォールポリシーを実装するための方法において、前記要求ステージがファイアウォールフレームワーク中の複数のステージの１つであり、前記ファイアウォールフレームワークが、複数のフィルタがインストールされているファイアウォールエンジンをさらに含む方法であって、
前記要求ステージによって、前記複数のステージのうちの前のステージからパケットを受け取ること、
前記要求ステージによって、前記パケットに関連する１組のパラメータを識別すること、
前記パケットに関連する１組のパラメータを含む分類コールを発行すること、および
前記分類コールに応答して、前記インストールされている複数のフィルタの少なくとも１つによって指定された前記ファイアウォールポリシーに従って、アクションを受け取ること
を含むことを特徴とする方法。
【請求項２】
前記アクションは、前記パケットにネットワークのトラバースを続けさせる命令であって、
前記パケットを層プロトコルに従って処理すること、および
前記複数のステージのうちの次のステージに前記パケットを送ること
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記パケットはネットワークデバイスに宛てられたアウトバウンドパケットであり、前記１組のパラメータは、前記要求ステージによって実装されたプロトコルに従って前記パケットに追加される情報を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記パケットはネットワークデバイスから受け取ったインバウンドパケットであり、前記１組のパラメータは、前記要求ステージが、前記要求ステージによって実装されたプロトコルに従って前記インバウンドパケットからパースした情報を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記複数のステージは、オペレーティングシステムのカーネルモードで実行することを特徴とする請求項１に記載の方法。
【請求項６】
前記複数のステージは、オペレーティングシステムのユーザモードで実行することを特徴とする請求項１に記載の方法。
【請求項７】
前記前のステージからパケットコンテキストのデータ構造を受け取ることであって、前記パケットコンテキストが前記パケットに関連する前のステージのデータを含むこと、および
前記１組のパラメータを追加することによって前記パケットコンテキストのデータ構造を修正すること
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記１組のパラメータは、前記要求ステージの識別、パラメータ型、および値を含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記要求ステージは、前記修正されたパケットコンテキストのデータ構造を前記複数のステージのうちの次のステージに送ることを特徴とする請求項７に記載の方法。
【請求項１０】
１組のインストールされているフィルタを含むファイアウォールエンジンにファイアウォールポリシーを実装するための方法において、前記インストールされているフィルタが、それぞれ、１組のフィルタ条件および関連アクションを含む方法であって、
要求層に関連する第１のパケット情報とパケットコンテキストのデータ構造に関する第２のパケット情報とを含む１組のパケットパラメータを受け取ること、
１組のマッチするフィルタを識別することであって、前記１組のマッチするフィルタの各フィルタが前記パケットパラメータに対応するフィルタ条件を有すること、および
前記マッチするフィルタの少なくとも１つから前記関連アクションを識別すること
を含むことを特徴とする方法。
【請求項１１】
前記１組のマッチするフィルタの各フィルタは優先順位を持っており、優先順位の最も高いフィルタからの前記関連アクションは非終了アクションであり、
終了アクションに到達するまで、前記１組のマッチするフィルタのうち１つまたは複数の優先順位が低いフィルタからの前記関連アクションを識別することをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記１組のマッチするフィルタのうちのフィルタがコールアウトモジュールを識別し、前記方法は、
前記パケットパラメータ、および前記１組のマッチするフィルタのうちの前記フィルタの識別を前記コールアウトモジュールに送ることをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記コールアウトモジュールは前記パケットコンテキストを修正することを特徴とする請求項１２に記載の方法。
【請求項１４】
前記ファイアウォールエンジンは、オペレーティングシステムのユーザモードで実行することを特徴とする請求項１０に記載の方法。
【請求項１５】
前記ファイアウォールエンジンは、オペレーティングシステムのカーネルモードで実行することを特徴とする請求項１０に記載の方法。
【請求項１６】
開始ネットワークデバイスと応答ネットワークデバイスとの間のネットワーク通信を許可するための方法において、前記応答ネットワークデバイスは非送信請求ネットワーク通信を防ぐためのファイアウォールを含む方法であって、
キーネゴシエーションプロトコルに従ってインバウンドパケットを許可する第１のファイアウォールフィルタを作成すること、
前記キーネゴシエーションプロトコルに従って、前記開始ネットワークデバイスと前記応答ネットワークデバイスとの間のキーネゴシエーションを成功させること、
前記開始ネットワークデバイスの識別を前記キーネゴシエーションプロトコルの一部として確認すること、および
前記開始ネットワークデバイスから送られてきたインバウンドパケットを許可する第２のファイアウォールフィルタを作成すること
を含むことを特徴とする方法。
【請求項１７】
前記第２のファイアウォールフィルタは、前記開始ネットワークデバイスから送られてきた、セキュリティプロトコルに準拠するパケットを許可することを特徴とする請求項１６に記載の方法。
【請求項１８】
前記第２のファイアウォールフィルタは、前記開始ネットワークデバイスのアドレスを指定するパケットを許可することを特徴とする請求項１６に記載の方法。
【請求項１９】
前記キーネゴシエーションはＩＫＥネゴシエーションであることを特徴とする請求項１６に記載の方法。
【請求項２０】
要求ステージでファイアウォールポリシーを実装するためのコンピュータ可読命令を実行するためのコンピュータ可読媒体において、前記要求ステージがファイアウォールフレームワーク中の複数のステージの１つであり、前記ファイアウォールフレームワークが、複数のフィルタがインストールされているファイアウォールエンジンをさらに含むコンピュータ可読媒体であって、
前記要求ステージによって、前記複数のステージのうちの前のステージからパケットを受け取ること、
前記要求ステージによって、前記パケットに関連する１組のパラメータを識別すること、
前記パケットに関連する１組のパラメータを含む分類コールを発行すること、および
前記分類コールに応答して、前記インストールされている複数のフィルタの少なくとも１つによって指定された前記ファイアウォールポリシーに従って、アクションを受け取ること
を含むことを特徴とするコンピュータ可読媒体。
【請求項２１】
前記アクションは、前記パケットにネットワークのトラバースを続けさせる命令であって、
前記パケットを層プロトコルに従って処理すること、および
前記複数のステージのうちの次のステージに前記パケットを送ること
をさらに含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２２】
前記前のステージからパケットコンテキストのデータ構造を受け取ることであって、前記パケットコンテキストが前記パケットに関連する前のステージのデータを含むこと、および
前記１組のパラメータを追加することによって前記パケットコンテキストのデータ構造を修正すること
をさらに含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２３】
１組のインストールされているフィルタを含むファイアウォールエンジンにファイアウォールポリシーを実装するためのコンピュータ可読命令を実行するためのコンピュータ可読媒体において、前記インストールされているフィルタが、それぞれ、１組のフィルタ条件および関連アクションを含むコンピュータ可読媒体であって、
要求層に関連する第１のパケット情報とパケットコンテキストのデータ構造に関する第２のパケット情報とを含む１組のパケットパラメータを受け取ること、
１組のマッチするフィルタを識別することであって、前記１組のマッチするフィルタの各フィルタが前記パケットパラメータに対応するフィルタ条件を有すること、および
前記マッチするフィルタの少なくとも１つから前記関連アクションを識別すること
を含むことを特徴とするコンピュータ可読媒体。
【請求項２４】
前記１組のマッチするフィルタの各フィルタは優先順位を持っており、優先順位の最も高いフィルタからの前記関連アクションは非終了アクションであり、
終了アクションに到達するまで、前記１組のマッチするフィルタのうち１つまたは複数の優先順位が低いフィルタからの前記関連アクションを識別することをさらに含むことを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記１組のマッチするフィルタのうちのフィルタがコールアウトモジュールを識別し、
前記パケットパラメータ、および前記１組のマッチするフィルタのうちの前記フィルタの識別を前記コールアウトモジュールに送ることをさらに含むことを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２６】
開始ネットワークデバイスと応答ネットワークデバイスとの間のネットワーク通信を許可するためのコンピュータ可読命令を実行するためのコンピュータ可読媒体において、前記応答ネットワークデバイスは非送信請求ネットワーク通信を防ぐためのファイアウォールを含むコンピュータ可読媒体であって、
キーネゴシエーションプロトコルに従ってインバウンドパケットを許可する第１のファイアウォールフィルタを作成すること、
前記キーネゴシエーションプロトコルに従って、前記開始ネットワークデバイスと前記応答ネットワークデバイスとの間のキーネゴシエーションを成功させること、
前記開始ネットワークデバイスの識別を前記キーネゴシエーションの一部として確認すること、および
前記開始ネットワークデバイスから送られてきたインバウンドパケットを許可する第２のファイアウォールフィルタを作成すること
を含むことを特徴とするコンピュータ可読媒体。
【請求項２７】
前記第２のファイアウォールフィルタは、前記開始ネットワークデバイスから送られてきた、セキュリティプロトコルに準拠するパケットを許可することを特徴とする請求項２６に記載のコンピュータ可読媒体。
【請求項２８】
前記第２のファイアウォールフィルタは、前記開始ネットワークデバイスのアドレスを指定するパケットを許可することを特徴とする請求項２６に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータシステムおよびネットワークセキュリティに関する。より詳細には、本発明は、ネットワークデバイスにファイアウォールを実装する方法に関する。
【背景技術】
【０００２】
ネットワークプロトコルは、オープンデータ交換（ｏｐｅｎ  ｅｘｃｈａｎｇｅ  ｏｆ  ｄａｔａ）を通して、ネットワークデバイス間の通信を容易にするよう設計されている。オープンデータ交換は、タスクを遂行するためのネットワークデバイスの使用を大幅に向上させるが、ネットワークプロトコルがネットワークセキュリティのために設計されているわけではなく、また、一般にネットワークセキュリティを提供しないため、問題を生じさせる原因ともなっている。ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、イントラネット、インターネットなどの公衆ネットワークおよび専用ネットワークの両方に結合されたコンピュータは、ネットワークに直接または間接的に結合されたその他のネットワークデバイスによる悪意ある攻撃を受けやすい。このような悪意ある攻撃には、データを盗むこと、サービス妨害（ＤＯＳ）攻撃、ウィルスの拡散などが含まれる。コンピュータをネットワークに結合する際には、子供達による望ましくないまたは不適切なウェブサイトへのアクセスの制御など、その他の関連する問題も生じてくる。
【０００３】
ファイアウォールは、個々のユーザ、ネットワークデバイス、およびネットワーク全般を悪意ある攻撃から保護し、また、ポリシーの実装によりネットワークを介したデータの交換を制御する機能を追加するために使用されるツールである。ファイアウォールは、ポリシーを実装して、ネットワークパケットを調べ、調べた結果に基づいて、そのパケットを許可すべきか、または逆にそのパケットがネットワークをさらにトラバースしないようブロックすべきかを判断する。
【０００４】
ファイアウォールを介して実装されるポリシーは、１つまたは複数のフィルタによって定義される。各フィルタは、パラメータおよび関連するアクションを含む。フィルタのパラメータを使って、ファイアウォールポリシーに支配され、また、例えば媒体アクセス制御（ＭＡＣ）アドレスなどのハードウェアアドレス、例えばインターネットプロトコル（ＩＰ）アドレスなどのネットワークアドレス、例えば伝送制御プロトコル（ＴＣＰ）などのプロトコル型、ポート番号などの情報を含むネットワークパケットが識別される。アクションは、フィルタパラメータにマッチするパラメータを備えたパケットをどのように扱うべきかを定義する。具体例として、フィルタは、そのパラメータとして、例えば「ｈｔｔｐ：／／ｗｗｗ．ｆｏｏ．ｃｏｍ」などのユニフォームリソースロケータ（ＵＲＬ）アドレスを含む。フィルタはさらに、そのＵＲＬアドレスに、ブロックのアクションを関連付ける、すなわちパケットを落とす。ファイアウォールは、パケットを調べて、調べた結果、そのＵＲＬアドレス「ｈｔｔｐ：／／ｗｗｗ．ｆｏｏ．ｃｏｍ」をパケットに埋め込まれているものとして識別した場合にはいつでも、そのパケットを落とし、それによって、それがネットワークをトラバースしないようにする。
【０００５】
ネットワークデバイスは、階層化ネットワークアーキテクチャから成るネットワークスタックを介してパケットを送受信することにより、データを交換する。様々なネットワークアーキテクチャモデルが存在するが、そのほとんどが、少なくともアプリケーション層、トランスポート層、ネットワーク層、およびリンク層を含んでいる。ネットワークパケットは、各層を順番にトラバースし、各層をトラバースするたびに処理される。アウトバウンドパケットの場合、アプリケーション層は、アプリケーションプロトコルに従ってデータを処理する。アプリケーションプロトコルの例を２、３挙げると、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、ファイル転送プロトコル（ＦＴＰ）、簡易メール転送プロトコル（ＳＭＴＰ）などがある。ネットワーク層やトランスポート層などのその他の層は、データをＴＣＰヘッダおよびＩＰヘッダに埋め込むことによってパケット化する。これらの層は、例えば、ヘッダのパース、データの非パケット化（ｕｎｐａｃｋｅｔｉｚｅ）などによって、インバウンドパケットに対する相互処理を行う。階層化「スタック」アーキテクチャ、および各層が実行する処理機能は、パケットがネットワークプロトコルスタックをトラバースするのにつれてパケットパラメータを含むパケット内容が変化する、動的パケット構造をもたらす。
【０００６】
ファイアウォールは、階層化ネットワークスタックを使って位置付けられる検査点（ｉｎｓｐｅｃｔｉｏｎ  ｐｏｉｎｔ）においてパケットを調べる。一方では、検査点はアプリケーション層にある。例えば、ファイアウォールは階層化サービスプロバイダ（ＬＳＰ）として配置される。アプリケーション層におけるパケットは、別のネットワークデバイスに送られ、または別のネットワークデバイスから受け取った、基礎をなすデータ（ｕｎｄｅｒｌｙｉｎｇ  ｄａｔａ）を含む。アプリケーション層でパケットを調べることにより、ファイアウォールは、ＵＲＬアドレスなどのアプリケーション層パラメータを識別し、そのアプリケーション層パラメータをフィルタパラメータと比較することができる。しかし、ＩＰアドレス、ポート番号、ＭＡＣアドレスなどのその他のパケットパラメータは、アウトバウンドパケットに追加されていないか、またはインバウンドパケットから落とされているために利用可能ではない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
その一方、ファイアウォールの検査点は、リンク層とネットワーク層との間に置かれた中間ドライバとして、ネットワークスタックのより低いレベルで実装される。ネットワークスタックのこのより低いレベルにおけるパケットは、例えば、インターフェース数、ＭＡＣアドレス、ＩＰアドレス、プロトコル型、ポート、およびペイロードデータなど、最大数のパラメータを含む。パケットはこのようなパラメータを含むが、それらのパラメータが容易に識別可能であるとは限らない。ファイアウォールは、パケットを受け取った後、フィルタパラメータと比較するために、関連するパケットパラメータをパースして解釈する必要がある。したがって、ネットワークスタック中の層とファイアウォールの両方が、パケットをパースする機能および解釈する機能を重複して行う。
【課題を解決するための手段】
【０００８】
本発明は、ファイアウォールフレームワーク中にファイアウォールを実装する方法を対象としている。ファイアウォールフレームワークは複数の層を含み、各層は層プロトコルに従ってパケットを処理することができる。さらに、各層は、パケットにファイアウォールポリシーが提供されることを要求することができる。ファイアウォールフレームワークは、複数のインストールされているフィルタを含む、ファイアウォールエンジンをさらに含む。
【０００９】
要求層は、複数の層のうちの前の層からネットワークパケットを受け取る。要求層は、パケットから１組のパラメータを識別し、その１組のパラメータを用いてファイアウォールエンジンに分類要求を発行する。これに応答して、ファイアウォールは、要求層にアクションを返す。このアクションが、パケットが複数の層をさらにトラバースすることを許可する命令である場合、要求層は、層プロトコルに従ってパケットを処理し、そのパケットを複数の層のうちの次の層に送る。逆に、アクションがパケットを落とす命令である場合、層はパケットを処理せず、次の層に送らない。
【００１０】
１組のインストールされているフィルタのそれぞれは、１組のフィルタ条件およびアクションを含む。要求層が分類コールを発行すると、ファイアウォールエンジンは、複数のインストールされているフィルタのうちのいずれかのフィルタが１組のパラメータとマッチするかどうかを判断する。次いで、ファイアウォールエンジンは、マッチするフィルタ中の情報に基づいてアクションを返す。
【００１１】
本発明はさらに、信頼できる開始デバイスからのパケットが、一般に非送信請求インバウンドパケットをブロックするように構成されているファイアウォールをトラバースして、応答デバイスに到達することを許可する方法を提供する。開始デバイスは、最初に、キーネゴシエーションプロトコルを使って認証を開始する。認証が成功すると、応答コンピュータは、開始コンピュータからのパケットが応答コンピュータの対象プロセスに到達することを許可するフィルタを作成する。
【００１２】
本発明のさらなる特徴および利点は、添付の図を参照しながら進む、以下の例示の実施形態の詳細な説明を読むことにより明らかになろう。
【発明を実施するための最良の形態】
【００１３】
添付の特許請求の範囲は、本発明の特徴を詳細に述べているが、本発明、およびその目的および利点は、添付の図面に関連して以下の詳細な説明を読むことにより最もよく理解できる。
【００１４】
ネットワークデバイス内のファイアウォールアーキテクチャに従って、ファイアウォールを実装する方法を説明する。この方法は、プロトコルスタックにおける複数の層において、ネットワークパケットをフィルタにかける。本発明の一実施形態では、この方法およびファイアウォールアーキテクチャを、カーネルモードプロセスおよびユーザモードプロセスと呼ばれる複数のオペレーティングシステムプロセスに実装する。あるいは、この方法およびアーキテクチャを、単一のオペレーティングシステムプロセス、またはオペレーティングシステムの外側で実行している１つまたは複数のプログラムモジュールまたはアプリケーションプログラムに実装する。
【００１５】
カーネルモードプロセスは、プロトコルスタック、カーネルファイアウォールエンジン、および１つまたは複数のコールアウト（ｃａｌｌｏｕｔ）を含む。プロトコルスタックは、アプリケーション層、トランスポート層、ネットワーク層、およびリンク層を含む。所望する通りにさらなる層が追加され、またはシステムから削除される。各層は、ネットワークパケットおよび対応するパケットコンテキストデータを前の層またはプロセスから受け取る、要求層を形成する。次いで、要求層が、層ＡＰＩを介して、分類要求をカーネルファイアウォールエンジンに発行する。分類要求は、要求層が受け取ったパケット、パケットコンテキスト、および要求層に関連付けられた１組の層パラメータを含む。カーネルファイアウォールエンジンは、要求を処理し、アクションを返す。一例として、アクションは、パケットをどのように扱うかを（例えば、許可かブロックかを）要求層に指示する。アクションが許可の場合、要求層は、層プロトコルに従ってパケットを処理し、層パラメータを含むようにパケットコンテキストを修正し、そのパケットおよびパケットコンテキストを次の層に渡す。アクションがブロックの場合、要求層はパケットを落として、次の層には渡さない。要求層は、ブロックアクションの結果、ＴＣＰ接続を断つなど、さらなる機能を実行することができる。
【００１６】
カーネルファイアウォールエンジンは、層ＡＰＩ、１組のインストールされているフィルタ、およびコールアウトＡＰＩを含む。１組のインストールされているフィルタのそれぞれは、１組のフィルタ条件および関連アクションを含む。カーネルファイアウォールエンジンは、１つまたは複数のマッチするフィルタを識別することによって、要求層から送られてきた分類要求を処理する。マッチするフィルタは、層パラメータおよびパケットコンテキストにマッチするフィルタ条件を有する。マッチするフィルタが識別されると、それらはフィルタの優先順位の順に適用される。適用されているフィルタリングのアクションが許可またはブロックの場合、そのアクションは要求層に返される。アクションがコールアウトの場合は、マッチするフィルタの識別と共に分類要求が要求層によって発行され、コールアウトモジュールの１つに渡される。コールアウトモジュールは、そのプログラムされた機能を実行して、カーネルファイアウォールエンジンにアクションを返す。あるパケットについてマッチするフィルタが識別されなかった場合、要求層は、マッチするフィルタが見つからなかったことを通知され、次いで、パケットをどのように扱うかを決定する。
【００１７】
例示的なユーザモードプロセスは、ユーザモードファイアウォールエンジンおよび１つまたは複数のポリシープロバイダを含む。ポリシープロバイダは、揮発性または不揮発性メモリなどの任意の適切なソースからポリシーを取得する。ポリシーは、１組のフィルタ条件および関連アクションを含む、新しいフィルタを提供するための情報のソースである。ユーザのファイアウォールエンジンは、フィルタエンジンＡＰＩを介して、カーネルファイアウォールエンジン中の１組のインストールされているフィルタに新しいフィルタを追加する。
【００１８】
ユーザモードはまた、カーネルファイアウォールエンジンのインスタンスを含み、それによってユーザモード層の作成を可能にする。次いで、ユーザモード層が、カーネルファイアウォールエンジンのユーザモードインスタンスを使って、ユーザモードでのフィルタリングの適用を可能にする１組のパラメータにマッチするフィルタを識別する。
【００１９】
本発明の一実施形態では、カーネルファイアウォールエンジンから１組のコールアウトモジュールへのコールアウトインターフェースが、ファイアウォールの機能をほぼ無制限に拡張することを可能にしている。一例として、ＨＴＴＰコンテキストコールアウトは、受付可能および受付不可能なＵＲＬアドレスを識別することによって、保護者機能（ｐａｒｅｎｔａｌ  ｆｅａｔｕｒｅ）を提供する。インターネットプロトコルセキュリティ（ＩＰＳｅｃ）コールアウトは、パケットが正しくＩＰＳｅｃ処理を受けたかどうかを確認する。ロギングコールアウトは、確立されている基準を満たすパケットを記録し、それによってその後のパケットの検査を容易にする。侵入検出コールアウトは、既知のアルゴリズムに基づいて疑わしいパケットを識別する。
【００２０】
本発明はまた、信頼できるネットワークデバイスとの非送信請求通信を許可する一方、その他のネットワークデバイスからのその他の非送信請求通信をブロックするための方法も提供する。
【００２１】
図面を見ると、同じ参照番号は同じ構成要素を指しており、本発明を、適切なコンピューティング環境に実装されているものとして図示してある。必ずしも要求されるわけではないが、本発明を、パーソナルコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的な状況において説明する。一般に、プログラムモジュールには、特定のタスクを実行し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明はまた、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境においても実施することができる。分散コンピューティング環境では、プログラムモジュールをローカルおよびリモート両方のメモリ記憶デバイスに置くことができる。
【００２２】
図１は、本発明を実装することができる、適切なコンピューティングシステム環境１００の例を示す。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲に関していずれかの制限を示唆することを意図したものではない。また、コンピューティングシステム環境１００を、例示的な動作環境１００中に示すコンポーネントのいずれか１つまたは組合せに依存し、またはそれらを必要とするものとして解釈するべきでもない。
【００２３】
本発明は、その他の多数の汎用または専用コンピューティングシステム環境または構成で動作可能である。本発明で使用するのに適した周知のコンピューティングシステム、環境、および／または構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な大衆消費電子製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、それらに限定されるものではない。
【００２４】
本発明を、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的な状況で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明はまた、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境においても実施することができる。分散コンピューティング環境では、メモリ記憶デバイスを含む、ローカルおよびリモート両方のメモリ記憶媒体にプログラムモジュールを置くことができる。
【００２５】
図１を参照すると、本発明を実装するための例示的なシステムは、汎用コンピューティングデバイスをコンピュータ１１０の形態で含む。コンピュータ１１０のコンポーネントには、処理装置１２０、システムメモリ１３０、および、システムメモリを含めて様々なシステムコンポーネントを処理装置１２０に結合する、システムバス１２１を含めることができるが、それらに限定されるわけではない。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む、様々なバスアーキテクチャのいずれかを使用したいくつかのバス構造のうちいずれかであってよい。例として、このようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｅ）ローカルバス、およびメザニンバスとしても知られるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれるが、それらに限定されるわけではない。
【００２６】
コンピュータ１１０は、一般に、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０がアクセスでき、揮発性および不揮発性媒体、取外し可能および取外し不可能媒体を含む、任意の利用可能な媒体であってよい。例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むが、それらに限定されるわけではない。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を記憶するための、いずれかの方法または技術で実装された、揮発性および不揮発性、取外し可能および取外し不可能媒体が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、またはその他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、またはその他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、またはその他の磁気記憶装置、あるいは、所望の情報を記憶するために使用でき、コンピュータ１１０がアクセスできる任意のその他の媒体が含まれるが、それらに限定されるわけではない。通信媒体は、一般に、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを、搬送波またはその他のトランスポートメカニズムなどの変調データ信号に実施し、また、いずれかの情報配信媒体を含む。「変調データ信号」という用語は、その特性の１つまたは複数が、その信号中の情報を符号化するように設定または変更された信号を意味する。例として、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、および音響、ＲＦ、赤外線、およびその他の無線媒体などの無線媒体を含まれるが、それらに限定されるわけではない。上記のいずれかの組合せも、コンピュータ可読媒体の範囲に含まれるものとする。
【００２７】
システムメモリ１３０は、読取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２などの揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ１１０中の構成要素間の情報の転送の助けとなる基本ルーチンを含む、ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１３３が、通常ＲＯＭ１３１に記憶されている。ＲＡＭ１３２は、一般に、処理装置１２０が直接、アクセス可能であり、および／または、処理装置１２０によって現在、操作されているデータおよび／またはプログラムモジュールを含む。例として、図１には、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７を示すが、それらに限定されるわけではない。
【００２８】
コンピュータ１１０はまた、その他の取外し可能／取外し不可能な揮発性／不揮発性コンピュータ記憶媒体も含む。例にすぎないが、図１には、取外し不可能な不揮発性磁気媒体からの読取りまたはそこへの書込みを行うハードディスクドライブ１４１、取外し可能な不揮発性磁気ディスク１５２からの読取りまたはそこへの書込みを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭまたはその他の光媒体などの取外し可能な不揮発性光ディスク１５６からの読取りまたはそこへの書込みを行う光ディスクドライブ１５５を示してある。例示的な動作環境で使用できるその他の取外し可能／取外し不可能な揮発性／不揮発性コンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体状態ＲＡＭ、固体状態ＲＯＭなどが含まれるが、それらに限定されるわけではない。ハードディスクドライブ１４１は、一般に、インターフェース１４０などの取外し不可能なメモリインターフェースを介して、システムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、一般に、インターフェース１５０などの取外し可能なメモリインターフェースによってシステムバス１２１に接続される。
【００２９】
上記に説明し、図１に示すドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュールおよびその他のデータの記憶をコンピュータ１１０に提供する。図１では、例えば、ハードディスクドライブ１４１を、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶しているものとして示してある。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７と同じ場合もあれば異なる場合もあることに注意されたい。本明細書では、少なくとも異なるコピーであることを示すために、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７に異なる番号を付けてある。ユーザは、キーボード１６２、および、一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス１６１などの入力デバイスを介して、コンピュータ１１０にコマンドおよび情報を入力することができる。その他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用アンテナ、スキャナなどが含まれる。これらおよびその他の入力デバイスは、システムバスに結合されたユーザ入力インターフェース１６０を介して処理装置１２０に接続されることが多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など、その他のインターフェースおよびバス構造によって接続することができる。モニタ１９１またはその他のタイプの表示デバイスも、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。コンピュータは、一般に、モニタに加えて、スピーカ１９７やプリンタ１９６などのその他の周辺出力デバイスも含むことができ、それらを、出力周辺インターフェース１９５を介して接続することができる。
【００３０】
コンピュータ１１０は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理接続を使って、ネットワーク化された環境で動作することができる。リモートコンピュータ１８０は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の一般的なネットワークノードであってよく、一般に、パーソナルコンピュータ１１０に関連して上述した構成要素の多くまたはすべてを含む。ただし、図１にはメモリ記憶装置１８１のみを示してある。図１に示す論理接続には、ローカルエリアネットワーク（ＬＡＮ）１７１および広域ネットワーク（ＷＡＮ）１７３が含まれるが、その他のネットワークも含まれ得る。このようなネットワーク化環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいてはごく一般的である。
【００３１】
ＬＡＮネットワーク化環境において使用する場合、パーソナルコンピュータ１１０を、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続する。ＷＡＮネットワーク化環境において使用する場合、コンピュータ１１０は、一般に、モデム１７２、またはインターネットなどのＷＡＮ１７３を介して通信を確立するためのその他の手段を含む。モデム１７２は、内蔵または外付けであってよく、ユーザ入力インターフェース１６０またはその他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク化環境においては、パーソナルコンピュータ１１０に関連して説明したプログラムモジュールまたはその一部をリモートメモリ記憶装置に記憶することができる。例として、図１は、リモートアプリケーションプログラム１８５をメモリ装置１８１に常駐するものとして示しているが、そのように限定されるわけではない。図示のネットワーク接続は例にすぎず、コンピュータ間の通信リンクを確立するためのその他の手段を使用することができることを理解されよう。
【００３２】
以下の説明では、別途記載がない限り、本発明を、１台または複数のコンピュータによって実行される動作およびオペレーションの符号表現に関連して説明する。したがって、コンピュータによって実行されている、と呼ぶ場合もあるこのような動作およびオペレーションには、コンピュータの処理装置による、構造化された形態のデータを表す電気信号の操作が含まれることを理解されたい。この操作は、データを変換し、またはデータをコンピュータのメモリシステム中のロケーションに維持し、それによって、当業者によく知られたやり方で、コンピュータのオペレーションを再構成し、またはその他の方法で変更する。データが維持されるデータ構造は、そのデータのフォーマットによって定義される特定のプロパティを有する、メモリの物理的ロケーションである。しかし、本発明を前述の状況で記載しているが、当業者であれば、本明細書に記載の動作およびオペレーションの変形もハードウェアに実装できることを理解されるように、それは限定することを意味するものではない。
【００３３】
次に、図２を参照しながら、本発明のファイアウォールを実装する方法を使用したネットワーク環境について説明する。本発明の方法は、任意のネットワーク構成に結合された任意のネットワークデバイスに実装されるので、このネットワークは、実際には例示にすぎない。このネットワーク環境は、専用ネットワーク２００および公衆ネットワーク２０２を含む。専用ネットワーク２００および公衆ネットワーク２０２は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、イントラネット、インターネット、またはそれらの任意の組合せなど、任意の適切なタイプのネットワークである。
【００３４】
このネットワーク環境は、複数のネットワークデバイス２０４、２０６、２０８、２１０および２１２を含む。ネットワークデバイス２０４、２０６は、専用ネットワーク２００に結合されている。ネットワークデバイス２１０、２１２は、公衆ネットワーク２０２に結合されている。ネットワークデバイス２０８は、専用ネットワーク２００および公衆ネットワーク２０２の両方に結合され、それらの間にインターフェースを提供している。ネットワークデバイスは、イーサネット（登録商標）、１３９４または８０２．１１（ｂ）などの任意の適切な技術を使って、公衆および専用ネットワークに結合される。ネットワークデバイスは、さらに、パーソナルコンピュータ、サーバ、ハンドヘルドデバイス、プリンタ、スイッチ、ルータ、ブリッジ、リピータなどの任意の適切なコンピューティングデバイスとして実装される。
【００３５】
ネットワークデバイス２０８は、ファイアウォール２１４、および１つまたは複数のフィルタ２１６を含む。ファイアウォール２１４は、本発明による方法が利用されているファイアウォールアーキテクチャに従って実装された、プログラムモジュールまたは１組のプログラムモジュールである。ファイアウォール２１４は、専用ネットワーク２００に結合されたネットワークデバイス２０４、２０６、２０８と公衆ネットワーク２０２に結合されたネットワークデバイス２１０、２１２の間で交換されるネットワークパケットを調べる。本発明の一実施形態では、ファイアウォール２１４はまた、専用ネットワーク２００内のネットワークデバイスから送られてきた、またはそれらに宛てられた、ローカルに宛てられたネットワークパケットも調べる。
【００３６】
ファイアウォール２１４を、専用ネットワーク２００と公衆ネットワーク２０２との間で交換されるネットワークトラフィックの保護および制御を行うためにネットワークデバイス２０８に実装する。これをエッジファイアウォールと呼ぶ。あるいは、ファイアウォール２１４を、ネットワークデバイス２１０中に示すような単一のネットワークデバイスに実装し、それを保護する。これをホストファイアウォールと呼ぶ。また、ファイアウォールを、集中管理された１組のホストおよび／またはエッジファイアウォールとして同期させて実装することもできる。これを分散ファイアウォールと呼ぶ。ファイアウォール２１４を実装したネットワークデバイスまたは複数ネットワークデバイスの配置は、好ましくは、ファイアウォール２１４が、それが保護するよう意図されているネットワークデバイスに宛てられたすべてのネットワークトラフィックを調べることができるように選択する。
【００３７】
フィルタ２１６をファイアウォール２１４の一部として実装する。あるいは、フィルタ２１６を、ファイアウォール２１４がアクセス可能な別個のデータ構造の一部として実装する。ファイアウォール２１４およびフィルタ２１６は、公衆ネットワークに結合されたネットワークデバイス２１０、２１２から発信された悪意ある攻撃からネットワークデバイス２０４、２０６、２０８を保護するよう設計された、ファイアウォールポリシーを実行する。ファイアウォール２１４はまた、保護者制御、侵入の検出、ネットワークパケットのロギング、およびその他の追加されたフィルタベースの機能を容易にするなど、追加の機能も提供する。
【００３８】
各フィルタ２１６は、１組のフィルタ条件、および１つまたは複数の関連アクションを含む。フィルタ条件は、インターフェース番号、ハードウェアアドレス、ネットワークアドレス、プロトコル型、ポート番号、ペイロードデータなど、ネットワークパケットからパースし、あるいはまた、取得することができるパラメータおよび情報を含む。１つまたは複数の関連アクションは、ファイアウォールを実装しているネットワークデバイスが、フィルタ条件にマッチするパケットをどのように扱うべきかを定義する。代表的なアクションには、許可、すなわちパケットにネットワークのトラバースを続けさせること、およびブロック、すなわち、パケットを落とすことによってネットワークのさらなるトラバースを妨げることが含まれる。
【００３９】
ファイアウォール２１４は、ネットワークをトラバースするネットワークパケットを、それらがネットワークデバイス２０８で受信されたときに調べ、また、パケットのパラメータをフィルタ条件と比較することにより、１つまたは複数のマッチするフィルタを識別する。マッチするフィルタは、フィルタ条件がパケットパラメータにマッチしたときに得られる。パケットパラメータは、フィルタ条件のように、パケットからパースされ、あるいはまた、取得される情報を含む。ファイアウォールがマッチするフィルタを識別すると、フィルタ条件に関連する１つまたは複数のアクションが実行される。
【００４０】
本明細書で使用しているパケットという用語は、データを指す。パケットは、ネットワークプロトコルに従ってフォーマットされたネットワークパケット、あるいは、層、プログラム、またはモジュールによって処理されたデータストリームの場合がある。
【００４１】
図３は、本発明の方法を利用できるファイアウォールアーキテクチャの例示的な実施形態を示す。この方法は、ネットワークスタックのすべての層においてパケットをフィルタにかける能力を提供する。この方法は、フィルタの追加および削除を可能にし、また、フィルタのコンフリクトの識別および解決を可能にする中央管理機能を提供する。ファイアウォールアーキテクチャは、必要に応じてフィルタ層が追加および削除され、また、許可アクションおよびブロックアクション以外の特殊な機能を含むように拡張されるという点で、拡張可能である。本発明を、特にファイアウォールおよびファイアウォールフィルタに関して記載しているが、本方法を、その他のフィルタおよびポリシーを容易にし、かつ管理するために使用することもできる。具体例として、本発明は、ＱＯＳ（Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）、インターネットプロトコルセキュリティ（ＩＰＳｅｃ）スイート、およびその他の暗号化プロトコル、認証プロトコル、および鍵管理プロトコルで使用されるフィルタを容易にし、かつ管理するために適している。
【００４２】
ファイアウォールアーキテクチャは、ユーザモードプロセス２５０およびカーネルモードプロセス２５２を含む。ユーザモードプロセス２５０およびカーネルモードプロセス２５２は、ネットワークデバイス中のオペレーティングシステムの一部として実行する。当業者には、簡略化のために図示していないが、オペレーティングシステムのユーザモードプロセス２５０およびカーネルモードプロセス２５２がさらなるコンポーネントを含むことを理解されよう。あるいは、ファイアウォールアーキテクチャの全体または一部が、１つまたは複数のプログラムモジュールまたはアプリケーションプログラムとしてオペレーティングシステムの外で実行され、または、単一のオペレーティングシステムプロセスの中で実行される。
【００４３】
カーネルモードプロセス２５２は、ネットワークスタック２５４、カーネルファイアウォールエンジン２５６、およびオプションのコールアウト２５８を含む。これらが協働して、カーネルモードプロセス２５２は、ネットワークパケットにマッチするフィルタを識別し、既知のプロトコルに従ってパケットを処理し、マッチしたフィルタによって指定されるようにその他のアクションをパケットに実行することにより、確立されたファイアウォールポリシーを実装する。
【００４４】
ネットワークスタック２５４は、データストリーム層２６８、トランスポート層２７０、ネットワーク層２７２、およびリンク層２７４を含む、複数の層を含む。ファイアウォールアーキテクチャは拡張可能であり、必要に応じて、さらなる層が動的に追加され、または削除される。追加層の例としては、サーバマスタブロック（ＳＭＢ）プロトコルに従って実装されるファイルアクセス層２７６が挙げられる。層は、ハイパーテキスト転送プロトコル（ＨＴＴＰ）パーサモジュール２７８などのその他のプログラムモジュールと協働して動作する。
【００４５】
ネットワークスタック２５４中の層は、インバウンドおよびアウトバウンドネットワークパケットを処理する。アウトバウンドネットワークパケットは、ファイアウォールアーキテクチャをネットワークに実装するネットワークデバイスから送られてくるパケットである。インバウンドパケットは、ファイアウォールアーキテクチャを実装するネットワークデバイスで受信されるパケットである。図３に示す矢印がそれぞれ表しているように、インバウンドパケットは、ネットワークスタック２５４を底部から上部にトラバースし、アウトバウンドパケットは、ネットワークスタック２５４を上部から底部にトラバースする。
【００４６】
ネットワークパケットは、ネットワーク層を順番にトラバースし、それらのネットワーク層によって順番に処理される。既知の技術に従って、ネットワークスタック２５４中の各層は、前の層またはモジュールからパケットを受け取り、そのパケットを仕様またはプロトコルに従って処理し、処理したパケットを次の層またはモジュールに送ることができる。本発明によれば、各ネットワークスタック２５４中の各層はまた、パケットコンテキストを維持し、パケットコンテキストを次の層に渡し、カーネルファイアウォールエンジン２５６に分類要求を発行し、ファイアウォールポリシーに従ってパケットに対するアクションを実行する。
【００４７】
パケットコンテキストは、層から層へとパケットについて行くデータ構造である。各層は、その層が処理するように設計されている１組のパラメータ、例えば、その層がパケットから追加、パース、またはその他の方法で引き出すように設計されている情報を、コンテキストデータ構造中に追加することによって、コンテキストを維持する。パケットコンテキストに使用される例示的なデータ構造について、図５を参照しながら説明する。
【００４８】
ネットワークスタック２５４の層が本発明に従って実行するオペレーションの１つは、分類要求を発行することによってカーネルファイアウォールエンジン２５６を呼び出すことである。分類要求は、ネットワークスタック２５４中の層による、パケットにマッチするいずれかのフィルタを識別し、いずれかの関連ポリシー、例えばファイアウォールポリシーを返すことを要求するコールである。本明細書では、この分類要求を発行する層を要求ステージまたは要求層と呼ぶ。各層はまた、カーネルファイアウォールエンジン２５６が返してきたパケットに対してアクションを実行する。ユーザモード層も要求層を形成する。
【００４９】
カーネルファイアウォールエンジン２５６は、層ＡＰＩ２８０、１組のインストールされているフィルタ２８２、およびコールアウトＡＰＩ２８４を含む。カーネルファイアウォールエンジン２５６は、本発明の方法に従って様々な機能を実行する。これには、（１）ファイアウォールポリシーを定義する、１組のインストールされているフィルタ２８２を維持すること、（２）ネットワークスタック２５４中の層から分類要求を受け取ること、（３）分類要求に基づいて１つまたは複数のマッチするフィルタを識別すること、（４）パケットに適用すべきいずれかのポリシーを要求層に指示することが含まれる。
【００５０】
１組のインストールされているフィルタのそれぞれは、１組のフィルタ条件、および１つまたは複数の関連アクションを含む。図２を参照して説明したように、フィルタ条件は、関連するフィルタアクションの対象となるネットワークパケットを識別する。１組のインストールされているフィルタ２８２中に指定されているアクションには、許可およびブロックが含まれる。さらなる機能は、オプションのコールアウト２５８を介して追加される。フィルタの例示的な形態について、図４を参照しながら説明する。
【００５１】
層ＡＰＩ２８０は、ネットワークスタック２５４中の層とカーネルファイアウォールエンジン２５６との間にインターフェースを提供する。要求層は、層ＡＰＩ２８０を介して、カーネルファイアウォールエンジン２５６に分類要求を発行する。分類要求は、要求層が受け取った状態のパケット、要求層が受け取った状態のパケットコンテキスト、および層パラメータを含む。層パラメータは、要求層が処理した、例えば追加またはパースした、パケットパラメータである。具体例として、発信元および宛先インターネットプロトコル（ＩＰ）アドレスは、ネットワーク層２７２がＩＰプロトコルを実装する際に送信する層パラメータである。層パラメータはまた、パケットから追加またはパースされた、パケットパラメータ以外の情報も含む。具体例として、層パラメータにはローカルアドレス型も含まれる。ローカルアドレス型はＩＰ層によって決定され、分類要求の一部として送られる。ローカルアドレス型には、ユニキャスト、ブロードキャスト、マルチキャスト、エニーキャストなどが含まれる。層ＡＰＩ２８０の具体的な実装について、図６を参照しながら説明する。
【００５２】
オプションとして、コールアウト２５８を使って、許可およびブロックのフィルタアクション以外の追加機能が実装される。コールアウトは、カーネルファイアウォールエンジン２５６が、コールアウトモジュールの１つに対するコールアウトを関連動作として含むパケットにマッチするフィルタを識別すると、実行される。カーネルファイアウォールエンジンは、要求層によって発行された状態の分類要求、すなわちフルパケット、層パラメータ、およびパケットコンテキストを、コールアウトＡＰＩ２８４を介して、マッチしたフィルタの識別と共にコールアウトモジュールに送る。ファイアウォールアーキテクチャは、コールアウト２５８の基本セットを含む。層と同様に、追加コールアウトが必要に応じて追加され、それによって拡張アーキテクチャが提供される。コールアウトＡＰＩ２８４の具体的な実装について、図６を参照しながら説明する。
【００５３】
ユーザモードプロセス２５０は、ユーザファイアウォールエンジン２６０、および
「ＰＰ１」、「ＰＰ２」、および「ＰＰ３」として識別される、１つまたは複数のポリシープロバイダ２６２を含む。ポリシープロバイダ２６２は、ファイアウォールポリシー、すなわちインストールされているフィルタ２８２をファイアウォールアーキテクチャに追加するプロセスである。任意のプロセスを使って、このタスクを遂行する。一例として、レガシーＩＰＳｅｃポリシーサービス（ＬＩＰＳ）が挙げられる。レガシーＩＰＳｅｃポリシーサービスは、カプセル化セキュリティプロトコル（ＥＳＰ）および認証ヘッダプロトコル（ＡＨ）などのＩＰＳｅｃプロトコルを使用すると考えられるネットワークトラフィックを定義する、フィルタを追加する。具体例として、レガシーＩＰＳｅｃポリシーサービスは、すべての非送信請求インバウンドパケットがＥＳＰプロトコルに従って暗号化されなければならないことを指示するファイアウォールポリシーを追加する。このポリシーはさらに、平文の非送信請求インバウンドパケットはどれも、すなわち暗号化されていないパケットはブロックされるべきであることも定めている。ポリシープロバイダ２６２は、揮発性または不揮発性メモリ中の任意の適切なソースから、または、管理者またはシステムユーザが直接、ポリシーを入力できるようにするグラフィカルユーザインターフェース（ＧＵＩ）からポリシーを取得する。ユーザファイアウォールエンジン２６０は、そのポリシーを新しいフィルタに変換し、すなわち、ポリシーをフィルタ条件および関連アクションについて定義し、その新しいフィルタを１組のインストールされているフィルタ２８２中に追加する。
【００５４】
ユーザファイアウォールエンジン２６０はまた、フィルタアービトレーション機能およびコンフリクト解決機能も実行する。ポリシープロバイダ２６２がユーザモードファイアウォールエンジン２６０に新しいポリシーを供給すると、ユーザファイアウォールエンジン２６０は、その新しいポリシーから得られる新しいフィルタが、インストールされているフィルタ２８２のいずれかとコンフリクトするかどうかを判断する。コンフリクトがある場合、ユーザファイアウォールエンジン２６０は、そのコンフリクトを解決する。例えば、本発明の枠組みにおいて使用するのに適した、コンフリクトを識別して解決するための方法の例が、「Ｍｅｔｈｏｄ  ｆｏｒ  Ｍａｎａｇｉｎｇ  Ｎｅｔｗｏｒｋ  Ｆｉｌｔｒ  Ｂａｓｅｄ  Ｐｏｌｉｃｙ」という名称の代理人整理番号２２１０３７号に記載されている。
【００５５】
このアーキテクチャは、ユーザファイアウォールエンジン２６０とカーネルファイアウォールエンジン２５６の間にインターフェースを形成する、フィルタエンジンＡＰＩ２６６をさらに含む。フィルタエンジンＡＰＩ２６６は、新しいフィルタを１組のインストールされているフィルタ２８２中に追加し、１組のインストールされているフィルタ２８２を調べてフィルタのコンフリクトを検出し、解決できるようにするメカニズムを、ユーザファイアウォールエンジン２６０に提供する。管理ＡＰＩ２９０は、フィルタエンジンＡＰＩ２６６の機能をポリシープロバイダ２６２に公開する。
【００５６】
ユーザモードファイアウォールエンジン２６０はまた、フィルタモジュール２９４も含む。フィルタモジュール２９４は、ユーザモード２５０中のカーネルファイアウォールエンジン２５６のインスタンスである。ユーザモードファイアウォールエンジン２６０中のフィルタモジュール２９４のインスタンスは、ユーザファイアウォールエンジン２６０が、１つまたは複数のユーザモード層であるフィルタ２８２のためにカーネルファイアウォールエンジン２５６のサービスを複製できるようにする。カーネルモード層が作成されるのと同じ方法で、ユーザモード層であるフィルタ２８２が追加される。フィルタモジュール２９４は、カーネルファイアウォールエンジン２５６のユーザモードインスタンスであるため、カーネルモードファイアウォールエンジンについて本明細書に記載されているどの機能もフィルタモジュール２９４に適用されることが理解されよう。例えば、さらなるユーザモード層をシステムアーキテクチャに追加またはそこから削除し、コールアウトを作成することができ、それによって、ユーザモード層に追加機能が提供される。
【００５７】
キーイングモジュールＡＰＩ２８８は、ユーザファイアウォールエンジン２６０とキーイングモジュール２９６との間にインターフェースを提供する。キーイングモジュールは、所与のパケットにどのセキュリティ設定を使用するかを決定するためのメカニズムを提供する。キーイングモジュールＡＰＩ２８８を使用して、キーイングモジュールにＳＡを確立する必要性を合図する。
【００５８】
次に、図４を参照しながら、１組のインストールされているフィルタ２８２について説明する。各フィルタ３１０は、フィルタＩＤ３１２、重み３１４、１つまたは複数のアクション３１６、ポリシーコンテキスト３１７、および１組のフィルタ条件３１８を含む、複数のフィールドを有する。フィルタＩＤ３１２は、フィルタに一意の識別を提供する。フィルタＩＤ３１２は、例えば、カーネルファイアウォールエンジン２５６が、マッチするフィルタの情報をユーザファイアウォールエンジン２６０およびコールアウト２５８に返すための手段として使用される。本発明の一実施形態では、フィルタ３１０を、ネットワークスタック２５４中の層の１つに割り当てる。フィルタＩＤ３１２は、カーネルファイアウォールエンジン２５６が、どのフィルタがどの層に割り当てられたかを追跡するために使用する。
【００５９】
重み３１４は、フィルタ３１０の優先順位を識別する値を含む。重み３１４中の値が大きいほど、そのフィルタの優先順位は高くなる。フィルタの優先順位は、カーネルファイアウォールエンジン２５６が、マッチするフィルタをパケットに適用する順番を決定する。
【００６０】
本発明の一実施形態では、優先順位の最も高いフィルタ、すなわち重みの値が最も大きいフィルタが最初に適用され、次いで、次に優先順位が高いフィルタが適用され、というように、終了アクションを有する、マッチするフィルタに遭遇するまで、それが続けられる。以下に、終了アクションについてより詳細に説明する。終了アクションを有する、マッチするフィルタが適用されると、カーネルファイアウォールエンジン２５６はマッチするフィルタの適用を停止する。したがって、終了アクションが適用された後は、優先順位の低い、マッチするフィルタによって指定されるアクション３１６は、パケットに対して実行されない。あるいは、カーネルファイアウォールエンジン２５６は、単一のマッチするフィルタを識別し、その単一のマッチするフィルタから１組のアクションを返す。カーネルファイアウォールエンジン２５６は、重み３１４に関係なく、すべてのマッチするフィルタを適用することもできる。
【００６１】
１組のフィルタ条件３１８は、パケットがフィルタ３１０にマッチするかどうかを判断する。各フィルタ条件３１８は、型３２０、データ３２２、および層ＩＤ：フィールドＩＤ３２４を含む。型３２０は、対応するデータ３２２中に含まれる変数の長さおよび数を定義する。アーキテクチャは、バイト、ショート、ロング、８バイト、ストリング、インターネットプロトコルバージョン４（ＩＰｖ４）アドレス、インターネットプロトコルバージョン６（ＩＰｖ６）アドレス、ＩＰｖ４アドレスにマスクをプラスしたもの、ＩＰｖ６アドレスにマスクをプラスしたもの、アドレス範囲など、予め定義された既知の変数型を提供する。データフィールド３２２は、型にマッチするデータを含む。例えば、型がＩＰｖ４アドレスの場合、データ３２２に受け入れることができる値は、ドット付き１０進法で表現された、００．００．００．００から２５５．２５５．２５５．２５５までの範囲の３２ビットの数である。場合によっては、型３２０は、データ３２２中に複数の値を供給することがある。アドレス範囲、ＩＰｖ４アドレスにマスクをプラスしたもの、およびＩＰｖ６アドレスにマスクをプラスしたものについては、ＩＰアドレスの範囲の開始と終了を定義する、２つのＩＰアドレス値が可能である。フレキシビリティを最大限にするために、このアーキテクチャではユーザ定義の型も可能である。あるいは、追加の型が、手動でシステムアーキテクチャに追加される。
【００６２】
層ＩＤ：フィールドＩＤ３２４を使って、発信層、および発信層からのパラメータをそれぞれ識別する。発信層、および発信層からのパラメータは、パケットパラメータ、すなわち、データ３２２を比較する対象となる層パラメータおよびパケットコンテキストを定義する。発信層は、ネットワークスタック中の層を識別する。発信層からのパラメータは、発信層に関連する特定のパラメータを識別する。具体例を、フィルタ条件３２６によって示す。型はＩＰｖ４であり、それによって、データ３２２が３２ビットＩＰアドレスであることを示す。層ＩＤは、その３２ビットの数がＩＰ、すなわちネットワークの層パラメータであることを表す「ＩＰ」である。フィールドＩＤは「Ｓｒｃ  ＩＰ  Ａｄｄｒ」であり、これは、この例ではＩＰ層パラメータ、特に発信ＩＰアドレスを表す。データフィールド中に供給された発信ＩＰアドレスは、その発信ＩＰアドレスを有するパケットがどれもフィルタ条件を満たし、したがってフィルタにマッチすることを表す、「１２３．３．２．１」である。
【００６３】
複数のフィルタ条件３１８を指定することができる。複数のフィルタ条件３１８を指定した場合、パケットは、すべてのフィルタ条件３１８が満たされると、フィルタ３１０にマッチする。
【００６４】
フィルタ３１０中に指定されるアクション３１６は、許可、ブロック、またはコールアウトである。フィルタ３１０中のアクション３１６が許可またはブロックであり、パケットがフィルタ３１０にマッチする場合、カーネルファイアウォールエンジン２５６が、許可またはブロックアクションを要求層に返す。アクション３１６がコールアウトの場合、カーネルファイアウォールエンジン２５６は、フルパケット、層パラメータ、コンテキスト、およびマッチするフィルタの識別を含むそれ自身の分類要求を、指定したコールアウトモジュール２５８に発行する。コールアウトモジュール２５８は、パケットに対して、プログラムされた機能、例えば侵入検出を実行する。コールアウトは、カーネルファイアウォールエンジンにアクション（許可またはブロックのいずれか）を返すことができ、カーネルファイアウォールエンジンは、そのアクションを要求層に中継する。コールアウトはまた、許可またはブロックアクションを供給することなくパケットを供給し続けるよう、カーネルファイアウォールエンジンに指示することができる。コールアウトはまた、同様にカーネルファイアウォールエンジン２５６を介して要求層に返されるパケットコンテキストを維持することができる。
【００６５】
アクションの終了または非終了を指定することができる。デフォルトでは、許可およびブロックは終了アクションに指定されている。終了アクションとは、マッチするパケットにおいて識別されると、上述のマッチするフィルタを適用するプロセスを停止させるために使用することができるアクションである。
【００６６】
ポリシーコンテキスト３１７を使って、セキュリティポリシーやＱＯＳポリシーなど、ファイアウォールポリシー以外のポリシーを記憶する。ポリシーコンテキストは、任意の適切なデータ構造である。例えば、ポリシーコンテキストは、そのポリシーコンテキストを追加したプロセスによって解釈される、６４ビットの数である。ポリシーコンテキストおよび／またはアクションはナル値の場合もある。
【００６７】
図５は、ネットワークスタック２５４中の層およびコールアウトモジュール２５８によって維持され、それらに渡されるパケットコンテキストに使用される、データ構造３３０の例を示す。パケットコンテキスト（データ構造３３０）は、インバウンドまたはアウトバウンドネットワークパケットが層をトラバースするのについていき、符号３３６〜３４０で示してある１つまたは複数のエントリを含む。各エントリは、層ＩＤ：フィールドＩＤ３３２および対応する値３３４を含む。
【００６８】
層ＩＤ：フィールドＩＤ３３２は、フィルタ３１０中のフィルタ条件３１８の一部として提供される層ＩＤ：フィールドＩＤ３２４（図４）と同じ意味を持つ。すなわち層ＩＤ：フィールドＩＤ３３２は、値フィールド３３４中のデータについて、発信層、およびその発信層からの層パラメータを識別する。値フィールド３３４は、特定の層パラメータを含む。
【００６９】
具体例として、エントリ３３６は、層ＩＤ：フィールドＩＤ３３２「ＮＤＩＳ：Ｓｒｃ．  Ｍａｃ  Ａｄｄｒ」を含む。「ＮＤＩＳ」は、リンク層２７４（図３）のネットワークドライバインターフェース仕様による実装を表す。「Ｓｒｃ  ＭＡＣ  ａｄｄｒ．」は発信元ＭＡＣアドレスを表す。したがって、層ＩＤ：フィールドＩＤ３３２は、値フィールド３３４中のデータが、ＮＤＩＳ（リンク）層によって処理された発信元ＭＡＣアドレスであることを表す。値フィールド３３４は、実際の発信元ＭＡＣアドレスを含み、それは、この例では、１６進法で表現された「００．０８．７４．４Ｆ．２２．Ｅ５」である。
【００７０】
第２の例として、エントリ３３８は、「ＮＤＩＳ：ＩＦ  Ｎｏ．」という層ＩＤ：フィールドＩＤ３３２を有する。これは、この場合もその層をＮＤＩＳとして識別するが、ただしこの場合は、パラメータを、インターフェース番号を特定のＮＤＩＳパラメータとして表す「ＩＦ  Ｎｏ」として識別する。値フィールド３３４は、実際のインターフェース番号を含み、この場合、それは２である。
【００７１】
第３の例として、エントリ３４０は、「ＩＰ：Ｄｓｔ  ＩＰ  Ａｄｄｒ．」という層ＩＤ：フィールドＩＤ３３２を有する。「ＩＰ」は、ＩＰプロトコルを使っているネットワーク層を表し、「Ｄｓｔ  ＩＰ  Ａｄｄｒ．」は、宛先ＩＰアドレスをＩＰ層パラメータとして表している。値フィールド３３４は、「１２３．３．２．１」という実際の宛先ＩＰアドレスを含んでいる。
【００７２】
基礎をなすファイアウォールアーキテクチャについて説明してきたが、本システムの機能インターフェース、および本明細書に記載の基礎をなすファイアウォールアーキテクチャを使って実行される例示的な方法について記載する。機能インターフェースは、複数のアプリケーションプログラミングインターフェース（ＡＰＩ）として実装される。ＡＰＩは、図６および７に示すように、層ＡＰＩ２８０、コールアウトＡＰＩ２８４、フィルタエンジンＡＰＩ２６６、およびキーイングモジュールＡＰＩ２８８を含む。
【００７３】
層ＡＰＩ２８０は、ネットワークスタック２５４中の各層とカーネルファイアウォールエンジン２５６との間のデータ交換を容易にする。図示するように、層ＡＰＩ２８０は、Ｃｌａｓｓｉｆｙメソッド３５０、Ａｄｄ  Ｌａｙｅｒメソッド３５２、およびＤｅｌｅｔｅ  Ｌａｙｅｒメソッド３５４を含む。
【００７４】
Ｃｌａｓｓｉｆｙメソッド３５０は、要求層が、層パラメータ、要求層が受け取った状態のパケット、およびパケットコンテキストをカーネルファイアウォールエンジン２５６に送るために使用する。カーネルファイアウォールエンジン２５６は、（１）要求層からの層パラメータ、および（２）パケットコンテキストエントリを、要求層に割り当てられた各フィルタ３１０中のフィルタ条件３１８と比較して、マッチするフィルタを識別する。以下は、Ｃｌａｓｓｉｆｙメソッドの例示的な実装である。以下のメソッドが、データ値を受け取り、または返すものとして記載されていることを理解されよう。既知のプログラミング技術によれば、これらのメソッドは、実施のデータ値の代わりに、データ値へのポインタを使用することができる。
【００７５】
【表１】
2004362590.tif 000003
【００７６】
以下は、記載のパラメータについて述べたものである。  
ＬａｙｅｒＩｄは、分類要求を発行した層、すなわち要求層を識別する。図３を参照すると、層ＩＤは、この層をデータストリーム層２６８、トランスポート層２７０、ネットワーク層２７２、またはリンク層２７４として識別する。ユーザモード層を含むその他の層は、システムに追加されていれば有効である。例えば、ＳＭＢ層２７６が追加されている場合、それはそれ自身の一意の識別を備えている。本発明のファイアウォールアーキテクチャは、さらに、ネットワークスタック２５４中の層における複数のプロトコルの実装を可能にする。例えば、スタックは、２つのトランスポート層２７０を備えており、第１のトランスポート層はＴＣＰプロトコルを使用し、第２のトランスポート層はＵＤＰプロトコルを使用する。
【００７７】
ｐＩｎＦｉｘｅｄＶａｌｕｅｓは、要求層によって処理される層パラメータの部分集合を含む。パケットコンテキストエントリと共に、ｐＩｎＦｉｘｅｄＶａｌｕｅｓをフィルタ条件と比較することによって、パケットがフィルタとマッチするかどうかが判断される。各層のｐＩｎＦｉｘｅｄＶａｌｕｅｓ中に含まれるデフォルト層パラメータを、下記の表２において識別する。層は、ｐＩｎＦｉｘｅｄＶａｌｕｅｓにおいてアクセスすることができる任意のパラメータを含むことができるため、デフォルト層は一例にすぎず、限定的なものではないことを理解されよう。
【００７８】
【表２】
2004362590.tif 000004
【００７９】
ｐＩｎＣｏｎｔｅｘｔは、要求層が受け取った状態のコンテキストのデータ構造３３０（図５）を含む。このパケットコンテキストは、カーネルファイアウォールエンジン２５６が、マッチするパケットを識別するために層パラメータに関連して使用する。
【００８０】
ｐＰａｃｋｅｔは、要求層が受け取った状態の全パケットを含む。カーネルファイアウォールエンジン２５６は、ｐＰａｃｋｅｔをマッチするフィルタを識別するために使用しない。上述のように、カーネルファイアウォールエンジン２５６は、ｐＩｎＦｉｘｅｄＶａｌｕｅｓおよびｐＩｎＣｏｎｔｅｘｔを使って、マッチするフィルタを識別する。ｐＰａｃｋｅｔは、Ｃｌａｓｓｉｆｙメソッド中に含まれており、したがって、カーネルファイアウォールエンジン２５６は、マッチするフィルタ中のアクション３１６として識別される、１つまたは複数のコールアウトモジュール２５８にそれを送ることができる。
【００８１】
ｐＡｃｔｉｏｎＴｙｐｅは、要求層に返されるアクション３１６を含む。返されるアクション３１６は、マッチするフィルタ中、またはマッチするフィルタによって実行されたコールアウトモジュール中に識別されたものとして、許可またはブロックを含んでいるか、または何も含んでいない。
【００８２】
ｐＯｕｔＣｏｎｔｅｘｔは、ポリシーコンテキストデータを含む。上述のように、ポリシーコンテキストは、ＩＰＳｅｃ、ＱＯＳ、およびいずれかのその他の非ファイアウォールフィルタベースのポリシーに関連するネットワークポリシーを容易にするために使用される。
【００８３】
Ａｄｄ  Ｌａｙｅｒメソッド３５２およびＤｅｌｅｔｅ  Ｌａｙｅｒメソッド３５４を使って、それぞれ、ファイアウォールアーキテクチャに層を追加、およびそこから層を削除する。以下は、Ａｄｄ  Ｌａｙｅｒメソッド３５２の例示的な形態である。
【００８４】
NTSTATUS
AddExtensionLayer(OUT PULONG pLayerId);
以下は、記載のパラメータについて述べたものである。
【００８５】
ｐＬａｙｅｒＩｄは、追加される層、すなわちＡｄｄ  Ｌａｙｅｒメソッドを実行する層に返される一意の層識別値である。
【００８６】
以下は、Ｄｅｌｅｔｅ  Ｌａｙｅｒメソッド３５４の例示的な形態である。  
NTSTATUS
RemoveExtensionLayer(ULONG LayerId);
【００８７】
以下は、記載のパラメータについて述べたものである。
ＬａｙｅｒＩｄは、除去される層、すなわちＤｅｌｅｔｅ  Ｌａｙｅｒメソッドを実行する層を識別する。
【００８８】
コールアウトＡＰＩ２８４は、カーネルファイアウォールエンジン２５６とコールアウト２５８の間のデータ交換を容易にする。層ＡＰＩ２８０と同様に、コールアウトＡＰＩ２８４はＣｌａｓｓｉｆｙメソッドを有する。コールアウトＡＰＩ２８４のＣｌａｓｓｉｆｙメソッド３５６は、マッチするフィルタのデータも含む点を除いて、層ＡＰＩ２８０のＣｌａｓｓｉｆｙメソッド３５０と同様である。以下は、コールアウトを実行するために使用されるＣｌａｓｓｉｆｙメソッド３５６の例示的な形態である。
【００８９】
【表３】
2004362590.tif 000005
【００９０】
以下は、記載のパラメータについて述べたものである。  
ｆｉｘｅｄＶａｌｕｅｓは、要求層から送られる層パラメータを含む。ｆｉｘｅｄＶａｌｕｅｓは、層ＡＰＩ２８０中のＣｌａｓｓｉｆｙメソッド３５０の一部として送られるｐＩｎＦｉｘｅｄＶａｌｕｅｓデータ中の、要求層によって供給されたデータと同じデータである。
【００９１】
ｗｆｐＣｏｎｔｅｘｔは、コンテキストのデータ構造３３０（図５）を含む。このデータは、層ＡＰＩ２８０中のＣｌａｓｓｉｆｙメソッド３５０の一部として送られるｐＩｎＣｏｎｔｅｘｔ中の、要求層によって送られるデータと同じデータである。
【００９２】
ｐａｃｋｅｔは、要求層が受け取った状態の全パケットを含む。このデータは、層ＡＰＩ２８０中のＣｌａｓｓｉｆｙメソッド３５０の一部として送られるｐＰａｃｋｅｔ中の、要求層によって送られるデータと同じデータである。
【００９３】
ｍａｔｃｈｅｄＦｉｌｔｅｒは、コールアウトを要求しているフィルタを識別する。一般に、マッチするフィルタは、コールアウトＡＰＩ２８４のＣｌａｓｓｉｆｙメソッド３５６を開始するマッチするフィルタ３１０のフィルタＩＤ３１２によって識別される。
【００９４】
ｐＡｃｔｉｏｎＴｙｐｅは、コールアウト２５８からカーネルファイアウォールエンジン２５６に返されるアクションを含む。ｐＡｃｔｉｏｎＴｙｐｅが許可またはブロックの場合、それは、層ＡＰＩ２８０が返すｐＡｃｔｉｏｎＴｙｐｅとして、要求層に返される。コールアウトはまた、カーネルファイアウォールエンジン２５６にマッチするフィルタをパケットに適用し続けるよう指示する、持続アクションを返すこともできる。
【００９５】
ｐＯｕｔＣｏｎｔｅｘｔは、セキュリティまたはＱＯＳポリシーデータなどのポリシーコンテキストデータを含む。
【００９６】
コールアウトＡＰＩ４０８は、Ｎｏｔｉｆｙメソッド３５８も含む。Ｎｏｔｉｆｙメソッド３８５を使って、コールアウトモジュール２５８をそのアクション３１６の１つとして識別する、１組のインストールされているフィルタ２８２にフィルタ３１０が追加された際に、コールアウトを通知する。Ｎｏｔｉｆｙメソッドは、コールアウト２５８がカーネルファイアウォールエンジン２５６によって実行されたときに使用するバッファの割振りおよび割振り解除など、いずれかの要求されたアクションを実行する機会を、そのコールアウトに与える。以下は、Ｎｏｔｉｆｙメソッド３５８の例示的な形態である。
【００９７】
【表４】
2004362590.tif 000006
【００９８】
以下は、記載のパラメータについて述べたものである。  
ｎｏｔｉｆｙは、フィルタが追加されているか、または削除されているかを表す数値を含む。例えば、１という値はフィルタが追加されていることを表し、２という値はフィルタが削除されていることを表す。
【００９９】
ｆｉｌｔｅｒは、一意の値によって、フィルタが追加されているか削除されているかを識別する。これは、フィルタ３１０の一部として含まれているフィルタＩＤ３１２を供給することによって成し遂げられる。
【０１００】
コールアウトＡＰＩはまた、それぞれ、コールアウトモジュールを追加および除去するための、Ｃａｌｌｏｕｔ  Ｒｅｇｉｓｔｒａｔｉｏｎメソッド３６０およびＣａｌｌｏｕｔ  Ｄｅｒｅｇｉｓｔｒａｔｉｏｎ３６２メソッドも含む。Ｃａｌｌｏｕｔ  Ｒｅｇｉｓｔｒａｔｉｏｎメソッド３６０の例示的な形態は、以下の通りである。
【０１０１】
【表５】
2004362590.tif 000007
【０１０２】
以下は、記載のパラメータについて述べたものである。  
ｃａｌｌｏｕｔＩＤは、コールアウトモジュールを登録するための一意の識別を提供する。
【０１０３】
ｃａｌｌｏｕｔは、ドライバサービス名、デバイス名、およびコールアウトの分類および通知機能へのポインタなど、いずれかのコールアウト特有の情報を提供する。
【０１０４】
ｓｄは、コールアウトのセキュリティ記述子を提供する。セキュリティ記述子は、どのプロセスがコールアウトの読取りおよび削除を行うかを識別する。
【０１０５】
Ｃａｌｌｏｕｔ  Ｄｅｒｅｇｉｓｔａｒｔｉｏｎメソッド３６２の例示的な形態は以下の通りである。
【０１０６】
【表６】
2004362590.tif 000008
【０１０７】
以下は、記載のパラメータについて述べたものである。  
ｃａｌｌｏｕｔＩＤは、削除すべきコールアウトの一意のＩＤである。
【０１０８】
フィルタエンジンＡＰＩ２６６は、ユーザファイアウォールエンジン２６０とカーネルファイアウォールエンジン２５６との間のデータ交換を容易にする。図示のように、フィルタエンジンＡＰＩ２６６は、Ａｄｄ  Ｆｉｌｔｅｒメソッド３６４、Ｄｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド３６６、およびＥｎｕｍ  Ｌａｙｅｒメソッド３６８を含む。上述のように、フィルタエンジンＡＰＩ２６６のメソッドを管理ＡＰＩ２９０中に含めることにより、その中の機能をポリシープロバイダ２６２に公開することができる。
【０１０９】
Ａｄｄ  Ｆｉｌｔｅｒメソッド３６４およびＤｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド３６６を使って、それぞれ、１組のインストールされているフィルタ２８２への新しいフィルタの追加、または１組のインストールされているフィルタ２８２からの既存のフィルタの削除を行うことができる。以下は、Ａｄｄ  Ｆｉｌｔｅｒメソッド３６４の例示的な形態である。
【０１１０】
【表７】
2004362590.tif 000009
【０１１１】
以下は、記載のパラメータについて述べたものである。  
ＬａｙｅｒＩｄは、フィルタに割り当てられた層を識別する。
ｐＦｉｌｔｅｒは、１組のインストールされているフィルタ２８２に追加されているフィルタ３１０である。
【０１１２】
以下は、Ｄｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド３６６の例示的な形態である。
【０１１３】
【表８】
2004362590.tif 000010
【０１１４】
以下は、記載のパラメータについて述べたものである。  
ＬａｙｅｒＩｄは、フィルタが割り当てられている層を識別する。  
ｐＦｉｌｔｅｒは、１組のインストールされているフィルタから削除されているフィルタである。
【０１１５】
Ｅｎｕｍ  Ｌａｙｅｒメソッド３６８は、ユーザファイアウォールエンジン２６０に、１組の基準にマッチするすべてのフィルタを識別するためのメカニズムを提供する。これによって、フィルタエンジンＡＰＩ２６６は、フィルタのアービトレーションおよびコンフリクトの解決を行うために、コンフリクトしているフィルタを識別することができる。以下は、Ｅｎｕｍ  Ｌａｙｅｒメソッド３６８の例示的な形態である。
【０１１６】
【表９】
2004362590.tif 000011
【０１１７】
以下は、記載のパラメータについて述べたものである。  
ｐＥｎｕｍＴｅｍｐｌａｔｅは、返すべきフィルタを定義するデータ構造を含む。例えば、返すべきフィルタについての、フィルタ条件が合致しなければならないパラメータを含む。
ｐＭａｔｃｈＣｏｕｎｔは、指定されたｐＥｎｕｍＴｅｍｐｌａｔｅに基づいた、マッチするフィルタの数を含む。
ｐＥｎｕｍＨａｎｄｌｅは、マッチしたフィルタのエントリの参照を含む。
【０１１８】
キーイングモジュールＡＰＩ２８８は、ユーザモードキーイングモジュール層であるフィルタ２８２とユーザファイアウォールエンジン２６０との間にインターフェースを提供する。キーイングモジュールＡＰＩ２８８は、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッド３７０、Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッド３７２、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッド３７４、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッド３７６、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッド３７８、ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド３８０、Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッド３８２、Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡメソッド３８４、Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッド３８６、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッド３８８を含む。
【０１１９】
キーイングモジュールＡＰＩは、開始コンピュータおよび応答コンピュータが使用する、ＩＰＳｅｃによって定義されるセキュリティプロトコルなどのセキュリティプロトコルの使用を容易にするために使用される。ＩＰＳｅｃは、認証ヘッダ（ＡＨ）およびカプセル化セキュリティプロトコル（ＥＳＰ）などのプロトコルを含む。主にＩＥＴＦのリクエストフォーコメント（ＲＦＣ）２４０６に記載されているＥＳＰプロトコルは、完全性、発信元の認証、およびデータの機密性を提供するための暗号化メカニズムを使用した、認証／暗号化プロトコルである。主にＩＥＴＦのＲＦＣ２４０２に記載されているＡＨプロトコルは、パケットヘッダ中のハッシュ署名を使用して、パケットデータの完全性および送信者が本人であることを検証する認証プロトコルである。
【０１２０】
主にＩＥＴＦのＲＦＣ２４０９に記載されているＩＫＥプロトコルは、開始コンピュータおよび応答コンピュータが、ＡＨおよびＥＳＰプロトコルを使って使用されているセキュリティ設定をネゴシエートするための方法を提供する。ネゴシエートされたセキュリティ設定は、セキュリティアソシエーション（ＳＡ）と呼ばれるデータ構造を形成する。ＳＡは、ＥＳＰまたはＡＨがＩＰパケットの内容を保護するために使用する、認証アルゴリズム、暗号化アルゴリズム、鍵、および鍵の寿命などのパラメータを定義する。ＥＳＰおよびＡＨは確立されたＳＡを必要とするため、ＥＳＰまたはＡＨプロトコルを開始および応答コンピュータが使用する前に、ＩＫＥネゴシエーションが実行される。所与のＳＡは、セキュリティパラメータインデックス（ＳＰＩ）として知られる値によって識別される。
【０１２１】
開始コンピュータおよび応答コンピュータのそれぞれは、ＩＰＳｅｃポリシーに基づいて、開始コンピュータおよび応答コンピュータの間で送信されるデータが暗号化または認証を必要とするかどうかを判断する、ＩＰＳｅｃドライバを含む。ＩＰＳｅｃポリシーは、ネットワークデバイスがどのようにＩＰＳｅｃを使用するかを定義し、また、フィルタリスト、認証方法、その他の情報を含む、１組のフィルタである。本発明の一実施形態では、ＩＰＳｅｃポリシーが、１組のインストールされているフィルタ中に含まれるフィルタによって定義される。
【０１２２】
ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッド３７０は、（クライアントプロキシを介して）キーイングモジュールにドライバ取得要求または外部開始要求を渡すためにユーザファイアウォールエンジン２６０によって呼び出される。キーイングモジュールはこのコールを返し、非同期でネゴシエーションを行う。キーイングモジュールがネゴシエーションを完了すると、キーイングモジュール層は、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッド３７４を呼び出して、ユーザファイアウォールエンジンにネゴシエーションが完了したことを通知する。以下は、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッドの例示的な形態である。
【０１２３】
【表１０】
2004362590.tif 000012
【０１２４】
以下は、記載のパラメータについて述べたものである。  
ｉｐｓｅｃＣｏｎｔｅｘｔは、ａｃｑｕｉｒｅを、追加されているＳＡにリンクするためのハンドルである。
ａｃｑｕｉｒｅは、（ＩＫＥ）などの既知のプロトコルに従ってＳＡをネゴシエートするために必要な情報を含む。
ｉｎｂｏｕｎｄＳＡｓｐｉは、インバウンドＳＡに使用されるＳＰＩを含む。
Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッド３７２は、インバウンドＳＡを追加したキーイングモジュールにｅｘｐｉｒｅ−ｎｏｔｉｆｙを渡すために呼び出される。以下は、Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッドの例示的な形態である。
【０１２５】
【表１１】
2004362590.tif 000013
【０１２６】
以下は、記載のパラメータについて述べたものである。
ｅｘｐｉｒｅＮｏｔｉｆｙは、終了ＳＡを識別する情報を含む。例えば、アウトバウンドＳＡの場合はＳＰＩが供給される。
【０１２７】
ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッド３７４は、ネゴシエーションを終えてすべてのＳＡを追加した後、またはエラーが生じた後に、ユーザファイアウォールエンジン２６０のコンテキストを閉じるために、キーイングモジュールによって呼び出される。このメソッドが実行された後は、キーイングモジュール層は、ｉｐｓｅｃＣｏｎｔｅｘｔを他のどのＡＰＩメソッドにも再使用しない。以下は、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッドの例示的な形態である。
【０１２８】
【表１２】
2004362590.tif 000014
【０１２９】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０にハンドルを提供する。
ｉｐｓｅｃＣｏｎｔｅｘｔは、ユーザファイアウォールエンジン２６０がＩＰＳｅｃ  Ａｃｑｕｉｒｅメソッドを使って渡すコンテキストである。
ｓｔａｔｕｓは、ＳＡネゴシエーションのステータスおよびその他の詳細を提供する。ユーザファイアウォールエンジン２６０は、ａｃｑｕｉｒｅがＦｗｐＫｅｙｉｎｇＭｏｄｕｌｅＩｎｉｔｉａｔｅ０によって外部で開始された場合に、このｓｔａｔｕｓを返す。
Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッド３７６は、ユーザファイアウォールエンジン２６０に登録し、その関数ポインタを渡すためにキーイングモジュール層によって呼び出される。以下は、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッドの例示的な形態である。
【０１３０】
【表１３】
2004362590.tif 000015
【０１３１】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０にハンドルを提供する。
ｋｅｙｉｎｇＭｏｄｕｌｅＩＤは、キーイングモジュールの一意のＩＤである。
ｋｅｙｍｏｄＩｎｆｏは、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ関数およびＩＰＳｅｃ  ＳＡ  Ｅｘｐｉｒｅ関数を処理するためのポインタなど、キーイングモジュール層に関する登録情報を含む。
Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッド３７８は、ユーザファイアウォールエンジン２６０から登録を解除するために、キーイングモジュールによって呼び出される。以下は、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッドの例示的な形態である。
【０１３２】
【表１４】
2004362590.tif 000016
【０１３３】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
ｋｅｙｉｎｇＭｏｄｕｌｅＩＤは、キーイングモジュール層の一意のＩＤである。
ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド３８０は、新しいインバウンドＳＡのＳＰＩを取得するためにキーイングモジュール層によって呼び出される。ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド３８０は、通常、キーイングモジュール層が応答ネットワークデバイス中で実行する際に使用される。以下は、ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッドの例示的な形態である。
【０１３４】
【表１５】
2004362590.tif 000017
【０１３５】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
ｉｐｓｅｃＴｒａｆｆｉｃＤｅｓｃｒｉｐｔｉｏｎは、インバウンドラーバル（ｌａｒｖａｌ）ＳＡを作成するための５要素からなる記述であるである。５要素には、発信元および宛先ＩＰアドレス、発信元および宛先ポート、トランスポート層のプロトコル型が含まれる。
ｕｄｐＥｎｃａｐＩｎｆｏは、ラーバルＳＡを作成するためのＵＤＰカプセル化データである。ＵＤＰカプセル化は、セキュリティプロトコルに従ってフォーマットされたパケットを非暗号化ＵＤＰパケットに埋め込む、既知の方法である。
ｉｎｂｏｕｎｄＳｐｉはインバウンドＳＡのＳＰＩである。
Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッド３８２は、インバウンドＳＡを追加するために、すなわちラーバルＳＡを更新するためにキーイングモジュール層によって呼び出される。ユーザファイアウォールエンジン２６０は、ＳＡ中のＳＰＩを使って、このコールをその内部状態にマップし、ＳＡをＩＰＳｅｃドライバまでｉｏｃｔｌする。以下は、Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッドの例示的な形態である。
【０１３６】
【表１６】
2004362590.tif 000018
【０１３７】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジンへのハンドルである。
ｉｎｂｏｕｎｄＳＡは、インバウンドＳＡを含む。
Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡ３８４メソッドは、アウトバウンドＳＡを追加するためにキーイングモジュールによって呼び出される。ユーザファイアウォールエンジンは、インバウンドＳＰＩパラメータを使って、このコールをその内部状態にマップし、ＳＡをＩＰＳｅｃドライバまでｉｏｃｔｌする。以下は、Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡメソッドの例示的な形態である。
【０１３８】
【表１７】
2004362590.tif 000019
【０１３９】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
ｉｎｂｏｕｎｄＳｐｉは、インバウンドＳＡのＳＰＩであり、これとアウトバウンドＳＡが対になる。
ｏｕｔｂｏｕｎｄＳＡは、アウトバウンドＳＡを含む。
Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッド３８６は、前に追加されたインバウンドＳＡを終了するためにキーイングモジュールによって呼び出される。以下は、Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッドの例示的な形態である。
【０１４０】
【表１８】
2004362590.tif 000020
【０１４１】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
ｅｘｐｉｒｅは、終了させるＳＡについてのデータを含む。
【０１４２】
Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッド３８８は、ＲＡＳ、Ｗｉｎｓｏｃｋ  ＡＰＩなどの既知の外部アプリケーションがネットワークトラフィックの送信を開始する前に、キーイングモジュール層を開始してＳＡをセットアップするために、そのアプリケーションによって呼び出される。ユーザファイアウォールエンジン２６０は、非同期でＲＰＣコールをペンドし、ＩＰＳｅｃドライバからＳＰＩを取得し、ａｃｑｕｉｒｅを該当するキーイングモジュールに渡す。キーイングモジュールがＦｗｐＩＰＳｅｃＳＡＡｃｑｕｉｒｅＣｏｍｐｌｅｔｅ０を呼び出すと、ユーザファイアウォールエンジンは、ネゴシエーションステータスを使って非同期ＲＰＣを完了する。以下は、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッドの例示的な形態である。
【０１４３】
【表１９】
2004362590.tif 000021
【０１４４】
以下は、記載のパラメータについて述べたものである。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
ａｃｑｕｉｒｅは、ＳＡをネゴシエートするために必要なデータを含む。
【０１４５】
ｗａｉｔＥｖｅｎｔは、ネゴシエーションステータスが利用可能になる際にトリガされるイベントへのハンドルである。クライアント、すなわち呼び出し側の外部アプリケーションが、ネゴシエーションが完了するまで待ちたくないという場合には、このパラメータをＮＵＬＬに設定することができる。内部的には、クライアントプロキシが任意でこのイベントをＲＰＣに渡し、非同期ＲＰＣコールが完了してからそのイベントを設定するように要求する。
【０１４６】
ｎｅｇｏｔｉａｔｉｏｎＳｔａｔｕｓは、ネゴシエーションの結果を含む。ｗａｉｔＥｖｅｎｔがＮＵＬＬの場合、ｎｅｇｏｔｉａｔｉｏｎＳｔａｔｕｓはＮＵＬＬである。ＮＵＬＬではない場合、ｎｅｇｏｔｉａｔｉｏｎＳｔａｔｕｓは、ｗａｉｔＥｖｅｎｔがトリガされるまで有効である。
【０１４７】
図８は、ネットワークスタック２５４中の層が本発明に従って使用するメソッドを示す。図８に示すメソッドを、１つまたは複数のユーザモード層であるフィルタ２８２が、フィルタモジュール２９４およびユーザファイアウォールエンジン２６０に呼応して使用する場合もある。
【０１４８】
各層は、ネットワークパケットの処理、カーネルファイアウォールエンジン２５６への分類要求の発行、パケットコンテキストの管理を含めて、複数の機能が可能である。本発明の一実施形態では、これらの機能が、ネットワークスタック２５４中にインストールされているシム４００、４０２、４０４、４０６中の各層において実行される。あるいは、これらの機能が、シムの必要なく、個々の層に直接、組み込まれる。
【０１４９】
ネットワークスタック２５４は、データストリーム層２６８、トランスポート層２７０、ネットワーク層２７２、およびリンク層２７４を含む。本発明を説明する目的で、リンク層２７４をＮＤＩＳドライバとして実装し、ネットワーク層２７２をＩＰ層として実装し、トランスポート層２７０をＴＣＰ層として実装し、データストリーム層２６８をＨＴＴＰ層として実装している。層を、任意のプロトコルに従って実装できることを理解されよう。例えば、トランスポート層はユーザデータグラムプロトコル（ＵＤＰ）にも対応する。アプリケーション層は、ファイル転送プロトコル（ＦＴＰ）、リモートプロシージャコール（ＲＰＣ）、簡易メール転送プロトコル（ＳＭＴＰ）、サーバマスタブロック（ＳＭＢ）などをサポートする。上述のように、さらなる層をアーキテクチャに追加することも、また層を削除することもできる。例えば、図６を参照しながら説明したＡｄｄ  ＬａｙｅｒメソッドおよびＤｅｌｅｔｅ  Ｌａｙｅｒメソッドを使って、層の追加および削除が行われる。
【０１５０】
４０８（ａ）〜（ｄ）で示すネットワークパケットは、ネットワークスタック２５４中の層をトラバースし、それらの層によって処理されるネットワークパケットを示している。パケット４０８（ａ）〜（ｄ）がインバウンドパケットの場合は、ネットワークスタックを底部から上部に向かってトラバースする。パケット４０８（ａ）〜（ｄ）がアウトバウンドパケットの場合は、ネットワークスタックを上部から底部に向かってトラバースする。このような処理はよく知られているが、本発明を説明する目的で、以下に簡単に記載する。
【０１５１】
ネットワークデバイス中で実行しているウェブブラウザなどのアプリケーションが、別のネットワークデバイス上に置かれているウェブページのコンテンツに対する要求を開始したと想定すると、このアプリケーションは、その要求をデータストリーム層２６８に発行する。この例では、データストリーム層２６８は、ＨＴＴＰプロトコルに従ってその要求をフォーマットし、それをパケット４０８（ａ）でトランスポート層に送る。トランスポート層２７０は、パケット４０８（ａ）を受け取る。ＴＣＰプロトコルを実装しているトランスポート層２７０は、そのデータを１つまたは複数のパケット中に置き、各パケットにはＴＣＰヘッダが備えられる。ＴＣＰヘッダは、発信元および宛先ポート、プロトコル型すなわちＴＣＰ、シーケンス番号、フラグ、およびチェックサムなどの情報を含む。トランスポート層は、次いで、４０８（ｂ）で示すパケットをネットワーク層に送る。
【０１５２】
ネットワーク層はＩＰプロトコルを実装し、データを、発信元および宛先ＩＰアドレス、フラグ、チェックサム、その他の既知の情報を含むＩＰヘッダ内にカプセル化する。ＩＰヘッダはまた、パケットが断片化されているかどうかも示す。パケットは、ＩＰパケットのサイズが、パケットを伝送するために使用されているネットワーク技術の最大伝送単位（ＭＴＵ）サイズを超えている場合に断片化される。例えば、イーサネット（登録商標）技術は、ＭＴＵを１５００バイトに指定している。ＩＰパケット長がこのＭＴＵを超えた場合、２つ以上のＩＰパケットに断片化され、そのそれぞれがそれ自身のＩＰヘッダを備え、ＭＴＵに等しいかそれよりも短い長さになる。
【０１５３】
本発明の一実施形態では、ネットワーク層を第１および第２の層に分割する。断片層と呼ばれる第１の層は、ＩＰパケットの断片を処理する。完全に組み立てられた層と呼ばれる第２の層は、例えば、アウトバウンドＩＰパケットが断片化される前、およびインバウンドＩＰパケットが単一のＩＰパケットに再度組み立てられた後のフルＩＰパケットを処理する。ネットワーク層の処理および可能な断片化の後、パケット４０８（ｃ）がリンク層２７４に送られる。リンク層２７４は、発信元および宛先ＭＡＣアドレスが記載されたＭＡＣヘッダ、およびその他の情報を提供することにより、データをさらにパケット化する。次いで、パケットはネットワークインターフェースカード（ＮＩＣ）に送られ、そこで、物理的にネットワークに伝送される。
【０１５４】
インバウンドパケットは、相互的に処理される。パケット４０８（ｄ）は、ＮＩＣによって受信され、リンク層２７４に送信される。ＭＡＣヘッダが除去され、パケット４０８（ｃ）はネットワーク層に送信される。そこで、必要であればＩＰパケットの断片が再び組み立てられ、ＩＰヘッダがパースされる。ネットワーク層は、次いで、パケット４０８（ｂ）をトランスポート層に送り、そこで、ＴＣＰヘッダが除去され、データストリームが複数のＴＣＰパケットで送られてきた場合にはデータストリームが組み立てられる。最後に、データストリームであるパケット４０８（ａ）がデータストリーム層２６８に送られ、そこで、アプリケーションプロトコル、この場合ＨＴＴＰプロトコルによって、データが復号される。
【０１５５】
各アウトバウンドパケットについて、ネットワークスタックの層は、パケットコンテキスト４１０（ａ）〜（ｃ）を維持する。各インバウンドパケットについて、ネットワークスタックはパケットコンテキスト４１２（ａ）〜（ｃ）を維持する。パケットコンテキストは、各パケットがネットワーク層をトラバースするのについていく。パケットコンテキストはまた、コールアウト２５８（図３）に渡され、場合によって、コールアウト２５８によって修正される。
【０１５６】
パケットコンテキストは、パケットが各層で処理されるのにつれて更新される。各層は、その層パラメータをパケットコンテキストに追加し、それによって、その情報をそれ以降の層またはプロセスに供給する。パケットコンテキスト４１２（ａ）で示すように、リンク層２７４は、インバウンドパケットの発信元および宛先ＭＡＣアドレスおよびインターフェース番号を追加する。このコンテキストをネットワーク層２７２が受け取り、そこで、パケットコンテキスト４１２（ｂ）で示すように発信元および宛先ＩＰアドレスが追加される。トランスポート層２７０はこのコンテキストを受け取り、パケットコンテキスト４１２（ａ）で示すようにポート番号を追加する。
【０１５７】
アウトバウンドパケットに関連するパケットコンテキスト４１０（ａ）〜（ｃ）についても、同様のプロセスが行われる。データストリーム層２６８は、パケットコンテキスト４１０（ａ）で示すように、パケットペイロードからＵＲＬアドレスなどの情報を追加する。トランスポート層２７０は、パケットコンテキスト４１０（ｂ）で示すように、発信元および宛先ポート番号をさらに追加する。また、ネットワーク層は、パケットコンテキスト４１０（ｃ）で示すように、発信元および宛先ＩＰアドレスを追加する。
【０１５８】
各層は、その層が利用可能ないずれかのコンテキスト情報を追加できることを理解されよう。一般に、これには、層が処理するよう設計されているいずれかの情報、すなわち、パケットから追加され、パースされ、あるいはまた引き出されるいずれかの情報が含まれる。
【０１５９】
パケットおよびそれに対応するコンテキストが各層において受信されると、その層は、層パラメータを識別して４１４で表す分類要求を送ることにより、要求層として機能する。分類要求４１４は、層パラメータ４１６、前の層から受け取ったパケットコンテキスト４１８、およびフルパケット４２０を含む。この分類要求を発行するために使用される典型的な方法が、層ＡＰＩ２８０（図６）を参照しながら説明したＣｌａｓｓｉｆｙメソッド３５０である。
【０１６０】
各分類要求に応答して、カーネルモードファイアウォールエンジン２５６は、層パラメータ４１６およびパケットコンテキスト４１８を、要求層に割り当てられたフィルタのフィルタ条件３１８（図４）と比較する。カーネルファイアウォールエンジン２５６は、最も重み３１４が大きい、マッチするフィルタ３１０からのアクション４２４と共に、４２２で表す応答を要求層に送る。カーネルファイアウォールエンジン２５６はまた、ポリシーコンテキスト４２６を返す。カーネルファイアウォールエンジン２５６は、マッチするフィルタを何も識別しなかった場合には、マッチするフィルタが存在しないことを要求層に通知する。カーネルファイアウォールエンジン２５６は、マッチするフィルタが終了アクション、すなわち許可またはブロックを指定するまで、または要求層に割り当てられたすべてのフィルタがチェックされるまでのどちらか短い間、マッチするフィルタを識別し続ける。あるいは、カーネルファイアウォールエンジン２５６は、すべてのマッチを識別し、アクションを単一の応答で要求層に返す。
【０１６１】
全般的に示すように、層パラメータの識別は、ネットワークスタック２５４の層によって実行される通常の層の処理の一環として行われる。さらなるパケットのパースは必要とされず、それによって、システム性能への影響が最小限に抑えられる。さらに、層がパケットコンテキストの維持において協働するため、カーネルファイアウォールエンジン２５６は、フィルタ条件とパケットパラメータの比較を、通常はこれらのパケットパラメータにアクセスできない層において行うことができる。例えば、ネットワーク層２７２は、発信元および宛先ＭＡＣアドレスを含むリンク層２７４から、インバウンドパケットのコンテキストを受け取る。ネットワーク層２７２は、ネットワーク層パラメータ、例えば発信元および宛先ＩＰアドレスを備えた分類要求およびパケットコンテキストを発行するので、カーネルファイアウォールエンジン２５６は、ＭＡＣアドレスが通常は利用可能ではなくても、ネットワーク層２７２においてＩＰアドレスとＭＡＣアドレスとの両方にフィルタをかけることができる。
【０１６２】
次に、図９を参照しながら、本発明のファイアウォールアーキテクチャを使って含められた例示的な１組のコールアウト（コールアウトモジュール）２５８を説明する。コールアウトモジュール２５８は、ＨＴＴＰコンテキストコールアウト４３０、侵入検出コールアウト４３６、ＩＰＳｅｃコールアウト４３８、およびロギングコールアウト４４０を含む。
【０１６３】
ＨＴＴＰコンテキストコールアウト４３０は、受付可能な、あるいは受付不可能なＵＲＬアドレスのキャッシュ４３２を維持する。ＨＴＴＰコンテキストコールアウト４３０は、ＵＲＬアドレスを維持して、それらを受付可能または受付不可能に分類する、公衆ネットワークにインターフェースされたサーバ４３４に、周期的にアクセスする。カーネルファイアウォールエンジン２５６がＨＴＴＰコンテキストのコールアウトを実行すると、コールアウトはパケットを調べ、必要であればＵＲＬアドレスを復号し、キャッシュ４３２中の情報に基づいて、それが受付可能であるかどうかを判断する。次いで、ＨＴＴＰコールアウトは、そのＵＲＬアドレスが受付可能であれば、アクション３１６として許可を、また受付不可能であればブロックを、カーネルモードファイアウォールエンジン２５６に返す。カーネルファイアウォールエンジン２５６は、そのアクション３１６を層ＡＰＩ２８０を介して要求層に返す。ＨＴＴＰコンテキストコールアウトは、保護者制御機能を実装する際に役立つ。
【０１６４】
侵入検出コールアウト４３６は、利用可能なアルゴリズムおよび技術を使ってパケットを調べ、ウィルスの徴候または疑わしいパケットを識別する。疑わしいパケットが検出されると、ブロックのアクション３１６が返される。疑わしいパケットの例としては、ＩＰおよびＴＣＰヘッダ中のすべてのフラグが１という値に設定されているパケットが挙げられる。このようなパケットは有効であるはずがなく、攻撃を表している可能性があるため、疑わしいと言える。あるいは、侵入検出コールアウト４３６は、パケットコンテキストを修正して、そのパケットの疑わしい性質を表すフラグを立て、それによって、ネットワークスタック中のその後の層にパケットが進むのをブロックするかどうかについての決定を先延ばしにする。
【０１６５】
ＩＰＳｅｃコールアウト４３８は、パケットに正しいセキュリティプロトコルが適用されたかどうかを判断するように設計されている。ＩＰＳｅｃコールアウト４３８は、ＩＰＳｅｃプロセスと通信し、ＩＰＳｅｃポリシーに基づいて、パケットがＩＰＳｅｃ処理を受けるよう意図されていたかどうかを判断する。そうである場合には、ＩＰＳｅｃコールアウト４３８は、パケットコンテキストに基づいて、パケットが実際にＩＰＳｅｃ処理を受けたかどうかを判断する。パケットがＩＰｓｅｃに従って処理されるよう意図されていたにもかかわらず処理されていなかった場合、例えば、パケットが平文であった場合には、ブロックのアクションが返される。パケットがＩＰＳｅｃ処理を受けている場合、ＩＰＳｅｃコールアウトは、正しいＳＡが適用されていると確認する。
【０１６６】
ロギングコールアウト４４０を使って、フルパケットなどのパケットに関する情報を、後で使用するために保存しておく。その後に使用する例としては、例えば、ブロックされたために、またはシステムに対する悪意ある攻撃を追跡するために、突然、ネットワークをトラバースできなくなっている特定のネットワークトラフィックに対する診断が挙げられる。
【０１６７】
図１０は、本発明のファイアウォール機能全体を実装するために使用されるプロセス４５０を示す。ステップ４５２で、要求層は、要求中のパケットパラメータを識別するパケットに対する分類要求を発行する。ステップ４５４で、分類要求中のパケットパラメータにマッチするフィルタが識別される。次いで、ステップ４５６に示すように、マッチするフィルタに基づいて、そのパケットを落とすべきかどうかの決定がなされる。パケットを落とす決定がなされた場合、パケットが落とされて、プロセスは、さらなるパケット処理を行うことなく終了する。パケットを落とさない決定がなされた場合は、ステップ４５８に示すように、要求層は、要求層で実装されているプロトコルに従ってパケットを処理し、パケットコンテキストのデータ構造は修正される。さらなる層がない場合、プロセスは同じく終了する。さらなる層がある場合は、ステップ４６２に示すように、処理されたパケットおよびパケットコンテキストが次の層に送られる。このプロセスは、パケットが落とされるまで、あるいはパケットがすべての層をトラバースするまで続く。
【０１６８】
図１１は、要求層がパケットを処理し、分類要求を発行し、パケットコンテキストを維持するために使用する、５００で表す方法を示す。本明細書に記載の方法は、様々なネットワーク層のシムモジュール４００、４０２、４０４、４０６によって実行される。あるいは、方法５００は、別個のシムを必要とすることなく、ネットワークスタックの層のうちから一体化されたプロセスによって実行される。方法５００を、１つまたは複数のユーザモード層によって実装することもできる。
【０１６９】
ステップ５０２で、要求層は、前の層からフルパケット４０８および対応するパケットコンテキスト４１２を受け取る。アウトバウンドパケットの場合、前の層は、ネットワークスタックにおける位置が要求層よりも高い。インバウンドパケットの場合、前の層は、ネットワークスタックにおける位置が要求層よりも低い。
【０１７０】
ステップ５０４で、要求層は、層パラメータを識別する。層パラメータは、要求層が、インバウンドパケットからパラメータをパースすることによって、またはアウトバウンドパケットにそれらのパラメータを追加することによって処理したパラメータである。層パラメータは、ローカルアドレス型など、パケットから引き出すことができるその他の情報を含む場合がある。デフォルトの層パラメータを上記表２に記載してあり、また、それらは層ＡＰＩ２８０中のＣｌａｓｓｉｆｙメソッド３５０のｐＩｎＦｉｘｅｄＶａｌｕｅｓ中に含まれている。
【０１７１】
ステップ５０６で、要求層は、分類要求をカーネルファイアウォールエンジン２５６に発行する。分類要求を発行する例示的な方法を、層２ＰＩ２８０中のＣｌａｓｓｉｆｙメソッド３５０を参照しながら説明した。
【０１７２】
この分類要求に応答して、アクションが要求層に返される。要求層は、返されてきたアクションに基づいて、パケットを落とすかどうかを判断する（ステップ５０８）。カーネルファイアウォールエンジンがアクションとしてブロックを返してきた場合には、要求層はパケットを落とす。要求層はまた、カーネルファイアウォールエンジン２５６がマッチするフィルタが見つからないためにそのアクションを返してきた場合にも、パケットを落とす。マッチするフィルタが見つからない場合に要求層がパケットを落とすかどうかは、システム規模のベースで、または層ごとのベースで構成可能である。
【０１７３】
返されてきたアクションが許可である場合には、さらなるパケット処理が行われる。ステップ５１０で、要求層は、パケットコンテキストを、層情報、一般に分類要求中に層パラメータとして含まれていたのと同じ型の情報を含むように修正する。したがって、（上記の）表２は、層パラメータを識別するだけでなく、各層がパケットコンテキストに追加したデフォルト情報も識別する。パケットコンテキストは、例えば図５を参照しながら説明したデータ構造などのようなデータ構造中に維持される。
【０１７４】
ステップ５１２で、要求層は、その層のプロトコル実装に従ってパケットを処理する。このような処理はよく知られているため、本明細書で詳説する必要はない。例示的なプロトコル実装には、アプリケーション層の場合のＨＴＴＰ、ＦＴＰ、ＳＭＴＰ、ＲＰＣ、トランスポート層の場合のＴＣＰおよびＵＤＰ、ネットワーク層の場合のＩＰ、リンク層の場合のＮＤＩＳが含まれる。
【０１７５】
ステップ５１４で、要求層は、層プロトコルに従って処理されたパケットを、修正されたパケットコンテキストと共に次の層に渡す。パケットがインバウンドパケットの場合、次の層は、ネットワークスタック中のより高い層である。パケットがアウトバウンドパケットの場合、次の層は、ネットワークスタック中のより低い層である。プロセス５００は、ネットワークスタック中の各層によって繰り返され、パケットがネットワークスタック中のすべての層をトラバースするまで、またはパケットがネットワークスタック中の層の１つによって落とされるまで続く。
【０１７６】
次に、図１２を参照しながら、カーネルファイアウォールエンジン２５６がマッチするフィルタを識別し、要求層にアクションを返すために使用する、例示的な方法５２０について説明する。上述のように、カーネルファイアウォールエンジン２５６の機能は、ユーザファイアウォールエンジン中で実行するフィルタモジュール２９４によっても実行され得る。
【０１７７】
ステップ５２２で、カーネルファイアウォールエンジン２５６は、例えばＣｌａｓｓｆｙメソッド３５０を使って、パケット、層パラメータ、およびパケットコンテキストを、層ＡＰＩ２８０を介して要求層から受け取る。
【０１７８】
ステップ５２４で、カーネルファイアウォールエンジン２５６は、１つまたは複数のマッチするフィルタを識別する。本発明の一実施形態では、フィルタが特定の要求層に割り当てられる。カーネルファイアウォールエンジン２５６は、フィルタが要求層に割り当てられ、パケットパラメータがすべてのフィルタ条件３１８（図５）にマッチする場合に、フィルタをマッチするものとして識別しようとするにすぎない。上述のように、パケットパラメータは、要求層からの層パラメータおよびパケットコンテキストの両方を識別することを含む。マッチするフィルタがすべて識別された後、カーネルファイアウォールエンジン２５６は、マッチするフィルタそれぞれの重み３１４に基づいて、それらのフィルタを順序付ける。
【０１７９】
ステップ５２６で、カーネルファイアウォールエンジン２５６は、まだ適用されていないフィルタのうち最も大きい重み３１４を有するフィルタを適用する。具体的には、カーネルファイアウォールエンジン２５６は、フィルタ中に指定されているアクション３１６を識別する（ステップ５２８）。アクション３１６がコールアウトモジュール２５８のうち１つを指定している場合、カーネルファイアウォールエンジン２５６は、ステップ５３２に示すように、コールアウトＡＰＩ２８４を介してコールアウトを実行する。コールアウトを実行するために使用される例示的な方法を、コールアウトＡＰＩ中のＣｌａｓｓｉｆｙメソッド３５６（図６）を参照しながら説明した。コールアウトは、カーネルファイアウォールエンジン２５６にアクションを返すことができる。
【０１８０】
アクションがコールアウトではない場合、またはコールアウトが実行された後、カーネルファイアウォールエンジン２５６は、ステップ５３６に示すように、マッチするフィルタからの関連アクション、またはコールアウトによって識別された関連アクションを要求層に返す。あるいは、カーネルファイアウォールエンジン２５６は、マッチするフィルタがすべて適用されるまで、アクションを返すのを待つ。
【０１８１】
ステップ５３４で、カーネルファイアウォールエンジン２５６は、マッチするフィルタがさらに存在するかどうかを判断する。存在しない場合、プロセスは終了する。マッチするフィルタがさらに存在する場合、プロセスはステップ５２６に戻り、そこで次に優先順位が高いフィルタが適用される。プロセスは、マッチするフィルタがすべて適用されるまで続く。あるいは、プロセスは、パケットに対する終了アクションが識別されると終了する。パケットについてマッチするフィルタが識別されない場合、カーネルファイアウォールエンジン２５６は、マッチするフィルタが見つからなかったことを要求層に通知する。次いで、要求層は、そのパケットをどのように扱うか、すなわちパケットを許可するかブロックするかを判断する。
【０１８２】
図１３は、非送信請求インバウンドパケットからの悪意ある攻撃を防ぐ一方、未知のネットワークアドレスから通信を開始した信頼できるユーザとの通信を許可するために、本発明に従って使用される方法（プロセス）５６０を示す。
【０１８３】
ステップ５６２で、本発明のファイアウォールを実装している応答コンピュータは、非送信請求インバウンドパケットを受け取る。プロセス５６０は、ステップ５６４で、そのインバウンドパケットが認証要求であるかどうかを判断する。認証要求は、例えば、ＩＫＥプロトコルに準拠している。インバウンドパケットが認証要求である場合、ステップ５６６に示すように、応答コンピュータは、開始コンピュータの認証を試みる。開始コンピュータを認証するために使用される１つの方法として、デジタル証明書による方法が挙げられる。デジタル証明書は認証局（ＣＡ）によって発行され、その証明書が本物であることを受信者が確認できるように、ユーザ名、シリアル番号、満了期限、公開鍵のコピー（メッセージおよびデジタル署名を暗号化するために使用される）、ＣＡのデジタル署名などの情報を含んでいる。
【０１８４】
次いで、プロセスは、ステップ５６８で、認証プロセスが成功したかどうかを判断する。認証が不成功だった場合、すなわち、応答コンピュータが開始コンピュータを認証することができなかった場合、プロセスは終了する。
【０１８５】
認証プロセスが成功した場合、ステップ５７０に示すように、新しいフィルタが作成される。この新しいフィルタは、ＩＰアドレス、ポート番号、プロトコル型などの応答コンピュータのアドレス情報にマッチするフィルタ条件を含んでおり、関連アクションとして許可を含んでいる。あるいは、この新しいフィルタは、開始コンピュータと応答コンピュータとの間で同意されているセキュリティ設定にマッチするフィルタ条件を備えている。ステップ５７２に示すように、認証要求ではないインバウンドパケットが受信されると、プロセスは、開始コンピュータが認証されているかどうか、すなわち、許可のアクションを備えた、マッチするフィルタが存在するかどうかを判断する。マッチするフィルタがアクションとして許可を備えている場合、ステップ５７４に示すように、パケットはネットワークをトラバースすることを許可される。そうでない場合、ステップ５７６に示すように、パケットの更なるネットワークのトラバースはブロックされる。
【０１８６】
非送信請求ユーザからの安全な通信を提供するための方法５６０に代わる方法として、すべてのインバウンドパケットが、ＩＰＳｅｃによって提供されるようなセキュリティプロトコルに準拠することを要求するフィルタを作成する。したがって、パケットは、ブロックされることなくフィルタを通過できるようになる前に、まず、ステップ５６６に記載されるように認証されたＳＡを確立しなければならない。
【０１８７】
本明細書に記載されている参照はすべて、参照によりそのすべてが本明細書に組み込まれている。
【０１８８】
本発明の原理を適用できる多くの可能な実施形態を考えて、図面に関連して本明細書に記載してある実施形態は例示にすぎず、発明の範囲を限定するものとして解釈してはならないことを理解されたい。例えば、当業者は、ソフトウェア中に示されている、例示の実施形態の構成要素をハードウェアに実装することができ、またその反対も可能であること、あるいは、例示の実施形態を、本発明の趣旨から逸脱することなく、その配置および詳細について修正可能であることを認識されるであろう。さらに、当業者は、その他のプロセスがＱＯＳやＩＰＳｅｃなどのフィルタを使用することを認識されよう。本発明を使って、これらのプロセスおよび追加プロセスのフィルタおよびフィルタベースのポリシーを管理および実行することができる。したがって、本明細書に記載の発明は、添付の特許請求の範囲およびその均等物の範囲内に含まれる、すべてのこのような実施形態を考慮したものである。
【図面の簡単な説明】
【０１８９】
【図１】本発明が常駐する、例示的なコンピュータシステムの全体を示す構成図である。
【図２】本発明が利用される、例示的なネットワーク環境の全体を示す構成図である。
【図３】本発明の方法を使用できる、ファイアウォールアーキテクチャの全体を示す構成図である。
【図４】本発明で使用される、例示的なフィルタを示す構成図である。
【図５】本発明で使用される、例示的なパケットコンテキストのデータ構造を示す構成図である。
【図６】本発明で使用される、例示的な１組のアプリケーションプログラミングインターフェースを示す構成図である。
【図７】本発明で使用される、例示的なアプリケーションプログラミングインターフェースを示す構成図である。
【図８】本発明に従ってネットワーク層が実行する機能を示す構成図である。
【図９】本発明で使用される、例示的な１組のコールアウトを示す構成図である。
【図１０】本発明に従ってファイアウォールを実装するために使用される、例示的な方法を示す流れ図である。
【図１１】ネットワーク層がファイアウォールを実装するために使用する、例示的な方法を示す流れ図である。
【図１２】ファイアウォールエンジンがファイアウォールを実装するために使用する、例示的な方法を示す流れ図である。
【図１３】信頼できるネットワークデバイスによって始動されたファイアウォールを介して非送信請求通信を許可するために使用される方法を示す流れ図である。
【符号の説明】
【０１９０】
１００  コンピューティングシステム環境
１１０  コンピュータ
１２０  処理装置
１２１  システムバス
１３０  システムメモリ
１３１  読取り専用メモリ（ＲＯＭ）
１３２  ランダムアクセスメモリ（ＲＡＭ）
１３３  基本入出力システム（ＢＩＯＳ）
１３４、１４４  オペレーティングシステム
１３５、１４５  アプリケーションプログラム
１３６、１４６  その他のプログラムモジュール
１３７、１４７  プログラムデータ
１４０  インターフェース
１４１  ハードディスクドライブ
１５０  インターフェース
１５１  磁気ディスクドライブ
１５２  不揮発性磁気ディスク
１５５  光ディスクドライブ
１５６  不揮発性光ディスク
１６０  ユーザ入力インターフェース
１６１  ポインティングデバイス
１６２  キーボード
１７０  ネットワークインターフェース、アダプタ
１７１  ローカルエリアネットワーク（ＬＡＮ）
１７２  モデム
１７３  広域ネットワーク（ＷＡＮ）
１８０  リモートコンピュータ
１８１  メモリ記憶装置
１８５  リモートアプリケーションプログラム
１９０  ビデオインターフェース
１９１  モニタ
１９５  出力周辺インターフェース
１９６  プリンタ
１９７  スピーカ
２００  専用ネットワーク
２０２  公衆ネットワーク
２０４、２０６、２０８、２１０、２１２  ネットワークデバイス
２１４  ファイアウォール
２１６  フィルタ
２５０  ユーザモードプロセス
２５２  カーネルモードプロセス
２５４  ネットワークスタック
２５６  カーネルファイアウォールエンジン
２５８  オプションのコールアウト
２６０  ユーザファイアウォールエンジン
２６２  ポリシープロバイダ
２６６  フィルタエンジンＡＰＩ
２６８  データストリーム層
２７０  トランスポート層
２７２  ネットワーク層
２７４  リンク層
２７６  ＳＭＢ層
２７８  ハイパーテキスト転送プロトコル（ＨＴＴＰ）パーサモジュール
２８０  層ＡＰＩ
２８２  １組のインストールされているフィルタ、１つまたは複数のユーザモード層
２８４  コールアウトＡＰＩ
２８８  キーイングモジュールＡＰＩ
２９０  管理ＡＰＩ
２９４  フィルタモジュール
２９６  キーイングモジュール
３１０  フィルタ
３１２  フィルタＩＤ
３１４  重み
３１６  アクション
３１７  ポリシーコンテキスト
３１８  フィルタ条件
３２０  型
３２２  データ
３２４  層ＩＤ：フィールドＩＤ
３２６  フィルタ条件
３３０  データ構造、パケットコンテキスト、コンテキストデータ構造
３３２  層ＩＤ：フィールドＩＤ
３３４、３３６、３３８、３４０  エントリ、値
３５０、３５６  Ｃｌａｓｓｉｆｙメソッド
３５２  Ａｄｄ  Ｌａｙｅｒメソッド
３５４  Ｄｅｌｅｔｅ  Ｌａｙｅｒメソッド
３５８  Ｎｏｔｉｆｙメソッド
３６０  Ｃａｌｌｏｕｔ  Ｒｅｇｉｓｔｒａｔｉｏｎメソッド
３６２  Ｃａｌｌｏｕｔ  Ｄｅｒｅｇｉｓｔｒａｔｉｏｎ
３６４  Ａｄｄ  Ｆｉｌｔｅｒメソッド
３６６  Ｄｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド
３６８  Ｌａｙｅｒメソッド
３７０  ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッド
３７２  Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッド
３７４  ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッド
３７６  Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッド
３７８  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッド
３８０  ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド
３８２  Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッド
３８４  Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡメソッド
３８６  Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッド
３８８  Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッド
４００、４０２、４０４、４０６  シム、シムモジュール
４０６  Ｄｅｌｅｔｅ  Ｌａｙｅｒメソッド
４０８  コールアウトＡＰＩ
４０８（ａ）〜（ｄ）  パケット
４１０（ａ）〜（ｃ）  パケットコンテキスト
４１２（ａ）〜（ｃ）  パケットコンテキスト
４１４  分類要求
４１６  層パラメータ
４１８  パケットコンテキスト
４２０  フルパケット
４２４  アクション
４２６  ポリシーコンテキスト
４３０  ＨＴＴＰコンテキストコールアウト
４３２  キャッシュ
４３４  サーバ
４３６  侵入検出コールアウト
４３８  ＩＰＳｅｃコールアウト
４４０  ロギングコールアウト
【図１】
2004362590.tif 000022
【図２】
2004362590.tif 000023
【図３】
2004362590.tif 000024
【図４】
2004362590.tif 000025
【図５】
2004362590.tif 000026
【図６】
2004362590.tif 000027
【図７】
2004362590.tif 000028
【図８】
2004362590.tif 000029
【図９】
2004362590.tif 000030
【図１０】
2004362590.tif 000031
【図１１】
2004362590.tif 000032
【図１２】
2004362590.tif 000033
【図１３】
2004362590.tif 000034