(57)【要約】【課題】  ネットワーク装置において複数のネットワークポリシーフィルタを追加し、削除し、管理するための方法およびシステムを提供すること。【解決手段】  フィルタは、フレームワークにインストールされ、アクティブまたは無効として指定される。各フィルタは優先度を有する。新しいフィルタをフレームワークにインストールしようとするとき、新しいフィルタがインストールされているフィルタと比較されて、競合が存在するかどうかが決定される。競合が存在しない場合、新しいフィルタは、アクティブフィルタとして追加される。競合が存在する場合、優先度のより高い競合フィルタがアクティブとして追加され、優先度のより低いフィルタが非アクティブとして追加される。【選択図】  図７
2004364305.tif 000002
【特許請求の範囲】
【請求項１】
１組のアクティブフィルタおよび１組の無効フィルタを含むフレームワーク内の１組のインストール済みフィルタにネットワークポリシーの一部を定義する新しいフィルタを追加する方法であって、前記新しいフィルタおよび１組のインストール済みフィルタの中の各フィルタは１組のフィルタ条件および優先度クラスを有し、
前記１組のインストール済みフィルタの中の少なくとも１つのインストール済みフィルタが前記新しいフィルタと競合するかどうかを判断するステップと、
前記新しいフィルタの前記優先度クラスが前記少なくとも１つのインストール済みフィルタの前記優先度クラスより低いかどうかを識別するステップと、
前記新しいフィルタを前記１組のインストール済みフィルタに追加するステップと
を含むことを特徴とする方法。
【請求項２】
前記１組のアクティブフィルタは、アクティブフィルタリスト内で識別され、前記１組の無効フィルタは、無効フィルタリスト内で識別されることを特徴とする請求項１に記載の方法。
【請求項３】
前記新しいフィルタの前記優先度クラスは、前記少なくとも１つのインストール済みフィルタの前記優先度クラスより低く、
前記新しいフィルタを前記１組の無効フィルタの中の１つとして識別するステップ
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記新しいフィルタの前記優先度クラスは、前記少なくとも１つのインストール済みフィルタの前記優先度クラスより高く、
前記新しいフィルタを前記１組のアクティブフィルタの中の１つとして識別するステップ
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記少なくとも１つのインストール済みフィルタを前記１組の無効フィルタリストの１つとして識別するステップ
をさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記新しいフィルタおよび前記１組のインストール済みフィルタの中の各フィルタは重み値を含み、
スケールファクタを前記フィルタ条件のそれぞれに適用し、その結果１組のスケール変更されたフィルタ条件が得られ、前記スケール変更されたフィルタ条件を前記重み値に含めることによって前記新しいフィルタの前記重み値を算出するステップ
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記１組のインストール済みフィルタの中の前記少なくとも１つのインストール済みフィルタが前記新しいフィルタと競合することを判断するステップは、
一致する１組のフィルタ条件および１組の矛盾するアクションを備える前記１組のインストール済みフィルタから１組の競合の可能性のあるフィルタを取得するステップと、
前記競合の可能性のあるフィルタの前記優先度クラスおよび前記重み値と、前記新しいフィルタの前記優先度クラスおよび前記重み値との比較に基づいて実際に競合する１組のフィルタを識別するステップと
を含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記新しいフィルタの前記優先度クラスは、前記実際に競合する１組のフィルタの中の少なくとも１つの前記優先度クラスより高く、前記新しいフィルタの前記重みは、前記実際に競合する１組のフィルタの中の前記少なくとも１つの前記重みより低いことを特徴とする請求項７に記載の方法。
【請求項９】
前記新しいフィルタの前記優先度クラスは、前記実際に競合する１組のフィルタの中の少なくとも１つの前記優先度クラスより低く、前記新しいフィルタの前記重みは、前記実際に競合する１組のフィルタの中の前記少なくとも１つの前記重みより高いことを特徴とする請求項７に記載の方法。
【請求項１０】
アクティブフィルタおよび無効フィルタリストを有するフレームワーク内の１組のインストール済みフィルタから第１のフィルタを削除する方法であって、
前記第１のフィルタを前記１組のインストール済みフィルタから削除するステップと、
前記第１のフィルタは、前記無効フィルタリスト内で識別されたかどうかを判断するステップと、
前記１組のインストール済みフィルタから少なくとも第２のフィルタを識別するステップと、
前記無効フィルタリストから前記第２のフィルタを削除するステップと、
前記第２のフィルタを前記アクティブフィルタリストに追加するステップと
を含むことを特徴とする方法。
【請求項１１】
前記第２のフィルタは、前記第１のフィルタと競合することを特徴とする請求項１０に記載の方法。
【請求項１２】
前記第２のフィルタは、前記第１のフィルタと共通の１組のフィルタ条件を有し、前記第１のフィルタおよび第２のフィルタは異なるフィルタアクションを有することを特徴とする請求項１１に記載の方法。
【請求項１３】
前記第２のフィルタの優先度クラスは、前記第１のフィルタより高く、重み値は、前記第１フィルタより低いことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記第２のフィルタの優先度クラスは、前記第１のフィルタより低く、重み値は、前記第１フィルタより高いことを特徴とする請求項１２に記載の方法。
【請求項１５】
第１のフィルタが第２のフィルタと競合することを識別する方法であって、前記第１および前記第２のフィルタのそれぞれは１組のパラメータ、アクション、重み値、および優先度クラス値を含むフィルタ条件を有し、
前記第１のフィルタおよび前記第２のフィルタは共通の１組のパラメータおよび異なるアクションを有することを決定するステップと、
前記第１のフィルタの優先度クラス値は前記第２のフィルタのものより高く、重み値は前記第２のフィルタのものより低いことを決定するステップと
を含むことを特徴とする方法。
【請求項１６】
前記第１のフィルタは、１組のインストール済みフィルタにインストールされる新しいフィルタであり、前記第２のフィルタは、前記１組のインストール済みフィルタに格納されていることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記第２のフィルタは、アクティブフィルタリスト内で識別されることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記第１および前記第２のフィルタは、同じレイヤープロセスに割り当てられることを特徴とする請求項１６に記載の方法。
【請求項１９】
ネットワークポリシーを定義する１組のインストール済みフィルタにインストールされるフィルタの優先度を自動的に算出する方法であって、
ビット割り当ておよび対応するフィルタ条件をそれぞれ含む１組のレイヤーごとの重み定義を識別するステップと、
スケールファクタを決定するステップと、
レイヤーごとの重み定義ごとに、前記フィルタ条件をスケール変更して前記対応するビット割り当てに収まるようにするステップと、
各フィルタ条件を前記対応するビット割り当てに収めることによって前記優先値を得るステップと、
を含むことを特徴とする方法。
【請求項２０】
前記レイヤーごとの重み定義は、オペレーティングシステムのレイヤープロセスに関連付けられることを特徴とする請求項１９に記載の方法。
【請求項２１】
前記フィルタ条件は、ｍビットを含み、前記ビット割り当ては、ｎビットを含み、ｍ＞ｎであることを特徴とする請求項１９に記載の方法。
【請求項２２】
前記スケールファクタは指数スケールファクタであることを特徴とする請求項１９に記載の方法。
【請求項２３】
アクティブフィルタリストおよび無効フィルタリストを含むフレームワーク内の１組のインストール済みフィルタにネットワークポリシーの一部を定義する新しいフィルタを追加するコンピュータ可読命令を実行するコンピュータ可読媒体であって、前記新しいフィルタおよび前記１組のインストール済みフィルタの中の各フィルタは、１組のフィルタ条件および優先度クラスを含み、
前記１組のインストール済みフィルタの中の少なくとも１つのインストール済みフィルタが前記新しいフィルタと競合するかどうかを判断するステップと、
前記新しいフィルタの前記優先度クラスが前記少なくとも１つのインストール済みフィルタの前記優先度クラスより低いかどうかを識別するステップと、
前記新しいフィルタを前記１組のインストール済みフィルタに追加するステップと
を含むことを特徴とするコンピュータ可読媒体。
【請求項２４】
前記新しいフィルタの前記優先度クラスが前記少なくとも１つのインストール済みフィルタの前記優先度クラスより低く、
前記新しいフィルタを前記無効フィルタリスト内で識別するステップ
をさらに含むことを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記新しいフィルタの前記優先度クラスが前記少なくとも１つのインストール済みフィルタの前記優先度クラスより高く、
前記新しいフィルタを前記アクティブフィルタリスト内で識別するステップ
をさらに含むことを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２６】
前記少なくとも１つのインストール済みフィルタを前記無効フィルタリストに追加するステップ
をさらに含むことを特徴とする請求項２４に記載のコンピュータ可読媒体。
【請求項２７】
前記新しいフィルタおよび前記１組のインストール済みフィルタの中の各フィルタは重み値を含み、
スケールファクタを前記フィルタ条件のそれぞれに適用し、その結果１組のスケール変更されたフィルタ条件が得られ、前記スケール変更されたフィルタ条件を前記重み値に含めることによって前記重み値を算出するステップ
をさらに含むことを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２８】
前記１組のインストール済みフィルタの中の前記少なくとも１つのインストール済みフィルタが前記新しいフィルタと競合することを決定するステップは、
一致する１組のフィルタ条件および１組の矛盾するアクションを備える前記１組のインストール済みフィルタから１組の競合の可能性のあるフィルタを取得するステップと、
前記競合の可能性のあるフィルタの前記優先度クラスおよび前記重み値と、前記新しいフィルタの前記優先度クラスおよび前記重み値との比較に基づいて実際に競合する１組のフィルタを識別するステップと
を含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項２９】
アクティブリストおよび無効リストフィルタリストを有するフレームワーク内の１組のインストール済みフィルタから第１のフィルタを削除するコンピュータ可読命令を実行するコンピュータ可読媒体であって、
前記第１のフィルタを前記１組のインストール済みフィルタから削除するステップと、
前記第１のフィルタは前記無効フィルタリスト内で識別されたかどうかを判断するステップと、
前記１組のインストール済みフィルタから少なくとも第２のフィルタを識別するステップと、
前記無効フィルタリストから前記第２のフィルタを削除するステップと、
前記第２のフィルタを前記アクティブフィルタリストに追加するステップと
を含むことを特徴とするコンピュータ可読媒体。
【請求項３０】
前記第２のフィルタは、前記第１のフィルタと競合することを特徴とする請求項２９に記載のコンピュータ可読媒体。
【請求項３１】
前記第２のフィルタは前記第１のフィルタと共通の１組のフィルタ条件を有し、前記第１のフィルタおよび前記第２のフィルタは矛盾するアクションを有することを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３２】
第１のフィルタが第２のフィルタと競合することを識別するコンピュータ可読命令を実行するコンピュータ可読媒体であって、前記第１および前記第２のフィルタのそれぞれは１組のパラメータ、アクション、重み値、および優先度クラス値を含むフィルタ条件を有し、
前記第１のフィルタおよび前記第２のフィルタは、共有の１組のパラメータおよび異なるアクションを有することを決定するステップと、
前記第１のフィルタの優先度クラス値は前記第２のフィルタのものより高く、重み値は前記第２のフィルタのものより低いことを決定するステップと
を含むことを特徴とするコンピュータ可読媒体。
【請求項３３】
前記第１のフィルタは、１組のインストール済みフィルタにインストールされる新しいフィルタであり、前記第２のフィルタは、前記１組のインストール済みフィルタに格納されることを特徴とする請求項３２に記載のコンピュータ可読媒体。
【請求項３４】
前記第２のフィルタは、アクティブフィルタリスト内で識別されることを特徴とする請求項３２に記載のコンピュータ可読媒体。
【請求項３５】
ネットワークポリシーを定義する１組のインストール済みフィルタにインストールされるフィルタの優先値を自動的に算出するコンピュータ実行可能命令を実行するコンピュータ可読媒体であって、
ビット割り当ておよび対応するフィルタ条件をそれぞれ含む１組のレイヤーごとの重み定義を識別するステップと、
スケールファクタを決定するステップと、
レイヤーごとの重み定義ごとに、前記フィルタ条件をスケール変更して前記対応するビット割り当てに収まるようにするステップと、
各フィルタ条件を前記対応するビット割り当てに収めることによって前記優先値を得るステップと、
を含むことを特徴とするコンピュータ可読媒体。
【請求項３６】
前記フィルタ条件は、ｍビットを含み、前記ビット割り当ては、ｎビットを含み、ｍ＞ｎであることを特徴とする請求項３５に記載のコンピュータ可読媒体。
【請求項３７】
前記スケールファクタは、指数スケールファクタであることを特徴とする請求項３５に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にコンピュータシステムおよびコンピュータネットワークに関する。より詳細には、本発明はネットワークフィルタベースのポリシーの管理に関する。
【背景技術】
【０００２】
コンピュータは、様々なネットワークポリシーを実装することにより、ネットワークトラフィックを制御し、データの盗用、サービス拒否（ＤＯＳ）攻撃など他のネットワーク装置から行われる悪意のある攻撃からコンピュータまたは他のネットワーク装置を保護する。
【０００３】
ネットワーク装置の保護に使用する一種のポリシーは、ファイアウォールとして知られるツールによって実装される。ファイアウォールは、データの交換を制御する能力を追加すると同時に、一般に悪意のある攻撃から個々のユーザ、ネットワーク装置、およびネットワークを保護する。ファイアウォールは、ネットワークパケットを検査し、その検査に基づいて、パケットを許可すべきか、逆にパケットがネットワークをさらに横断することを阻止すべきかを決定することによってポリシーを実装する。ファイアウォールは、パケットに関連する情報をロギングするなど、将来の検査のために他の機能を実行する。
【０００４】
ファイアウォールは、フィルタを使用して、ポリシーを実装する。各フィルタは、フィルタパラメータおよびアクションを含む。フィルタパラメータは、ポリシーの対象となるネットワークパケットを識別し、メディアアクセス制御（ＭＡＣ）アドレスなどのハードウェアアドレス、インターネットプロトコル（ＩＰ）アドレスなどのネットワークアドレス、伝送制御プロトコル（ＴＣＰ）などのプロトコルタイプ、ポート番号などの情報を含む。アクションは、パラメータがフィルタパラメータと一致するパケットをどのように扱うべきかを定義する。具体例として、フィルタは、「http://www.foo.com」などのＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）アドレスをそのパラメータとして含む。フィルタはさらに、阻止のアクション、すなわちパケットのドロップをそのＵＲＬアドレスと関連付ける。ファイアウォールは、パケットを検査し、その検査によってＵＲＬアドレス「http://www.foo.com」をパケットに埋め込まれているものと識別したときは、必ずパケットをドロップし、それによってそのパケットがネットワークを横断するのを防ぐ。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ファイアウォールは、ポリシーを実装するためのフィルタを複数含んでおり、複数のフィルタが競合する可能性がある。複数のフィルタは、ネットワークパケットの共通の一部分に適用され、異なるアクションを指定する場合に競合する。例えば、１つのフィルタは、ネットワークパケットがネットワークを横断するのを許可すべきであると指定しているのに対して、別のフィルタは、同じネットワークパケットがネットワークを横断するのを阻止すべきであると指定している場合などである。競合するフィルタが１つのネットワーク装置内に存在している場合、システム全体がネットワークトラフィックにどのように対応するかを予測できなくなる。
【課題を解決するための手段】
【０００６】
本発明は、ネットワークポリシーの一部を定義する新しいフィルタを、フレームワーク内にインストールされている１組のフィルタに追加する方法およびシステムを対象とする。フレームワークは、アクティブフィルタおよび無効フィルタを含む。アクティブフィルタは、インストールされている１組のフィルタの中の現在のネットワークポリシーの実装に使用するフィルタを識別する。無効フィルタは、インストールされている１組のフィルタの中の現在のネットワークポリシーの実装に使用しないフィルタを識別する。
【０００７】
新しいフィルタおよびインストールされている１組のフィルタはそれぞれ１組のフィルタ条件および優先度クラス（ｐｒｉｏｒｉｔｙ  ｃｌａｓｓ）を含む。フィルタ条件は、フィルタで定義されているポリシーの対象となるネットワークパケットを識別する。優先度クラスは、フィルタで定義されているポリシーに対する責任を負うユーザまたはプロセスに従ってフィルタの優先度を識別する。
【０００８】
ファイアウォールエンジンは、新しいフィルタおよびインストールされている１組のフィルタの中の少なくとも１つが競合するかどうかを判断する。新しいフィルタが、インストールされているフィルタの中の１つと競合する場合、ファイアウォールエンジンは、新しいフィルタの優先度クラスが少なくとも１つのインストールされているフィルタの優先度クラスより低いかどうかを判断する。次いでファイアウォールエンジンは、インストールされている１組のフィルタに新しいフィルタをインストールする。
【０００９】
本発明の一実施形態では、ファイアウォールエンジンは、新しいフィルタの優先度クラスおよびインストールされているフィルタの中の少なくとも１つの優先度クラスを使用して、新しいフィルタが無効フィルタとして追加されるか、アクティブフィルタとして追加されるかを判断する。新しいフィルタの優先度クラスが少なくとも１つのインストールされているフィルタの優先度クラスより低い場合、新しいフィルタは無効として追加される。新しいフィルタの優先度クラスが、インストールされているフィルタの中の少なくとも１つのフィルタの優先度クラスより高い場合、優先度クラスのより高い競合フィルタが他には存在しないことを条件に、新しいフィルタはアクティブとして追加され、インストールされているフィルタの中の少なくとも１つが無効として追加される。
【００１０】
本発明の別の実施形態では、各フィルタは、フィルタの優先度をさらに識別し、優先度クラスとともにフィルタの競合の識別に使用する重み値を含む。重み値は、１組のフィルタ条件から自動的に算出される。各フィルタ条件は、重み値内のビット割り当てに収まるようにスケール変更される。あるいは、重み値は割り当てられた値である。
【００１１】
また、本発明は、インストールされている１組のフィルタからフィルタを削除する方法を対象とする。フィルタが削除された後、ファイアウォールエンジンは、削除されたフィルタがアクティブフィルタであったかどうかを判断する。削除されたフィルタがアクティブであったと識別されると、ファイアウォールエンジンは、削除されたフィルタと競合するので無効にされたオーバーライドされた無効フィルタを識別する。次いでオーバーライドされたフィルタは、アクティブとして追加される。これによって今度は他のフィルタが無効になることがある。
【００１２】
本発明の他の機能および利点は、添付の図面を参照して進める以下の実施形態の例の詳細な説明から明らかになる。
【００１３】
添付の特許請求の範囲には本発明の特徴を詳しく記載しているが、添付の図面と併せ読めば、本発明、およびその目的および利点を以下の詳細な説明から最もよく理解できよう。
【発明を実施するための最良の形態】
【００１４】
ネットワークフィルタベースのポリシー間の競合を管理し、解決する方法を開示する。この方法では、新しいフィルタがネットワーク装置にインストールされると、フィルタの競合を識別し、解決することができる。
【００１５】
ネットワークフィルタベースのポリシーは、ファイアウォールフレームワークにインストールされているフィルタによって定義される。フレームワークは、ファイアウォールポリシーを実装するように設計されているが、インターネットプロトコルセキュリティ（ＩＰＳｅｃ）、サービス品質（ＱＯＳ）など他のフィルタベースのポリシーを簡易化するのにも等しく適している。
【００１６】
フレームワークは、プロトコルスタックを形成する１つまたは複数のカーネルレイヤー、カーネルファイアウォールエンジン、および１つまたは複数のコールアウト（ｃａｌｌｏｕｔ）を備えるカーネルモードプロセスを含む。プロトコルスタックは、アプリケーションレイヤー、トランスポートレイヤー、ネットワークレイヤー、およびリンクレイヤーを含む。カーネルファイアウォールエンジンは、レイヤーアプリケーションプログラミングインターフェース（ＡＰＩ）、インストールされている１組のフィルタ、およびコールアウトＡＰＩを含む。
【００１７】
ユーザモードプロセスは、ユーザファイアウォールエンジン、ポリシープロバイダ、および１つまたは複数のユーザレイヤーを含む。また、ユーザファイアウォールエンジンは、フィルタモジュールと呼ばれるカーネルファイアウォールエンジンのインスタンスを含んでいる。フィルタモジュールは、ユーザモードにおいてカーネルファイアウォールエンジンのサービスを複製し、インストールされている１組のフィルタも含んでいる。
【００１８】
ユーザレイヤーおよびカーネルレイヤーはそれぞれ、分類要求をカーネルファイアウォールエンジンまたはユーザファイアウォールエンジンに送信することができる要求レイヤー（ｒｅｑｕｅｓｔｉｎｇ  ｌａｙｅｒ）を形成する。分類要求は、要求レイヤーによって受信されるパケット、パケットコンテキスト、および要求レイヤーに関連する１組のレイヤーパラメータを含む。カーネルファイアウォールエンジンまたはユーザファイアウォールエンジンは、要求を処理し、ファイアウォールまたはインストールされている１組のフィルタによって定義される他のネットワークのポリシーを戻す。
【００１９】
インストールされている１組のフィルタのそれぞれは、１組のフィルタ条件、アクション、１組のフィルタプロパティ、および場合によってネットワークポリシーを定義する他のデータを含む。フィルタ条件は、フィルタで定義されているネットワークポリシーの対象となるパケットまたは他のデータを識別する。アクションは、フィルタでポリシーを定義するのに使用し、通常フィルタに一致するパケットがネットワークを横断するのを許可すべきか、逆に阻止すべきかを識別する。フィルタプロパティは、他のフィルタに対するフィルタの相対的な優先度を識別し、優先度のより低い競合フィルタが起こす可能性のあるアクションを識別するために使用する。
【００２０】
カーネルファイアウォールエンジンは、１つまたは複数の整合フィルタを識別することによって要求レイヤーから送信された分類要求を処理する。整合フィルタは、レイヤーパラメータおよびパケットコンテキストと一致するフィルタ条件を有する。整合フィルタが識別されると、これらは、フィルタ優先度の順序で適用される。パケットに対して起こすべきアクションが要求レイヤーに戻される。
【００２１】
ポリシープロバイダは、揮発性または不揮発性メモリなど任意の適したソースからポリシーを取得する。ポリシーは、１組のフィルタ条件、関連するアクション、およびフィルタプロパティを含めて、新しいフィルタを提供するための情報のソースである。ユーザファイアウォールエンジンは、管理ＡＰＩを介してカーネルファイアウォールエンジンにインストールされている１組のフィルタに新しいフィルタを追加する。
【００２２】
ユーザファイアウォールエンジンは、インストールされているフィルタに新しいフィルタを追加し、インストールされているフィルタからフィルタを削除し、フィルタの競合を識別し解決する。フィルタの競合は、競合する２つのフィルタの中の一方のフィルタをアクティブ状態にし、競合する２つのフィルタの中の他方を無効状態にすることによって解決される。
【００２３】
図面を参照すると、図中同様の参照番号は同様の要素を指しており、本発明を、適したコンピューティング環境で実施されるものとして説明している。必須ではないが、本発明は、パーソナルコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明されるであろう。一般にプログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。また、本発明は、タスクが通信ネットワークによってリンクされているリモート処理装置によって実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールを、ローカルおよびリモートのメモリ記憶装置に置くことができる。
【００２４】
図１は、本発明を実施するのに適したコンピューティングシステム環境１００の例を示している。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲に関する限定を示唆するものではない。また、コンピューティング環境１００を、動作環境１００の例に示した構成要素のいずれか１つ、またはその組合せに関連する依存性または必要条件を有しているものと解釈すべきではない。
【００２５】
本発明は、他の多くの汎用または専用コンピューティングシステム環境または構成で動作可能である。本発明と使用するのに適した周知のコンピューティングシステム、環境、および／または構成の例には、それだけには限定されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記の任意のシステムまたは装置を含む分散コンピューティング環境などが含まれる。
【００２６】
本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明することができる。一般にプログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。また、本発明は、タスクが通信ネットワークによってリンクされているリモート処理装置によって実行される分散コンピューティング環境でも実施できる。分散コンピューティング環境では、プログラムモジュールを、メモリ記憶装置を含むローカルおよびリモートのコンピュータ記憶媒体に置くことができる。
【００２７】
図１を参照すると、本発明を実施するシステムの例は、汎用コンピューティング装置をコンピュータ１１０の形で含んでいる。コンピュータ１１０の構成要素は、それだけには限定されないが、処理ユニット１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステム構成要素を処理ユニット１２０に結合するシステムバス１２１を含み得る。システムバス１２１は、様々なバスアーキテクチャの中の任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかの種類のバス構造のうちどんな種類のものでもよい。こうしたアーキテクチャには、それだけには限定されないが一例として、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子装置規格化協会（ＶＥＳＡ）ローカルバス、およびメザニンバスとしても知られている周辺部品相互接続（ＰＣＩ）バスなどがある。
【００２８】
コンピュータ１１０は、一般に様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０からアクセスできる使用可能な任意の媒体とすることができ、揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体を含む。コンピュータ可読媒体は、それだけには限定されないが一例として、コンピュータ記憶媒体および通信媒体を含み得る。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性および不揮発性のリムーバブルおよび非リムーバブル媒体がある。コンピュータ記憶媒体には、それだけには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、または所望の情報の格納に使用でき、コンピュータ１１０からアクセスできる他の任意の媒体などがある。通信媒体は一般に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを搬送波または他の移送機構などの変調されたデータ信号に組み込む。これには任意の情報配送媒体がある。「変調されたデータ信号」という用語は、信号内の情報を符号化するように設定または変更された１つまたは複数のその特徴を有する信号を意味する。通信媒体には、それだけには限定されないが一例として、有線ネットワーク、直接配線された接続などの有線媒体、および音響、ＲＦ、赤外線、その他の無線媒体などの無線媒体がある。また、上記のどんな組合せでもコンピュータ可読媒体の範囲内に含まれるものとする。
【００２９】
システムメモリ１３０は、読取り専用メモリ（ＲＯＭ）１３１やランダムアクセスメモリ（ＲＡＭ）１３２など、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。基本入出力システム１３３（ＢＩＯＳ）は、例えば起動中など、コンピュータ１１０内の要素間での情報の転送を助ける基本ルーチンを含み、一般にＲＯＭ１３１に格納されている。ＲＡＭ１３２は一般に、処理ユニット１２０から直接アクセス可能な、かつ／または処理ユニット１２０が現在処理しているデータおよび／またはプログラムモジュールを含む。図１は、それだけには限定されないが一例として、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００３０】
コンピュータ１１０は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体を含むこともできる。一例にすぎないが、図１は、非リムーバブル不揮発性磁気媒体から読み取り、あるいはそこに書き込むハードディスクドライブ１４１、リムーバブル不揮発性磁気ディスク１５２から読み取り、あるいはそこに書き込む磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭや他の光媒体など、リムーバブル不揮発性光ディスク１５６から読み取り、あるいはそこに書き込む光ディスクドライブ１５５を示している。動作環境の例で使用できる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体には、それだけには限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどがある。ハードディスクドライブ１４１は一般に、インターフェース１４０などの非リムーバブルメモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は一般に、インターフェース１５０などのリムーバブルメモリインターフェースによってシステムバス１２１に接続される。
【００３１】
上述し、図１に示したドライブおよびその関連のコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ１１０の他のデータの記憶を提供する。図１では例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶するものとして示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであっても、異なっていてもよいことに注意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７は少なくとも異なるコピーであることを示すために、ここではそれらに異なる番号を付している。ユーザは、キーボード１６２、および一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティング装置１６１などの入力装置を介してコマンドおよび情報をコンピュータ１１０に入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどがある。これらおよび他の入力装置は、しばしばシステムバスに結合されているユーザ入力インターフェース１６０を介して処理ユニット１２０に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など他のインターフェースおよびバス構造で接続してもよい。モニタ１９１または他の種類の表示装置もまた、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータは、出力周辺インターフェース１９５などを介して接続できるスピーカー１９７、プリンタ１９６などの他の周辺出力装置を含むこともできる。
【００３２】
コンピュータ１１０は、リモートコンピュータ１８０など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で操作することができる。リモートコンピュータ１８０は、別のパーソナルコンピュータ、サーバ、ルーター、ネットワークＰＣ、ピア装置、または他の一般のネットワークノードでよく、一般にパーソナルコンピュータ１１０に関連して上述した多くまたはすべての要素を含むが、図１にはメモリ記憶装置１８１のみを示している。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１および広域エリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含んでいてもよい。こうしたネットワーキング環境は、オフィス、全社規模のコンピュータネットワーク、イントラネット、およびインターネットではごく一般的である。
【００３３】
ＬＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用する場合、コンピュータ１１０は一般に、モデム１７２、またはインターネットなどＷＡＮ１７３を介して通信を確立する他の手段を含む。モデム１７２は、内蔵のものでも外付けのものでもよく、ユーザ入力インターフェース１６０または他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク式環境では、パーソナルコンピュータ１１０に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。図１は、それだけには限定されないが一例として、リモートアプリケーションプログラム１８５をメモリ装置１８１上に存在するものとして示している。図示したネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してもよいことは理解されよう。
【００３４】
以下の説明では、特に指定のない限り、１つまたは複数のコンピュータによって実行される動作および操作の象徴を参照して本発明を説明する。したがって、コンピュータで実行されると言うこともあるこうした動作および操作は、コンピュータの処理単位による構造化された形式のデータを表す電気信号の操作を含むことは理解されよう。この操作は、データを変換し、またはコンピュータのメモリシステムのいくつかの場所にデータを維持し、これによって当分野の技術者にはよく理解されているようにコンピュータが再構成され、そうでない場合はその動作が変更される。データが維持されるデータ構造は、データの形式で定義された特定の特性を有するメモリの物理位置である。しかし、本発明を上記の文脈で説明しているが、以下に記載する様々な動作および操作をハードウェアでも実施できることを当分野の技術者であれば理解できるので、これに限定されるものではない。
【００３５】
図２は、本発明の方法およびシステムの実施に使用するフレームワークの一実施形態を示す。このフレームワークは代表的なものであり、限定的なものではなく例として使用しているにすぎないことを理解されたい。フレームワークによって、本発明の方法およびシステムは、フィルタを追加し、削除し、フィルタの競合を識別し、解決できるようにすることによってネットワークポリシーを中央管理することができる。本発明は、ファイアウォールおよびファイアウォールフィルタとの特定の関連で説明するが、サービス品質（ＱＯＳ）、インターネットプロトコルセキュリティ（ＩＰＳｅｃ）スイートなど他のフィルタベースのネットワークポリシー、他の暗号化プロトコル、認証プロトコル、鍵管理セキュリティプロトコルを簡易化し、管理するためにも使用される。
【００３６】
ファイアウォールアーキテクチャは、ユーザモードプロセス２５０およびカーネルモードプロセス２５２を含む。ユーザモードプロセス２５０およびカーネルモードプロセス２５２は、ネットワーク装置においてオペレーティングシステムの一部として実行される。当業者であれば、オペレーティングシステムのユーザモードプロセス２５０およびカーネルモードプロセス２５２が、簡単化のために図示はされていないが、追加の構成要素を含んでいることを理解できるであろう。あるいは、ファイアウォールアーキテクチャの全部または一部は、単一のオペレーティングシステムプロセス内で、またはオペレーティングシステムの外部で、１つまたは複数のプログラムモジュールまたはアプリケーションプログラムとして実行される。
【００３７】
カーネルモードプロセス２５２は、ネットワークスタック２５４を形成するカーネルレイヤー、カーネルファイアウォールエンジン２５６、および任意選択のコールアウト２５８を含む。ネットワークスタック２５４は、データストリームレイヤー２６８、トランスポートレイヤー２７０、ネットワークレイヤー２７２、およびリンクレイヤー２７４を含む複数のレイヤーを備えている。ネットワークスタック２５４内のレイヤーは、インバウンドおよびアウトバウンドのネットワークパケットを処理する。アウトバウンドネットワークパケットは、ファイアウォールアーキテクチャをネットワーク上に実装しているネットワーク装置から送信されるパケットである。インバウンドパケットは、ファイアウォールアーキテクチャを実装しているネットワーク装置で受信されたパケットである。図２に示したそれぞれの矢印で示すように、インバウンドパケットは、ネットワークスタック２５４を下から上に横断し、アウトバウンドパケットは、ネットワークスタック２５４を上から下に横断する。
【００３８】
ネットワークパケットは、ネットワークレイヤーを連続的に横断し、ネットワークレイヤーによって連続的に処理される。既知の技術によれば、ネットワークスタック２５４の各レイヤーは、前のレイヤーまたはモジュールからパケットを受信し、仕様またはプロトコルに従ってパケットを処理し、処理されたパケットを次のレイヤーまたはモジュールに送信することができる。本発明に従って実装されるフレームワークによって、さらに、ネットワークスタック２５４の各レイヤーは、パケットコンテキストを維持し、パケットコンテキストを次のレイヤーに渡し、分類要求をカーネルファイアウォールエンジン２５６に発行し、ファイアウォールまたは他のネットワークポリシーに従ってパケットに対するアクションを起こすことができる。
【００３９】
パケットコンテキストは、パケットに付随してレイヤーからレイヤーに進むデータ構造である。各レイヤーは、例えばレイヤーがインバウンドパケットから解析する、アウトバウンドパケットに追加する、そうでない場合はインバウンドパケットまたはアウトバウンドパケットから導出するように設計されている情報など、レイヤーが処理するように設計されている１組のパラメータをコンテキストデータ構造に追加することによってコンテキストを維持する。パケットコンテキストに使用するデータ構造の例は、図４を参照して説明する。
【００４０】
ネットワークスタック２５４のレイヤーによって実行される操作の１つは、分類要求を発行することによってカーネルファイアウォールエンジンを呼び出すことである。分類要求とは、ネットワークスタック２５４の１つのレイヤーによる呼出であり、パケットに一致する任意のフィルタを識別し、関連する任意のアクション、例えば許可や阻止などをレイヤーに戻すことを要求するものである。分類要求を発行するレイヤーを、本明細書では要求レイヤーと呼ぶ。また、各レイヤーは、カーネルファイアウォールエンジン２５６によって戻されるパケットに対するアクションを起こす。
【００４１】
カーネルファイアウォールエンジン２５６は、レイヤーＡＰＩ２８０、インストールされている１組のフィルタ２８２、およびコールアウトＡＰＩ２８４を含む。カーネルファイアウォールエンジン２５６は、（１）インストールされている１組のフィルタ２８２を格納すること、（２）ネットワークスタック２５４内のレイヤーから分類要求を受信すること、（３）分類要求に基づいてインストールされている１組のフィルタ２８２から１つまたは複数の整合フィルタを識別すること、（４）整合フィルタに基づいてパケットに対して起こすべき任意のアクションを要求レイヤーに伝えることを含む様々な機能を実行する。
【００４２】
インストールされている１組のフィルタ２８２の各フィルタは、１組のフィルタ条件、アクション、フィルタプロパティ、およびフィルタＩＤを含む。フィルタ条件は、フィルタで識別されたアクション、および場合によっては他のネットワークポリシーの対象となるネットワークパケットを識別する。アクションは、許可や阻止など、適用可能なネットワークポリシーを識別する。フィルタプロパティは、優先度クラス、オーバーライド許可（ｏｖｅｒｒｉｄｅ  ａｌｌｏｗａｎｃｅ）、および重みを含む。フィルタプロパティは、フィルタがアクティブフィルタであるか、無効フィルタであるか、アクティブフィルタを一致するパケットに適用する順序、およびアクティブフィルタが一致するパケットに適用されるかどうかを判断するために使用する。フィルタの形式の例については、図３を参照して説明する。
【００４３】
インストールされている１組のフィルタ２８２には、無効フィルタリスト２８６およびアクティブフィルタリスト２８８が関連付けられている。アクティブフィルタリスト２８８は、アクティブ状態にあり、ネットワークポリシーの実装に使用するフィルタを識別する。無効フィルタリスト２８６は、非アクティブまたは無効状態にあり、現在はネットワークポリシーの実装に使用されてはいないが、後にアクティブ状態になり得るフィルタを識別する。あるいは、本発明は、アクティブフィルタリスト２８８および無効フィルタリスト２８６を維持せず、異なるメソッド、例えば各フィルタ内で維持されるフィールド内のメソッド、または他の同等のメソッドを使用して各フィルタの状態を追跡する。
【００４４】
本発明の一実施形態では、フィルタは、特定のユーザレイヤー２６４またはカーネルモードレイヤー２５４に割り当てられる。各レイヤーは、インストールされている個別の１組のフィルタ２８２、個別の無効フィルタリスト２８６、および個別のアクティブフィルタリスト２８８を含む。あるいは、インストールされている単一の１組のフィルタおよびアクティブフィルタリストおよび無効フィルタリストのみが維持される。
【００４５】
レイヤーＡＰＩ２８０は、ネットワークスタック２５４のレイヤーとカーネルファイアウォールエンジン２５６の間にインターフェースを提供する。レイヤーＡＰＩ２８０を介して、要求レイヤーは、分類要求をカーネルファイアウォールエンジン２５６に発行する。分類要求は、要求レイヤーによって受信されたパケット、要求レイヤーによって受信されたパケットコンテキスト、およびレイヤーパラメータを含む。レイヤーパラメータは、例えば要求レイヤーによってパケットに追加され、パケットから解析され、そうでない場合はパケットから導出されることによって処理されるパケットパラメータである。具体例として、ソースおよび宛先のインターネットプロトコル（ＩＰ）アドレスは、ＩＰプロトコルを実装するときにネットワークレイヤー２７２によって送信されるレイヤーパラメータである。またレイヤーパラメータは、パケットに追加され、またはパケットから解析されるパケットパラメータを超える情報を含むことができる。具体例として、レイヤーパラメータは、ローカルアドレスタイプを含む。ローカルアドレスタイプは、ＩＰレイヤーによって決定され、分類要求の一部として送信される。ローカルアドレスタイプには、ユニキャスト、ブロードキャスト、マルチキャスト、エニーキャストなどがある。レイヤーＡＰＩ２８０の具体的な一実装形態については、図５を参照して説明する。
【００４６】
任意選択で、コ―ルアウト２５８を使用して、許可および阻止のフィルタアクションを超える追加の機能を実施する。コールアウトは、カーネルファイアウォールエンジン２５６が、関連するアクションとしてコールアウトモジュールのうちの１つへのコールアウトを含むパケットの整合フィルタを識別するときに実行される。カーネルファイアウォールエンジンは、要求レイヤーによって発行された分類要求、すなわち全パケット、レイヤーパラメータ、およびパケットコンテキストを整合フィルタの識別とともに、コールアウトＡＰＩ２８４を介してコールアウトモジュールに送信する。本発明の一実施形態では、ファイアウォールアーキテクチャは、基本的な１組のコールアウト２５８を含む。追加のコールアウトは、レイヤーのように、必要に応じて追加され、それによって拡張可能なフレームワークが提供される。コールアウトＡＰＩ２８４の具体的な一実装形態については、図６を参照して説明する。
【００４７】
ユーザモードプロセス２５０は、ユーザファイアウォールエンジン２６０、および「ＰＰ１」、「ＰＰ２」、「ＰＰ３」として識別される１つまたは複数のポリシープロバイダ２６２を含む。ポリシープロバイダ２６２は、ネットワークポリシー、すなわちインストールされているフィルタ２８２を、本明細書に記載のフレームワークに追加するプロセスである。このタスクの達成には、任意のプロセスが使用される。ユーザファイアウォールエンジン２６０は、ポリシーを新しいフィルタに変換する。すなわちフィルタ条件、アクション、フィルタプロパティに関してポリシーを定義し、インストールされている１組のフィルタに新しいフィルタを追加し、アクティブフィルタリストまたは無効フィルタリストにそのフィルタを追加する。
【００４８】
また、ユーザファイアウォールエンジン２６０は、フィルタ決定機能および競合解決機能を実行する。ポリシープロバイダ２６２がユーザモードファイアウォールエンジン２６０に新しいポリシーを提供するとき、ユーザファイアウォールエンジンは、新しいポリシーに起因する新しいフィルタが、インストールされているフィルタ２８２の中のいずれかと競合するかどうかを判断する。競合は、２つ以上のフィルタが（１）異なるアクションを指定しているとき、（２）重複しているとき、（３）異なるプロパティクラスを有しているとき、（４）優先度クラスのより低いフィルタの重み値がより高いとき、および（５）優先度クラスのより低いフィルタで指定されたアクションが優先度のより高いフィルタでオーバーライド許可として指定されていないときに起こる。フィルタは、共通する１組のフィルタ条件、すなわち等しい値、または交差する値の範囲内のフィルタ条件を含んでいる場合に重複する。オーバーライド許可は、フィルタをオーバーライドできる優先度のより低いフィルタでアクションを定義する。競合が存在する場合、ユーザファイアウォールエンジン２６０は、競合を解決する。
【００４９】
フィルタエンジンＡＰＩ２６６は、ユーザファイアウォールエンジン２６０とカーネルファイアウォールエンジン２５６の間のインターフェースを形成する。フィルタエンジンＡＰＩ２６６は、ユーザファイアウォールエンジン２６０が、インストールされている１組のフィルタ２８２に新しいフィルタを追加し、インストールされている１組のフィルタからフィルタを削除し、フィルタ競合を検出でき、解決できるようにインストールされているフィルタ２８２を検査するための機構を提供する。管理ＡＰＩ２９０は、同様の機能をポリシープロバイダ２６２に公開する。
【００５０】
キーイングモジュールＡＰＩ２８８は、ユーザポリシーエンジン２６０とキーイングモジュール２７６の間のインターフェースを提供する。キーイングモジュールＡＰＩ２８８は、ＳＡを確立する必要があることをキーイングモジュールに知らせるために使用する。
【００５１】
ユーザファイアウォールエンジン２６０は、フィルタモジュール２９４も含む。フィルタモジュール２９４は、ユーザモード２５０でのカーネルファイアウォールエンジン２５６のインスタンスである。ユーザファイアウォールエンジン２６０内のフィルタモジュール２９４のインスタンスによって、ユーザファイアウォールエンジン２６０は、１つまたは複数のユーザレイヤー２６４に対してカーネルファイアウォールエンジン２５６のサービスを複製することができる。ユーザモードレイヤー２６４は、カーネルモードレイヤーが作成されたのと同じように追加される。フィルタモジュール２９４は、カーネルファイアウォールエンジン２５６のユーザモードのインスタンスであるため、本明細書で記載したカーネルモードファイアウォールエンジンの任意の機能は、フィルタモジュール２９４にも適用されることを理解されよう。例えば、追加のユーザモードレイヤーをシステムアーキテクチャに追加し、またはそこから削除し、コールアウトを作成し、それによって追加の機能をユーザモードレイヤーに提供することができる。フィルタを、フィルタモジュール２９４に追加し、またはそこから削除することができる。また、ユーザファイアウォールエンジン２６０は、フィルタモジュール２９４内のフィルタのフィルタ競合を解決する。
【００５２】
次に図３を参照して、インストールされている１組のフィルタ２８２について説明する。各フィルタ３００は、フィルタＩＤ３０２、フィルタプロパティ３０４、アクション３０６、および１組のフィルタ条件３０８を含む複数のフィールドを有している。フィルタＩＤ３０２は、一意の識別をフィルタに提供する。フィルタＩＤ３０２は、例えばカーネルファイアウォールエンジン２５６が整合フィルタ情報をユーザファイアウォールエンジン２６０およびコールアウト２５８に戻すための手段として使用される。フィルタＩＤ３０２は、カーネルファイアウォールエンジン２５６によってどのフィルタがどのレイヤーに割り当てられるかを追跡するために使用する。また、フィルタＩＤ３０２を無効フィルタリスト２８６およびアクティブフィルタリスト２８８の一部として使用して、どのフィルタが非アクティブで、どのフィルタがアクティブであるかをそれぞれ識別する。
【００５３】
フィルタプロパティ３０４は、優先度クラス３１０、オーバーライド許可３１２、および重み３１４を含む。優先度クラス３１０は、ポリシープロバイダ２６２の中の１つを介してフィルタ３００を追加したユーザのクラスを指定する値である。優先度クラスの例には、ユーザ、管理者、ファイアウォールクライアント、およびゲストがある。優先度クラスが高ければ、それだけフィルタの優先度が高くなる。
【００５４】
オーバーライド許可３１２は、フィルタ３００をオーバーライドすることを許可された優先度のより低いフィルタで指定されたアクションを識別する。オーバーライド許可３１２の例には、許可、阻止、ログ、コールアウト、全アクション、またはなしがある。デフォルトのオーバーライド許可はなしである。
【００５５】
重み３１４は、任意の符号なしの値である。重みのデフォルトのサイズは６４ビットである。重み値は、優先度クラス３１０とともに、全体的なフィルタ優先度を決定する。重みフィールド内の値が高くなれば、それだけフィルタの優先度が高くなる。重み３１４は、フィルタ条件、および場合によっては他の基準の特異性に基づいてユーザファイアウォールエンジン２６０によって自動的に算出される。あるいは、重みはユーザが入力する値である。ユーザは、重みがユーザファイアウォールエンジン２６０によって自動的に算出される場合、重みフィールドを変更することもできる。
【００５６】
１組のフィルタ条件３０８は、パケットがフィルタ３００と一致するかどうかを判断する。各フィルタ条件３０８は、型３１８、データ３２０、およびレイヤーＩＤ：フィールドＩＤ３２２を含む。
【００５７】
型３１８は、対応するデータフィールド３２０に含まれる変数の長さおよび数を定義する。フレームワークは、Ｂｙｔｅ、Ｓｈｏｒｔ、Ｌｏｎｇ、８Ｂｙｔｅｓ、Ｓｔｒｉｎｇ、Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｖｅｒｓｉｏｎ  ４（ＩＰｖ４）Ａｄｄｒｅｓｓ、Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｖｅｒｓｉｏｎ  ６（ＩＰｖ６）Ａｄｄｒｅｓｓ、ＩＰｖ４  Ａｄｄｒｅｓｓ  ｐｌｕｓ  Ｍａｓｋ、ＩＰｖ６  Ａｄｄｒｅｓｓ  ｐｌｕｓ  Ｍａｓｋ、Ａｄｄｒｅｓｓ  Ｒａｎｇｅなど事前に定義されている既知の変数型を提供する。
【００５８】
データフィールド３２０は、型３１６に一致するデータを含む。例えば、型がＩＰｖ４  Ａｄｄｒｅｓｓの場合、データフィールド３２０の許容値は、ドット付き１０進数表記で表される００．００．００．００から２５５．２５５．２５５．２５５までの範囲内の３２ビットの数字である。場合によっては、型３１８によってデータフィールド３２０に複数の値が提供される。Ａｄｄｒｅｓｓ  Ｒａｎｇｅ、ＩＰｖ４  Ａｄｄｒｅｓｓ  ｐｌｕｓ  Ｍａｓｋ、およびＩＰｖ６  Ａｄｄｒｅｓｓ  ｐｌｕｓ  ｍａｓｋの型によって、ＩＰアドレスの最初と最後の範囲を定義する２つのＩＰアドレス値が可能になる。柔軟性を最大にするために、アーキテクチャは、ユーザ定義された型も許可する。あるいは、追加の型を手動でフレームワークに追加する。
【００５９】
レイヤーＩＤ：フィールドＩＤフィールド３２２は、発信レイヤー（ｏｒｉｇｉｎａｔｉｎｇ  ｌａｙｅｒ）、および発信レイヤーからのパラメータをそれぞれ識別するために使用する。発信レイヤーおよび発信レイヤーからのパラメータは、パケットパラメータ、すなわち整合フィルタを識別するときにデータ３２０が比較されるレイヤーパラメータおよびパケットコンテキストを定義する。発信レイヤーは、カーネルレイヤーまたはユーザレイヤーを識別する。パラメータは、特定の発信レイヤーパラメータを識別する。具体例をフィルタ条件３１６によって示す。型はＩＰｖ４であり、それによってデータ３２０が３２ビットのＩＰアドレスであることを示す。レイヤーＩＤは「ＩＰ」であり、３２ビットの数字がネットワークレイヤーパラメータであることを表す。フィールドＩＤは「Ｓｉｃ  ＩＰ  Ａｄｄｒ」であり、ＩＰレイヤーパラメータをソースＩＰアドレスとして識別する。データフィールドに提供されているＩＰアドレスは「１２３．４．０１」であり、これによって特定のＩＰソースアドレスが識別される。ソースＩＰアドレスが１２３．４．０．１のパケットが例に示したフィルタ条件と一致する。
【００６０】
フィルタ３００は、複数のフィルタ条件３０８を含むことができ、この場合パケットは、すべてのフィルタ条件が満たされるときにフィルタ３００と一致する。
【００６１】
フィルタ３００で指定されているアクション３０６は、フィルタ条件３０８と一致するパケットをどのように扱うかを識別する。アクションの例には許可および阻止がある。許可および阻止は、一致するパケットがネットワークをさらに横断するのを許可すべきである、または逆に阻止すべきであることを示すファイアウォールポリシーを識別する。追加の機能の任意選択のコールアウトを実行するためのコールアウト、またはＩＰＳｅｃなどのポリシーを実行するためのコールアウトなど他のアクションを含むこともできる。また、後述するポリシーコンテキストデータ構造と呼ばれるデータ構造で他のネットワークポリシーを定義することによって他のネットワークポリシーを実行することもできる。
【００６２】
ポリシーコンテキスト３０７は、セキュリティポリシーやＱＯＳポリシーなど、ファイアウォールポリシー以外のポリシーを格納するために使用する。ポリシーコンテキストは、適したデータ構造であればどんなものでもよい。例えばポリシーコンテキストは、ポリシーコンテキストを追加したプロセスによって解釈される６４ビットの数字である。ポリシーコンテキストおよび／またはアクションは、ヌル値とすることができる。
【００６３】
本発明の一実施形態では、アクションには、終了（ｔｅｒｍｉｎａｔｉｎｇ）または非終了が指定される。アクションが終了である場合、パケットに対してアクションが識別されると、そのアクションは、要求レイヤーに戻され、フィルタはそれ以上パケットに適用されない。アクションが非終了である場合、パケットに対する終了アクションが識別されるまで、さらにフィルタ検索が続行する。デフォルトとして、許可および阻止に終了アクションが指定されている。
【００６４】
図４は、ネットワークスタック２５４のレイヤーおよびコールアウトモジュール２５８によって維持され、それらに渡されるパケットコンテキストに使用するデータ構造３３０の例を示す。パケットコンテキストは、１つまたは複数のユーザレイヤー２６４によって使用することもできる。パケットコンテキスト３３０は、レイヤーを横断する間インバウンドまたはアウトバウンドのネットワークパケットに付随し、３３６〜３４０とラベル付けされた１つまたは複数のエントリを含む。各エントリは、レイヤーＩＤ：フィールドＩＤ３３２および対応する値３３４を含む。
【００６５】
レイヤーＩＤ：フィールドＩＤ３３２は、フィルタ３００（図３）のフィルタ条件３０８の一部として提供されているレイヤーＩＤ：フィールドＩＤ３２２と同じ意味を有する。つまり、レイヤーＩＤ：フィールドＩＤ３２２は、値フィールド３３４内のデータについての発信レイヤー、および発信レイヤーからのレイヤーパラメータを識別する。値フィールド３３４は、特定のレイヤーパラメータを含む。
【００６６】
具体例として、エントリ３３６は、レイヤーＩＤ：フィールドＩＤ３３２「ＮＤＩＳ：Ｓｒｃ．ＭＡＣ  Ａｄｄｒ」を含む。「ＮＤＩＳ」は、リンクレイヤー２７４（図２）のＮＤＩＳ実装を表す。「Ｓｒｃ．ＭＡＣ  Ａｄｄｒ」は、ソースＭＡＣアドレスを表す。したがって、レイヤー：フィールドＩＤ３３２は、値フィールド３３４のデ―タがＮＤＩＳ（リンク）レイヤーによって処理され追加されたソースＭＡＣアドレスであることを示す。値フィールド３３４は、実際のソースＭＡＣアドレスを含み、これは、例では１６進法で表される「００．０８．７４．４Ｆ．２２．Ｅ５」である。
【００６７】
第２の例として、エントリ３３８は、「ＮＤＩＳ：ＩＦ  Ｎｏ」のレイヤーＩＤ：フィールドＩＤ３３２を有する。この場合もまた、レイヤーをＮＤＩＳとして識別するが、この場合、インターフェース番号を特定のＮＤＩＳパラメータとして表す「ＩＦ  Ｎｏ」としてパラメータを識別する。値フィールド３３４は、実際のインターフェース番号を含む。この場合は２である。
【００６８】
第３の例として、エントリ３４０は、「ＩＰ：Ｄｓｔ  ＩＰ  Ａｄｄｒ」のレイヤーＩＤ：フィールドＩＤ３３２を有する。「ＩＰ」は、ＩＰプロトコルを使用するネットワークレイヤーを表し、「Ｄｓｔ  ＩＰ  Ａｄｄｒ」は、宛先ＩＰアドレスをＩＰレイヤーパラメータとして表す。値フィールド３３４は、実際の宛先ＩＰアドレス「１２３．３．２．１」を含む。
【００６９】
本発明の基礎となるファイアウォールアーキテクチャについて説明してきたが、本明細書に記載した基礎となるフレームワークを使用して実行されるシステムの機能インターフェースおよび方法の例に注目する。機能インターフェースが複数のアプリケーションプログラミングインターフェース（ＡＰＩ）として実装される。ＡＰＩは、図５および図６に示すように、レイヤーＡＰＩ２８０、コールアウトＡＰＩ２８４、ファイアウォールエンジンＡＰＩ２６６、およびキーイングモジュールＡＰＩ２８８を含む。
【００７０】
レイヤーＡＰＩ２８０は、ネットワークスタック２５４の各レイヤーとカーネルファイアウォールエンジン２５６の間のデータ交換を容易にする。図に示すように、レイヤーＡＰＩ２８０は、Ｃｌａｓｓｉｆｙメソッド３５０、Ａｄｄ  Ｌａｙｅｒメソッド３５２、およびＤｅｌｅｔｅ  Ｌａｙｅｒメソッド３５４を含む。
【００７１】
Ｃｌａｓｓｉｆｙメソッド３５０は、要求レイヤーによって使用されて、レイヤーパラメータ、要求レイヤーが受信したパケット、およびパケットコンテキストをカーネルファイアウォールエンジン２５６に送信する。カーネルファイアウォールエンジン２５６は、（１）要求レイヤーからのレイヤーパラメータ、および（２）パケットコンテキストエントリを、要求レイヤーに割り当てられる各フィルタ３００内のフィルタ条件３０８と比較して、整合フィルタを識別する。以下は、Ｃｌａｓｓｉｆｙメソッドの実装の例である。以下のメソッドはデータ値を受信する、または戻すものとして説明していることは理解されよう。既知のプログラミング技術によれば、こうしたメソッドは、実際のデータ値の代わりに、データ値へのポインタを使用することができる。
【００７２】
【表１】
2004364305.tif 000003
【００７３】
示したパラメータの特徴を以下に述べる。
ＬａｙｅｒＩｄは、分類要求を発行するネットワークレイヤー、すなわち要求レイヤーを識別する。図３を参照すると、レイヤーＩＤは、デ―タストリームレイヤー２６８、トランスポートレイヤー２７０、ネットワークレイヤー２７２、リンクレイヤー２７４、またはユーザモードレイヤー２６４としてレイヤーを識別する。他のレイヤーをシステムに追加した場合、それも有効である。
【００７４】
ｐＩｎＦｉｘｅｄＶａｌｕｅｓは、要求レイヤーによって処理されるレイヤーパラメータの一部を含む。ｐＩｎＦｉｘｅｄＶａｌｕｅｓは、パケットコンテキストエントリとともにフィルタ条件と比較されて、パケットがフィルタと一致するかどうかが判断される。レイヤーごとにｐＩｎＦｉｘｅｄＶａｌｕｅｓに含まれているレイヤーパラメータの例を次の表Ａに示す。これらのパラメータが限定的なものではなく単に例にすぎないことは理解されよう。
【００７５】
【表２】
2004364305.tif 000004
【００７６】
ｐＩｎＣｏｎｔｅｘｔは、要求レイヤーで受信されたコンテキストデータ構造３３０（図４）を含む。カーネルファイアウォールエンジン２５６は、パケットコンテキストをレイヤーパラメータとともに使用して、一致するパケットを識別する。
【００７７】
ｐＰａｃｋｅｔは、要求レイヤーによって受信された全パケットを含む。カーネルファイアウォールエンジン２５６は、整合フィルタを識別するのにｐＰａｃｋｅｔを使用しない。上述したように、カーネルファイアウォールエンジン２５６は、ｐＩｎＦｉｘｅｄＶａｌｕｅｓおよびｐＩｎＣｏｎｔｅｘｔを使用して、整合フィルタを識別する。ｐＰａｃｋｅｔは、カーネルファイアウォールエンジン２５６が整合フィルタでアクション３０６として識別された１つまたは複数のコールアウトモジュール２５８に送信できるように、Ｃｌａｓｓｉｆｙメソッドに含まれている。
【００７８】
ｐＡｃｔｉｏｎＴｙｐｅは、要求レイヤーに戻されるアクション３０６を含む。戻されるアクション３０６は、整合フィルタで識別される許可または阻止であるか、整合フィルタによって実行されるコールアウトモジュールである。整合フィルタが存在しない場合、デフォルトのアクション３０６の許可が戻される。
【００７９】
ｐＯｕｔＣｏｎｔｅｘｔは、アクションに加えて、ＱＯＳ、ＩＰＳｅｃなどネットワークポリシーをさらに定義するデータを含むように設計されているデータ構造である。ｐＯｕｔＣｏｎｔｅｘｔは、適した任意のデータ構造であり、例えばｐＯｕｔＣｏｎｔｅｘｔを追加するレイヤーまたはプロセスによって解釈されるデータのストリームを含む６４ビットエントリである。
【００８０】
Ａｄｄ  Ｌａｙｅｒ３５２メソッドおよびＤｅｌｅｔｅ  Ｌａｙｅｒ３５４メソッドは、それぞれファイアウォールアーキテクチャへのレイヤーの追加、ファイアウォールアーキテクチャからのレイヤーの削除のために使用する。以下は、Ａｄｄ  Ｌａｙｅｒ３５２メソッドの形式の例である。
NTSTATUS
AddExtensionLayer(OUT PULONG pLayerID);
【００８１】
示したパラメータの特徴を以下に述べる。
【００８２】
ｐＬａｙｅｒｌｄは、追加されるレイヤー、すなわちＡｄｄ  Ｌａｙｅｒメソッドを実行するレイヤーに戻される一意のレイヤー識別値である。
【００８３】
以下は、Ｄｅｌｅｔｅ  Ｌａｙｅｒ３５４メソッドの形式の例である。
NTSTATUS
RemoveExtensionLayer(ULONG Layerld);
【００８４】
示したパラメータの特徴を以下に述べる。
Ｌａｙｅｒｌｄは、削除されるレイヤー、すなわちＤｅｌｅｔｅ  Ｌａｙｅｒメソッドを実行するレイヤーを識別する。
【００８５】
コールアウトＡＰＩ２８４は、カーネルファイアウォールエンジン２５６とコールアウト２５８の間のデータ交換を容易にする。コールアウトＡＰＩ２８４は、Ｃｌａｓｓｉｆｙメソッド３５６、Ｒｅｇｉｓｔｅｒ  Ｃａｌｌｏｕｔメソッド３６０、およびＤｅｒｅｇｉｓｔｅｒ  Ｃａｌｌｏｕｔメソッド３６２を含む。
【００８６】
コールアウトＡＰＩ２８４のＣｌａｓｓｉｆｙメソッド３５６は、整合フィルタデータも含んでいることを除いてレイヤーＡＰＩ２８０のＣｌａｓｓｉｆｙメソッド３５０と似ている。以下は、コールアウトの実行に使用するＣｌａｓｓｉｆｙメソッド４１０の形式の例である。
【００８７】
【表３】
2004364305.tif 000005
【００８８】
示したパラメータの特徴を以下に述べる。
ｆｉｘｅｄＶａｌｕｅｓは、要求レイヤーから送信されたレイヤーパラメータを含む。ｆｉｘｅｄＶａｌｕｅｓは、レイヤーＡＰＩ２８０のＣｌａｓｓｉｆｙメソッド３５０の一部として送信されるｐＩｎＦｉｘｅｄＶａｌｕｅｓデータ中の要求レイヤーによって提供されるデータと同じものである。
【００８９】
ｗｆｐＣｏｎｔｅｘｔは、コンテキストデータ構造３３０（図４）を含む。このデータは、レイヤーＡＰＩ２８０のＣｌａｓｓｉｆｙメソッド３５０の一部として送信されるｐＩｎＣｏｎｔｅｘｔ中の要求レイヤーによって送信されるデータと同じものである。
【００９０】
Ｐａｃｋｅｔは、要求レイヤーによって受信された全パケットを含む。このデータは、レイヤーＡＰＩ２８０のＣｌａｓｓｉｆｙメソッド３５０の一部として送信されるｐＰａｃｋｅｔ中の要求レイヤーによって送信されるデータと同じものである。
【００９１】
ｍａｔｃｈｅｄＦｉｌｔｅｒは、コールアウトを要求するフィルタを識別する。一般に、整合フィルタは、コールアウトＡＰＩ２８４のＣｌａｓｓｉｆｙメソッド３５６を開始する整合フィルタ３００のフィルタＩＤ３０２によって識別される。
【００９２】
ｐＡｃｔｉｏｎＴｙｐｅは、コールアウト２５８からカーネルファイアウォールエンジン２５６に戻されるアクションを含む。ｐＡｃｔｉｏｎＴｙｐｅは、許可または阻止の場合、レイヤーＡＰＩ２８０によって戻されるｐＡｃｔｉｏｎＴｙｐｅとして要求レイヤーに戻される。また、コールアウトは、パケットに整合フィルタを引き続き適用することをカーネルファイアウォールエンジン２５６に指示する続行アクションを戻すことができる。
【００９３】
ｐＯｕｔＣｏｎｔｅｘｔは、アクションに加えて、ＱＯＳ、ＩＰＳｅｃなどネットワークポリシーをさらに定義するデータを含むように設計されているデータ構造である。ｐＯｕｔＣｏｎｔｅｘｔは、適した任意のデータ構造であり、例えばｐＯｕｔＣｏｎｔｅｘｔを追加するレイヤーまたはプロセスによって解釈されるデータのストリームを含む６４ビットエントリである。
【００９４】
Ｎｏｔｉｆｙメソッド３５８は、そのアクション３０６の１つとしてコールアウトモジュール２５８を識別するインストールされている１組のフィルタ２８２にフィルタ３００が追加されたときにコールアウトに知らせるために使用する。ｎｏｔｉｆｙは、カーネルファイアウォールエンジン２５６によって実行されたときにコールアウト２５８が使用するバッファの割り当ておよび割り当て解除など必要な任意のアクションを起こす機会をコールアウトに提供する。以下は、Ｎｏｔｉｆｙメソッド３５８の形式の例である。
【００９５】
【表４】
2004364305.tif 000006
【００９６】
示したパラメータの特徴を以下に述べる。
ｎｏｔｉｆｙは、フィルタが追加されるか、削除されるかを示す数値を含む。例えば、値１はフィルタが追加されることを示し、値２はフィルタが削除されることを示す。
【００９７】
ｆｉｌｔｅｒは、一意の値によって追加または削除されるフィルタを識別する。これは、フィルタ３００の一部として含まれているフィルタＩＤ３０２を提供することによって達成できる。
【００９８】
Ｒｅｇｉｓｔｒａｔｉｏｎメソッド３６０およびＤｅｒｅｇｉｓｔｒａｔｉｏｎメソッド３６２は、それぞれコールアウトモジュールを追加、および削除するために使用する。Ｒｅｇｉｓｔｒａｔｉｏｎメソッド３６０の形式の例は以下の通りである。
【００９９】
【表５】
2004364305.tif 000007
【０１００】
示したパラメータの特徴を以下に述べる。
ｃａｌｌｏｕｔ  ＩＤは、登録するコールアウトモジュールの一意の識別を提供する。
【０１０１】
ｃａｌｌｏｕｔは、ドライバサービス名、装置名、およびコールアウトのＣｌａｓｓｉｆｙ関数およびＮｏｔｉｆｙ関数へのポインタなど任意のコールアウト固有の情報を提供する。
【０１０２】
ｓｄは、コールアウトのセキュリティ記述子を提供する。セキュリティ記述子は、どのプロセスがコールアウトを読み取り、削除するかを識別する。
【０１０３】
Ｄｅｒｅｇｉｓｔｒａｔｉｏｎメソッド３６２の形式の例は、以下の通りである。
NTSTATUS WfpDeregisterCallout
(
IN const GUID*    calloutId
);
【０１０４】
示したパラメータの特徴を以下に述べる。
ｃａｌｌｏｕｔ  ＩＤは、削除すべきコールアウトの一意のＩＤである。
【０１０５】
フィルタＡＰＩ２６６は、ユーザファイアウォールエンジン２６０とカーネルファイアウォール２５６エンジンの間のデータ交換を容易にする。図に示すように、フィルタエンジンＡＰＩ２６６は、Ａｄｄ  Ｆｉｌｔｅｒメソッド３６４、Ｄｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド３６６、Ｅｎｕｍ  Ｌａｙｅｒメソッド３６８を含む。また、フィルタエンジンＡＰＩ２６６のメソッドは、管理ＡＰＩ２９０の一部としても提供される。
【０１０６】
Ａｄｄ  Ｆｉｌｔｅｒメソッド３６４およびＤｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド３６６は、それぞれインストールされている１組のフィルタ２８２への新しいフィルタの追加、インストールされている１組のフィルタ２８２からの既存のフィルタの削除のために使用する。以下は、Ａｄｄ  Ｆｉｌｔｅｒメソッド３６４の形式の例である。
【０１０７】
【表６】
2004364305.tif 000008
【０１０８】
Ｌａｙｅｒｌｄは、フィルタが割り当てられるレイヤーを識別する。
【０１０９】
示したパラメータの特徴を以下に述べる。
ｐＦｉｌｔｅｒは、インストールされている１組のフィルタ２８２に追加されるフィルタ３１０である。
【０１１０】
以下は、Ｄｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド４２０の形式の例である。
【０１１１】
【表７】
2004364305.tif 000009
【０１１２】
示したパラメータの特徴を以下に述べる。
ＬａｙｅｒＩｄは、フィルタが割り当てられるレイヤーを識別する。
【０１１３】
ｐＦｉｌｔｅｒは、インストールされている１組のフィルタから削除されるフィルタである。
【０１１４】
Ｅｎｕｍ  Ｌａｙｅｒメソッド３６８は、ユーザファイアウォールエンジン２６０が１組の基準と一致するすべてのフィルタを識別するための機構を提供する。これによって、フィルタエンジンＡＰＩ２６６は、フィルタの調停および競合の解決のために競合するフィルタを識別することができる。以下は、Ｅｎｕｍ  Ｌａｙｅｒメソッド３６８の形式の例である。
【０１１５】
【表８】
2004364305.tif 000010
【０１１６】
示したパラメータの特徴を以下に述べる。
ｐＥｎｕｍＴｅｍｐｌａｔｅは、戻されるべきフィルタを定義するデータ構造を含む。例えばこれは、フィルタが戻されるためにフィルタ条件が一致しなければならないパラメータを含む。
【０１１７】
ｐＭａｔｃｈＣｏｕｎｔは、指定されたｐＥｎｕｍＴｅｍｐｌａｔｅに基づくフィルタの一致数を含む。
【０１１８】
ｐＥｎｕｍＨａｎｌｄｅは、一致したフィルタエントリへの参照を含む。
【０１１９】
キーイングモジュールＡＰＩ２８８は、ユーザレイヤー２６４とキーイングモジュール２７６の間のインターフェースを提供する。キーイングモジュールＡＰＩ２８８は、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッド３７０、Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッド３７２、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッド３７４、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッド３７６、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッド３７８、ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド３８０、Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッド３８２、Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡメソッド３８４、Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッド３８６、およびＫｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッド３８８を含む。キーイングモジュールＡＰＩ２８８は、Ｃｌａｓｓｉｆｙメソッド３５０、Ａｄｄ  Ｌａｙｅｒメソッド３５２、およびＤｅｌｅｔｅ  Ｌａｙｅｒメソッド３５４など、レイヤーＡＰＩに関して上述したメソッドを含むこともできる。
【０１２０】
キーイングモジュールＡＰＩを使用すると、開始側コンピュータおよび応答側コンピュータによって使用される、例えばＩＰＳｅｃによって定義される既知のセキュリティプロトコルの使用が容易になる。ＩＰＳｅｃは、ＡＨやＥＳＰなどのプロトコルを含む。ＥＳＰプロトコルは、暗号機構を使用して整合性、ソース認証、およびデータの機密性を提供する認証および暗号化プロトコルである。ＡＨプロトコルは、パケットヘッダーにハッシュ署名を使用してパケットデータの整合性および送信者の正真性を検証する認証プロトコルである。
【０１２１】
ＩＫＥプロトコルは、開始側コンピュータおよび応答側コンピュータがＡＨプロトコルおよびＥＳＰプロトコルとともに使用するセキュリティ設定をネゴシエートするための方法を提供する。ネゴシエートされたセキュリティ設定は、セキュリティアソシエーション（ＳＡ）と呼ばれるデータ構造を形成する。ＳＡは、ＥＳＰまたはＡＨによって使用される認証アルゴリズム、暗号化アルゴリズム、鍵、および鍵の寿命などのパラメータを定義してＩＰパケットの内容を保護する。ＥＳＰおよびＡＨは、確立されたＳＡを必要とするため、ＩＫＥネゴシエーションは、開始側および応答側のコンピュータがＥＳＰまたはＡＨプロトコルを使用する前に実行される。所与のＳＡは、セキュリティパラメータインデックス（ＳＰＩ）として知られる値によって識別される。
【０１２２】
開始側コンピュータおよび応答側コンピュータのそれぞれは、ＩＰＳｅｃポリシーに基づいて、開始側コンピュータと応答側コンピュータの間で送信されるデータが暗号化または認証を必要とするかどうかを判断するＩＰＳｅｃドライバを含む。ＩＰＳｅｃポリシーは、ネットワーク装置がどのようにＩＰＳｅｃを使用するかを定義する１組のフィルタであり、フィルタリスト、認証メソッド、および他の情報を含む。本発明の一実施形態では、ＩＰＳｅｃポリシーは、カーネルポリシーエンジンまたはフィルタモジュール２９４にインストールされている１組のフィルタに含まれるフィルタによって定義される。パケットに適用されるポリシーは、Ｃｌａｓｓｉｆｙメソッドを使用して整合フィルタを識別するキーイングモジュールレイヤーを呼び出すことによって識別される。
【０１２３】
ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッド３７０は、（クライアントプロキシを介して）ユーザポリシーエンジン２６０によって呼び出されて、ドライバ取得または外部開始要求をキーイングモジュールレイヤーに渡す。キーイングモジュールレイヤーは、この呼出を戻し、非同期にネゴシエーションを行う。キーイングモジュールレイヤーがネゴシエーションを完了すると、キーイングモジュールレイヤーは、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッド３７４を呼び出して、ネゴシエーションが完了したことをユーザファイアウォールエンジン２６０に通知する。以下は、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッドの形式の例である。
【０１２４】
【表９】
2004364305.tif 000011
【０１２５】
示したパラメータの特徴を以下に述べる。
ｉｐｓｅｃＣｏｎｔｅｘｔは、ａｃｑｕｉｒｅを追加されるＳＡと連結するハンドルである。
【０１２６】
ａｃｑｕｉｒｅは、ＩＫＥなど既知のプロトコルに従ってＳＡをネゴシエートするために必要な情報を含む。
【０１２７】
ｉｎｂｏｕｎｄＳＡｓｐｉは、インバウンドＳＡに使用するＳＰＩを含む。
【０１２８】
Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッド３７２は、インバウンドＳＡを追加したキーイングモジュールレイヤーに期限切れ通知を渡すために呼び出される。以下は、Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッドの形式の例である。
【０１２９】
【表１０】
2004364305.tif 000012
【０１３０】
示したパラメータの特徴を以下に述べる。
ｅｘｐｉｒｅＮｏｔｉｆｙは、期限切れのＳＡを識別する情報を含む。例えば、アウトバウンドＳＡの場合、ＳＰＩが提供される。
【０１３１】
ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅ３７４メソッドは、キーイングモジュールによって呼び出されて、ネゴシエーションが終了し、すべてのＳＡが追加された後、またはエラーが検出された後に、ユーザポリシーエンジンのコンテキストを閉じる。このメソッドが実行された後、キーイングモジュールは、他の任意のＡＰＩメソッドにｉｐｓｅｃＣｏｎｔｅｘｔを再利用しない。以下は、ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッドの形式の例である。
【０１３２】
【表１１】
2004364305.tif 000013
【０１３３】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザポリシーエンジン２６０へのハンドルを提供する。
【０１３４】
ｉｐｓｅｃＣｏｎｔｅｘｔは、ＩＰＳｅｃ  Ａｃｑｕｉｒｅメソッドによりユーザポリシーエンジン２６０によって渡されたコンテキストである。
【０１３５】
ｓｔａｔｕｓは、ＳＡネゴシエーションの状態および他の詳細を提供する。ａｃｑｕｉｒｅがＦｗｐＫｅｙｉｎｇＭｏｄｕｌｅＩｎｉｔｉａｔｅ０を介して外部で開始された場合、ユーザポリシーエンジン２６０によってｓｔａｔｕｓが戻される。
【０１３６】
Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッド３７６は、キーイングモジュール２７６によって呼び出されてユーザポリシーエンジン２６０にキーイングモジュール２７６を登録し、その関数ポインタを渡す。以下は、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッドの形式の例である。
【０１３７】
【表１２】
2004364305.tif 000014
【０１３８】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルを提供する。
【０１３９】
ｋｅｙｉｎｇＭｏｄｕｌｅＩＤは、キーイングモジュールの一意のＩＤである。
【０１４０】
ｋｅｙｍｏｄＩｎｆｏは、プロセスＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ関数やプロセスＩＰＳｅｃ  ＳＡ  Ｅｘｐｉｒｅ関数へのポインタなど、キーイングモジュールレイヤーに関する登録情報を含む。
【０１４１】
Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッド３７８は、キーイングモジュール２７６によって呼び出されて、キーイングモジュール２７６をユーザポリシーエンジン２６０から登録解除する。以下は、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッドの形式の例である。
【０１４２】
【表１３】
2004364305.tif 000015
【０１４３】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザポリシーエンジン２６０へのハンドルである。
【０１４４】
ｋｅｙｉｎｇＭｏｄｕｌｅＩＤは、キーイングモジュール２７６の一意のＩＤである。
【０１４５】
ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド３８０は、キーイングモジュール２７６によって呼び出されて新しいインバウンドＳＡのＳＰＩを取得する。ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド３８０は、通常、キーイングモジュール２７６が応答側ネットワーク装置で実行されるときに使用する。以下は、ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッドの形式の例である。
【０１４６】
【表１４】
2004364305.tif 000016
【０１４７】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
【０１４８】
ｉｐｓｅｃＴｒａｆｆｉｃＤｅｓｃｒｉｐｔｉｏｎは、初期段階の（ｌａｒｖａｌ）インバウンドＳＡを作成する５タプル記述である。５タプルは、ソースおよび宛先のＩＰアドレス、ソースおよび宛先のポート、およびトランスポートレイヤープロトコルタイプを含む。
【０１４９】
ｕｄｐＥｎｃａｐＩｎｆｏは、初期段階のＳＡを作成するＵＤＰカプセル化データである。ＵＤＰカプセル化とは、セキュリティプロトコルに従って書式化されたパケットを暗号化されていないＵＤＰパケットに埋め込む既知の方法である。
【０１５０】
ｉｎｂｏｕｎｄＳｐｉは、インバウンドＳＡのＳＰＩである。
【０１５１】
Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッド３８２は、キーイングモジュールレイヤーによって呼び出されてインバウンドＳＡを追加する。すなわち、初期段階のＳＡを更新する。ユーザポリシーエンジン２６０は、ＳＡにＳＰＩを使用して、この呼出をその内部状態にマップし、ＳＡに対してＩＰＳｅｃドライバまでｉｏｃｔｌを実行する。以下は、Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッドの形式の例である。
【０１５２】
【表１５】
2004364305.tif 000017
【０１５３】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザポリシーエンジンへのハンドルである。
【０１５４】
ｉｎｂｏｕｎｄＳＡは、インバウンドＳＡを含む。
【０１５５】
Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡ３８４メソッドは、キーイングモジュールレイヤーによって呼び出されてアウトバウンドＳＡを追加する。ユーザポリシーエンジンは、インバウンドＳＰＩパラメータを使用して、この呼出をその内部状態にマップし、ＳＡに対してＩＰＳｅｃドライバまでｉｏｃｔｌを実行する。以下は、Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡメソッドの形式の例である。
【０１５６】
【表１６】
2004364305.tif 000018
【０１５７】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
【０１５８】
ｏｎｂｏｕｎｄＳｐｉは、アウトバウンドＳＡと対のインバウンドＳＡのＳＰＩである。
【０１５９】
ｏｕｔｂｏｕｎｄＳＡは、アウトバウンドＳＡを含む。
【０１６０】
Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッド３８６は、キーイングモジュール２７６によって呼び出されて以前追加されたインバウンドＳＡを無効にする。以下は、Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッド３８６の形式の例である。
【０１６１】
【表１７】
2004364305.tif 000019
【０１６２】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザファイアウォールエンジン２６０へのハンドルである。
【０１６３】
ｅｘｐｉｒｅは、ＳＡを無効にするためのデータを含む。
【０１６４】
Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッド３８８は、ＲＡＳ、Ｗｉｎｓｏｃｋ  ＡＰＩなど既知の外部アプリケーションによって呼び出されて、アプリケーションがそのネットワークトラフィックの送信を開始する前にキーイングモジュールレイヤーを開始し、ＳＡをセットアップする。ユーザポリシーエンジン２６０は、ＲＰＣ呼出を非同期に保留し、ＩＰＳｅｃドライバからＳＰＩを取得し、ａｃｑｕｉｒｅを適切なキーイングモジュール２７６に渡す。キーイングモジュールレイヤーがＦｗｐＩＰＳｅｃＳＡＡｃｑｕｉｒｅＣｏｍｐｌｅｔｅ０を呼び出すと、ユーザファイアウォールエンジン２６０は、非同期ＲＰＣをネゴシエーション状態で完了する。以下は、Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッドの形式の例である。
【０１６５】
【表１８】
2004364305.tif 000020
【０１６６】
示したパラメータの特徴を以下に述べる。
ｅｎｇｉｎｅＨａｎｄｌｅは、ユーザポリシーエンジン２６０へのハンドルである。
【０１６７】
ａｃｑｕｉｒｅは、ＳＡのネゴシエーションに必要なデータを含む。
【０１６８】
ｗａｉｔＥｖｅｎｔは、ネゴシエーション状態が使用可能なときにトリガされるイベントへのハンドルである。クライアント、すなわち呼出側外部アプリケーションは、ネゴシエーションの完了を待つことに関係がない場合、このパラメータをＮＵＬＬに設定することができる。非同期ＲＰＣ呼出が完了すると、内部的に、クライアントプロキシはこのイベントを任意選択でＲＰＣに渡し、イベントを設定するようＲＰＣに要求する。
【０１６９】
ｎｅｇｏｔｉａｔｉｏｎＳｔａｔｕｓは、ネゴシエーションの結果を含む。ｗａｉｔＥｖｅｎｔがＮＵＬＬである場合、ｎｅｇｏｔｉａｔｉｏｎＳｔａｔｕｓはＮＵＬＬである。そうでない場合、ｗａｉｔＥｖｅｎｔがトリガされるまでｎｅｇｏｔｉａｔｉｏｎＳｔａｔｕｓは有効なままである。
【０１７０】
図７は、インストールされている１組のフィルタ２８２に新しいフィルタが追加される本発明による方法４００を示している。方法４００によって、フレームワークにインストールされている他のフィルタとの任意の競合を解決しながら、新しいフィルタを追加することができる。
【０１７１】
ステップ４０２において、ユーザファイアウォールエンジン２６０は、ポリシープロバイダ２６２の１つから新しいポリシーを受信する。上述したように、ポリシープロバイダ２６２は、揮発性または不揮発性のメモリに格納されているデータ、またはＧＵＩを介してユーザが入力したデータなど、任意の適したソースである。
【０１７２】
次いでユーザファイアウォールエンジン２６０は、ステップ４０４に示すように、フィルタプロパティ３０４、アクション３０６、およびフィルタ条件３０８に関して新しいポリシーを定義することによって新しいポリシーを新しいフィルタとする。フィルタＩＤ３０２およびポリシーコンテキストも提供され得る。
【０１７３】
フィルタプロパティ３０４は、優先度クラス３１０、オーバーライド許可３１２、および重み３１４を含む。優先度クラス３１０は、割り当てられた値をそれぞれ有するユーザ、管理者、ファイアウォールクライアント、またはゲストなど新しいポリシーの責任を負うユーザまたはプロセスの識別の機能である。優先度クラスの値が高ければ、それだけフィルタの優先度が高くなる。
【０１７４】
オーバーライド許可３１２は、新しいフィルタをオーバーライドできる優先度のより低いフィルタでアクションを指定する、すなわち、たとえフィルタの優先度クラスがより低い場合でも行われるアクションを指定する。オーバーライド許可は、ポリシープロバイダ２６２によって指定され、デフォルトはなしである。
【０１７５】
重み３１４は、インストールされている他のフィルタに対する新しいフィルタの優先順位を識別する。重み３１４は、ユーザファイアウォールエンジン２６０によって自動的に算出されるか、あるいはポリシープロバイダ２６２によって決定される。重みを自動的に算出する方法については、図１０を参照して説明する。
【０１７６】
ステップ４０６において、ユーザファイアウォールエンジン２６０は、新しいフィルタがアクティブフィルタリスト２８８に含まれるインストールされているフィルタ２８２の中のいずれかと競合するかどうかを判断する。インストールされているフィルタ２８２は、カーネルファイアウォールエンジン、あるいはフィルタモジュール２９４に格納されている。フィルタは、特定のユーザレイヤーまたはカーネルレイヤーに割り当てることができる。この場合、同じレイヤーに割り当てられた新しいフィルタとインストールされているフィルタ２８２との間にのみ競合が存在する。あるいは、ユーザファイアウォールエンジン２６０は、フィルタが特定のユーザレイヤーまたはカーネルレイヤーに割り当てられているかどうかに関係なく、新しいフィルタがインストールされている任意のフィルタ２８２と競合するかどうかを判断する。競合が存在するかどうかを識別する方法については、図９を参照して説明する。競合がないことが識別されると、新しいフィルタは、例えばＡｄｄ  Ｆｉｌｔｅｒメソッド３６４を使用してインストールされている１組のフィルタ２８２に追加され、ステップ４０８に示すように、アクティブフィルタリスト２８８に追加される。
【０１７７】
新しいフィルタが少なくとも１つのインストールされているフィルタと競合する場合、ステップ４１０で示すように、ユーザファイアウォールエンジン２６０は、新しいフィルタが、競合するインストールされているフィルタより低い優先度クラス３１０を有しているかどうかを判断する。新しいフィルタの優先度クラス３１０がより低い場合、新しいフィルタは、インストールされている１組のフィルタ２８２に追加され、ステップ４１２に示すように、無効リスト２８６に追加される。無効リスト２８６にあるインストールされているフィルタは、要求レイヤーによって発行される分類要求に応答するとき、ユーザファイアウォールエンジン２６０またはカーネルファイアウォールエンジン２５６によって整合フィルタとは識別されない。
【０１７８】
新しいフィルタが、競合するインストールされているフィルタより高い優先度クラス３１０を有している場合、新しいフィルタは、インストールされている１組のフィルタ２８２に追加され、ステップ４１４に示すように、アクティブリスト２８８に追加される。次いで競合するインストールされているフィルタは、ステップ４１６に示すように、アクティブリスト２８８から削除され、無効リストに追加される。
【０１７９】
競合するインストールされているフィルタを無効フィルタリスト２８６に移す場合、ユーザファイアウォールエンジン２６０は、無効フィルタリスト２８６内で識別された任意のフィルタを現在アクティブフィルタリスト２８８に移すことができるかどうかも判断する。これは、あるフィルタがアクティブフィルタリスト２８８から無効フィルタリスト２８６に移されるフィルタと競合したために無効になったときに起こる。可能な場合、こうした任意のフィルタは、無効フィルタリスト２８６から削除され、アクティブフィルタリスト２８８に移される。このプロセスは、繰り返すことができる。具体的には、各フィルタがアクティブフィルタリスト２８８に追加されるときに、優先度のより低い競合フィルタを無効にする必要がある。任意のフィルタが無効フィルタリストに追加されるときに、前にオーバーライドされた無効フィルタをアクティブにすることが望ましい。
【０１８０】
上記の方法で示したように、新しいフィルタはいつでもインストールされている１組のフィルタ２８２に追加され、アクティブフィルタリスト２８８または無効フィルタリスト２８６に含まれる。インストールされている競合するフィルタは、新しいフィルタの結果、アクティブリスト２８８から無効フィルタリストに変更することができる。
【０１８１】
次に図８を参照して、インストールされている１組のフィルタ２８２から１つのフィルタを削除する方法４２０について説明する。ステップ４２２において、特定のフィルタを削除するために、ユーザファイアウォールエンジン２６０が呼び出される。
【０１８２】
ステップ４２４において、方法４２０は、インストールされている１組のフィルタ２８２からフィルタを削除する。フィルタを削除する方法については、Ｄｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド３６６を参照して説明した。
【０１８３】
ステップ４２６において、方法４２０は、削除されたフィルタが無効フィルタリスト２８６にあるかどうかを判断する。フィルタが無効リスト２８６にある場合、方法は、全体的に示すように終了する。フィルタが無効フィルタリスト２８６にない場合、すなわち、アクティブフィルタリスト２８８にある場合、方法４２０は、任意選択で、無効フィルタリスト２８６において、オーバーライドされた、すなわち削除されたフィルタと競合する任意のフィルタを識別する。次いでオーバーライドされたフィルタは、ステップ４２８に示すように、無効フィルタリスト２８６から削除され、アクティブフィルタリスト２８８に追加される。このように、インストールされている１組のフィルタ２８２から優先度のより高い競合フィルタが削除されると、以前無効になったフィルタがアクティブになる。あるいは、この方法はステップ４２６および４２８を実行せず、オーバーライドされたフィルタは無効フィルタリスト内で維持される。
【０１８４】
図９は、第１のフィルタが第２のフィルタと競合するかどうかを識別するためにユーザファイアウォールエンジン２６０で使用する方法４５０を示す。この方法は、例えば、第１のフィルタがインストールされている１組のフィルタ２８２にインストールされる新しいフィルタであり、第２のフィルタがインストールされている１組のフィルタ２８２内の既存のフィルタであるときに使用される。
【０１８５】
ステップ４５２において、ユーザファイアウォールエンジン２６０は、競合の可能性のある（ｐｏｔｅｎｔｉａｌ  ａｔ−ｏｄｄｓ）１組のフィルタを識別する。競合の可能性のあるフィルタは、共通する、すなわち重複する１組のフィルタ条件、許可および阻止などの異なるアクション、および共通しないオーバーライド許可を備えるフィルタである。共通のオーバーライド許可は、優先度のより低いフィルタが異なるアクションを指定し、しかしそのアクションは、優先度のより高いフィルタでオーバーライド許可として識別される場合に存在する。フィルタ条件およびアクションなど１組の基準と一致するフィルタを識別する方法は、Ｅｎｕｍ  Ｌａｙｅｒメソッド３６８を参照して説明した。本発明の一実施形態では、ユーザファイアウォールエンジンは、同じレイヤーに新しいフィルタとして割り当てられたインストールされているフィルタ２８２に対して競合の可能性のあるフィルタのみを識別する。
【０１８６】
ステップ４５４において、ユーザファイアウォールエンジン２６０は、実際に競合する（ａｃｔｕａｌ  ａｔ−ｏｄｄｓ）フィルタが存在するかどうかを判断する。実際に競合するフィルタは、第１のフィルタの重み値３１４は第２のフィルタより高く、しかし優先度クラス値３１０は第２のフィルタより低い、またはその逆である競合の可能性のあるフィルタである。実際に競合するフィルタが存在しない場合、方法４５０は、ステップ４５６に示すように、競合は存在しないことを決定し、全体的に示すようにプロセスは終了する。実際に競合するフィルタが存在する場合、プロセス４５０は、ステップ４５８に示すように、競合が存在することを決定する。
【０１８７】
次に、図１０を参照して、新しいフィルタの重み値３１４を自動的に算出する方法４６８について説明する。重みは、フィルタの特異性によって決まる。フィルタの特異性は、フィルタ条件３０８によるものである。一般的な原則として、フィルタが一致する可能性のあるパケットがフィルタ条件３０８での決定で少なければ、それだけフィルタに与えられる重み値は高くなる。
【０１８８】
ステップ４７０に示すように、ユーザファイアウォールエンジン２６０は、新しいフィルタのレイヤーごとの重み定義を識別する。レイヤーごとの重み定義は、フィルタに割り当てられるレイヤーについてのフィルタ条件３０８に対する重み値フィールド３１４からのビット割り当てを含む。本発明の一実施形態では、重み値フィールドは３２ビットの数字である。したがって、レイヤーごとの重み定義は、３２ビットからの特定のビットをレイヤーのフィルタ条件に割り当てる。表Ｂは、トランスポートレイヤーのレイヤーごとの重み定義の例を示す。ビット３２が最上位ビットであり、０ビットが最下位ビットである。
【０１８９】
【表１９】
2004364305.tif 000021
【０１９０】
レイヤーごとの重み定義において、一部のフィルタ条件は他のフィルタ条件より上位であることに注意されたい。例えば、表Ｂのレイヤーごとの重み定義では、ソースＩＰアドレスフィルタ条件３０８は、最上位８ビットを占め、したがって重み値全体において他の任意のフィルタ条件３０８より上位である。宛先ＩＰアドレスフィルタ条件３０８は、次に上位の８ビットを占め、ソースＩＰアドレスフィルタ条件を除いて、他の任意のフィルタ条件より上位である。各レイヤーがそれ自体のレイヤーごとの重み定義を有しており、表Ｂのレイヤーごとの重み定義は、限定的なものではなく一例である。
【０１９１】
ステップ４７２において、スケールファクタは、フィルタ条件をスケール変更して割り当てられたビットの数に収めることができるように、レイヤーごとの重み定義におけるフィルタ条件ごとに決定される。任意の方法をこの目的に使用することができる。以下は、スケールファクタの決定に使用する方法の例である。
LogN(Max Filter Condition Range Size)=(Max Weight)
示したパラメータの特徴を以下に述べる。
【０１９２】
Ｎはスケールファクタである。
【０１９３】
Ｍａｘ  Ｆｉｌｔｅｒ  Ｃｏｎｄｉｔｉｏｎ  Ｒａｎｇｅ  Ｓｉｚｅはフィルタ条件の最大範囲である。例えば、ＩＰｖ４アドレスの場合、Ｍａｘ  Ｆｉｌｔｅｒ  Ｃｏｎｄｉｔｉｏｎ  Ｒａｎｇｅ  Ｓｉｚｅは、２３２、すなわち約４３億になる３２ビットである。ソースポートおよび宛先ポートの場合、Ｍａｘ  Ｆｉｌｔｅｒ  Ｃｏｎｄｉｔｉｏｎ  Ｒａｎｇｅ  Ｓｉｚｅは２１６、すなわち６５，５３６である。
【０１９４】
Ｍａｘ  Ｗｅｉｇｈｔは、重み値フィールド３１４におけるフィルタ条件に割り当てられたビット数に収まり得る最大値である。例えば、上記の例で、ソースＩＰアドレスおよび宛先ＩＰアドレスにはそれぞれ８ビットが割り当てられ、これによって最大重み値は２８−１すなわち２５５となる。プロトコルには２ビットが割り当てられ、これによって最大重み値は２２−１すなわち３になる。ソースポートおよび宛先ポートにはそれぞれ４ビットが割り当てられ、これによって最大重み値は２４−１すなわち１５になる。
【０１９５】
上記のスケール変更方法を使用して、ユーザファイアウォールエンジン２６０は、スケールファクタＮについて解く。具体例として、フィルタ条件がソースＩＰアドレスであり、重み値フィールド３１４においてそれに８ビットが割り当てられている場合、式ＬｏｇＮ（２３２）＝（２５５）でＮを解くと、Ｎ≒１．０９０５１となる。
【０１９６】
ステップ４７４において、それぞれのフィルタ条件は、スケールファクタを使用して重み値フィールド３１４における割り当てられたビット数に収まるようにスケール変更される。以下は、上記のスケール変更方法を使用してフィルタ条件がどのようにスケール変更されるかを示している。
Scaled Weight Value=(Max Weight)-LogN(Total Num Filter Condition Values)
【０１９７】
示した値の特徴を以下に述べる。
Ｓｃａｌｅｄ  Ｗｅｉｇｈｔ  Ｖａｌｕｅは重み値で割り当てられたビットに収まる重み値である。
【０１９８】
Ｍａｘ  Ｗｅｉｇｈｔは、重み値フィールド３１４においてフィルタ条件に割り当てられたビット数に収まり得る最大値である。
【０１９９】
Ｎは上述したようにスケールファクタである。
【０２００】
Ｔｏｔａｌ  Ｎｕｍ  Ｆｉｌｔｅｒ  Ｃｏｎｄｉｔｉｏｎ  Ｖａｌｕｅｓは、フィルタ条件で指定された値の数である。例えば、単一のＩＰアドレスがフィルタ条件として指定された場合、Ｔｏｔａｌ  Ｎｕｍ  Ｆｉｌｔｅｒ  Ｃｏｎｄｉｔｉｏｎ  Ｖａｌｕｅｓは１である。以下同様に、１０のＩＰアドレスの範囲が指定された場合、Ｔｏｔａｌ  Ｎｕｍ  Ｆｉｌｔｅｒ  Ｃｏｎｄｉｔｉｏｎｓは１０となる。
【０２０１】
具体例として、フィルタ条件は、１．２．３．０から１．２．３．２５５のソースＩＰ範囲を指定すると仮定する。１．２．３．０から１．２．３．２５５の範囲内のソースＩＰアドレスの数は２５６アドレスである。Ｓｃａｌｅｄ  Ｗｅｉｇｈｔ  Ｖａｌｕｅは２５５−Ｌｏｇ１．０９０５１（２５５）＝１９３に等しい。
【０２０２】
ステップ４７６において、Ｓｃａｌｅｄ  Ｗｅｉｇｈｔ  Ｖａｌｕｅは、重み値フィールドにおいてフィルタ条件に割り当てられたビットに収まる。この例で、値１９３は、２進数としてビットフィールド２５から３２に収まる。
【０２０３】
レイヤーごとの重み定義は、いくつかのビット、通常はいくつかの最下位ビットをタイブレーカ条件に割り当てることができる。タイブレーカ値を使用すると、各フィルタが一意の重み値３１４を確実に有するようになる。タイブレーカ値は、適切な方法を使用して決定することができる。例えば、タイブレーカ値は、インストールされた新しいフィルタごとに１の値ずつ増分される値でもよい。あるいは、同じランダムな数字を複数のフィルタに使用しないという条件で、ランダムな数字としてもよい。
【０２０４】
方法４６８は、レイヤーごとの重み定義で指定されているフィルタ条件ごとに完了し、それによって３２ビットの重み値フィールド３１４が得られる。あるいは、２つ以上のフィルタ条件を単一の重み空間に統合する。例えば、単一の重み空間は、２×（スケール変更されたソースＩＰアドレス）＋（スケール変更された宛先ＩＰアドレス）を含む。
【０２０５】
本発明の原理を適用できる多くの可能な実施形態を考慮して、図面との関連で本明細書に記載した実施形態は、例示的なものにすぎず、本発明の範囲を限定するものとみなされるべきではないことを理解されたい。例えば、ソフトウェアで示した実施形態の例の要素をハードウェアに、またその逆に実装でき、あるいは、実施形態の例を、本発明の意図から逸脱することなく、構成および詳細について変更できることを当分野の技術者であれば理解されよう。したがって、本明細書に記載した本発明は、頭記の特許請求の範囲、およびその均等物の範囲内に含まれ得るすべての実施形態を企図する。
【図面の簡単な説明】
【０２０６】
【図１】本発明が存在するコンピュータシステムの例を示す概略ブロック図である。
【図２】本発明の方法およびシステムを実施できるフレームワークを示す概略ブロック図である。
【図３】本発明とともに使用するフィルタの例を示すブロック図である。
【図４】本発明とともに使用するパケットコンテキストのデータ構造の例を示すブロック図である。
【図５】本発明とともに使用する１組のアプリケーションプログラミングインターフェースの例を示すブロック図である。
【図６】本発明とともに使用するアプリケーションプログラミングインターフェースの例を示すブロック図である。
【図７】本発明によるフィルタの追加に使用する方法の例を示すフロー図である。
【図８】本発明によるフィルタの削除に使用する方法の例を示すフロー図である。
【図９】本発明によるフィルタの競合の識別に使用する方法の例を示すフロー図である。
【図１０】フィルタの重み値の算出に使用する方法の例を示すフロー図である。
【符号の説明】
【０２０７】
１００  コンピューティングシステム環境
１１０  コンピュータ
１２０  処理ユニット
１２１  システムバス
１３０  システムメモリ
１３１  読取り専用メモリ（ＲＯＭ）
１３２  ランダムアクセスメモリ（ＲＡＭ）
１３３  基本入出力システム（ＢＩＯＳ）
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  インターフェース
１４１  ハードディスクドライブ
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  インターフェース
１５１  磁気ディスクドライブ
１５２  リムーバブル不揮発性磁気ディスク
１５５  光ディスクドライブ
１５６  リムーバブル不揮発性光ディスク
１６０  ユーザ入力インターフェース
１６１  ポインティング装置
１６２  キーボード
１７０  ネットワークインターフェースまたはアダプタ
１７１  ローカルエリアネットワーク（ＬＡＮ）
１７２  モデム
１７３  広域エリアネットワーク（ＷＡＮ）
１８０  リモートコンピュータ
１８１  メモリ記憶装置
１８５  リモートアプリケーションプログラム
１９０  ビデオインターフェース
１９１  モニタ
１９５  出力周辺インターフェース
１９６  プリンタ
１９７  スピーカー
２５０  ユーザモードプロセス
２５２  カーネルモードプロセス
２５４  ネットワークスタック
２５６  カーネルファイアウォールエンジン
２５８  コールアウト
２６０  ユーザファイアウォールエンジン
２６２  ポリシープロバイダ
２６４  ユーザレイヤー
２６６  フィルタエンジンＡＰＩ
２６８  データストリームレイヤー
２７０  トランスポートレイヤー
２７２  ネットワークレイヤー
２７４  リンクレイヤー
２７６  キーイングモジュールＡＰＩ
２８０  レイヤーＡＰＩ
２８２  インストールされている１組のフィルタ
２８４  コールアウトＡＰＩ
２８６  無効フィルタリスト
２８８  アクティブフィルタリスト
２８８  キーイングモジュールＡＰＩ
２９０  管理ＡＰＩ
２９４  フィルタモジュール
３００  フィルタ
３０２  フィルタＩＤ
３０４  フィルタプロパティ
３０６  アクション
３０７  アクション
３０８  １組のフィルタ条件
３１０  優先度クラス
３１０  フィルタ
３１２  オーバーライド許可
３１４  重み
３１６  フィルタ条件
３１８  型
３２０  データ
３２２  レイヤーＩＤ：フィールドＩＤ
３３０  データ構造
３３２  レイヤーＩＤ：フィールドＩＤ
３３４  値フィールド
３３６  エントリ
３３８  エントリ
３４０  エントリ
３５０  Ｃｌａｓｓｉｆｙメソッド
３５２  Ａｄｄ  Ｌａｙｅｒメソッド
３５４  Ｄｅｌｅｔｅ  Ｌａｙｅｒメソッド
３５６  Ｃｌａｓｓｉｆｙメソッド
３５８  Ｎｏｔｉｆｙメソッド
３６０  Ｒｅｇｉｓｔｅｒ  Ｃａｌｌｏｕｔメソッド
３６２  Ｄｅｒｅｇｉｓｔｅｒ  Ｃａｌｌｏｕｔメソッド
３６４  Ａｄｄ  Ｆｉｌｔｅｒメソッド
３６６  Ｄｅｌｅｔｅ  Ｆｉｌｔｅｒメソッド
３６８  Ｅｎｕｍ  Ｌａｙｅｒメソッド
３７０  ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅメソッド
３７２  Ｅｘｐｉｒｅ  Ｎｏｔｉｆｙメソッド
３７４  ＩＰＳｅｃ  ＳＡ  Ａｃｑｕｉｒｅ  Ｃｏｍｐｌｅｔｅメソッド
３７６  Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｒｅｇｉｓｔｅｒメソッド
３７８  Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｄｅｒｅｇｉｓｔｅｒメソッド
３８０  ＩＰＳｅｃ  Ｉｎｂｏｕｎｄ  Ｇｅｔ  ＳＰＩメソッド
３８２  Ａｄｄ  Ｉｎｂｏｕｎｄ  ＳＡメソッド
３８４  Ａｄｄ  Ｏｕｔｂｏｕｎｄ  ＳＡメソッド
３８６  Ｉｎｂｏｕｎｄ  ＳＡ  Ｅｘｐｉｒｅメソッド
３８８  Ｋｅｙｉｎｇ  Ｍｏｄｕｌｅ  Ｉｎｉｔｉａｔｅメソッド
【図１】
2004364305.tif 000022
【図２】
2004364305.tif 000023
【図３】
2004364305.tif 000024
【図４】
2004364305.tif 000025
【図５】
2004364305.tif 000026
【図６】
2004364305.tif 000027
【図７】
2004364305.tif 000028
【図８】
2004364305.tif 000029
【図９】
2004364305.tif 000030
【図１０】
2004364305.tif 000031