Windows フィルタリング プラットフォーム

最終更新日: 2008年5月15日
トピック
はじめにはじめに

自作のコンポーネントを WFP に変換したほうが良いのはなぜですか? 自作のコンポーネントを WFP に変換したほうが良いのはなぜですか?

WFP のアーキテクチャ WFP のアーキテクチャ

WFP を使用するようコンポーネントを変換する WFP を使用するようコンポーネントを変換する
まとめまとめ
リソースリソース

この情報は、下記のオペレーティング システムに適用されます。
Windows Vista
Windows Server 2008

はじめに

Windows フィルタリング プラットフォーム (WFP) は、Windows Vista および Windows Server 2008 の新しいアーキテクチャです。このアーキテクチャにより、ソフトウェア メーカーは、TCP/IP パケットのフィルタ処理や変更、接続の監視や承認、インターネット プロトコル セキュリティ (IPsec) で保護されたトラフィックのフィルタ処理、およびリモート プロシージャ コール (RPC) のフィルタ処理を行うことができます。TCP/IP パケットのフィルタ処理および変更により、TCP/IP パケット処理パスに対し、従来行えなかったアクセスが可能になります。このパスでは、発信パケットと着信パケットを、追加の処理が行われる前に検査または変更できます。さまざまなレイヤで TCP/IP 処理パスにアクセスすることにより、ファイアウォール、ウイルス対策ソフトウェア、診断ソフトウェア、および他の種類のアプリケーションとサービスを、より容易に作成できます。

WFP は API を提供しており、TCP/IP プロトコル スタックの複数のレイヤで生じるフィルタリング決定に関与できます。また、WFP は、アプリケーションによる Windows ソケット API の使用に基づく認証された通信や動的ファイアウォール構成など、次世代ファイアウォール機能に対する統合とサポートの提供も行います。この機能は、アプリケーション ベースのポリシーと呼ばれる場合もあります。

WFP はファイアウォールではありません。WFP は、システム サービスおよびユーザー モードとカーネル モードの API のセットです。WFP を使用すると、ファイアウォールなどの接続監視ソフトウェアやパケット処理ソフトウェアを開発できます。たとえば、Windows Vista と Windows Server 2008 の Windows ファイアウォールは、WFP を使用しています。

Windows Vista または Windows Server 2008 用の新しいソフトウェアを構築する場合、WFP を使用する利点は、より高いパフォーマンス、よりシンプルなプログラミング、および組み込みの診断サポートです。さらに、Internet Protocol version 4 (IPv4) と Internet Protocol version 6 (IPv6) の両方のトラフィックで、組み込みのフィルタリング エンジンを使用できます。また、WFP は、正しく構成されたフィルタをバイパスできないような、強固なセキュリティ フレームワークも提供します。

注: パフォーマンスを上げるため、Windows Vista および Windows Server 2008 の TCP/IP は、タスクまたは接続を、適切な TCP/IP オフロード機能が存在するネットワーク アダプタにオフロードできます。WFP によってフィルタ処理されていない接続は、パフォーマンスに影響を与えることなくオフロードできます。

ページのトップへページのトップへ

自作のコンポーネントを WFP に変換したほうが良いのはなぜですか?

Windows Vista には、TCP/IP プロトコル スタックの新しいアーキテクチャが含まれています。このアーキテクチャは、IPv4 と IPv6 の両方を統合した実装で、デュアル IP レイヤ アーキテクチャと呼ばれています。Windows XP と Windows Server 2003 において、パケット処理の TCP/IP プロトコル スタックに直接アクセスする方法は、大幅に変化しました。これらの方法は、ファイアウォール フック、フィルタ フック、Transport Driver Interface (TDI) フィルタ ドライバといったカスタム ソリューションを伴う他の方法などです。Windows Vista と Windows Server 2008 で正しく動作し、同等の機能を実行するには、一般にアプリケーション、サービス、またはドライバを変更する必要があります。

注: Windows Vista および Windows Server 2008 は、TDI フィルタ ドライバや Windows ソケット複数層サービス プロバイダ (LSP) を引き続きサポートします。

既存のコンポーネントを変更するには、このペーパーで後述する「WFP を使用するようコンポーネントを変換する」を参照してください。一般に、TCP/IP パケット処理パスにアクセスするため使用している現在の方法を、Windows Vista と Windows Server 2008 用の WFP を使用する同等な方法にマップする必要があります。新しい TCP/IP プロトコル スタックおよび WFP アーキテクチャ用にソフトウェアを改訂すると、TCP/IP パケット処理パスに依存するコンポーネントに対し、追加の機能を提供できます。これらの機能は、Windows Vista や Windows Server 2008 より前の Windows のバージョンには存在しない可能性があります。

WFP を使用する利点は、下記のものなどです。

TCP/IP パケット処理パスに対し、細かいレベルでアクセスを制御できます。この制御は、Windows XP と Windows Server 2003 でサポートされている、TCP/IP 処理パスに対する制限付きアクセスしか提供していないフィルタやファイアウォール フックの方法とは異なります。

WFP はフィルタリング エンジンを既に提供しているので、独自のフィルタリング ロジックやエンジンを構築する必要はありません。WFP フィルタリング エンジンにアクセスするだけでよく、自分のコンポーネントが提供する付加価値の構築に集中できます。

WFP を使用すれば、将来の Service Pack リリースにおいて、独自のコンポーネントに影響が及ぶ可能性ははるかに少なくなります。

フィルタリング ロジックや、TCP/IP プロトコルのさまざまなレイヤへのフックが既に存在するので、ファイアウォールまたはパケット フィルタリングの付加価値ソリューションの実装は容易です。

コンポーネントでのフィルタリングと処理の必要性によっては、カーネル モードからユーザー モードにコンポーネントを移行できる場合があります。これにより、コンポーネントの開発が容易になります。さらに、ユーザー モードでは、コンポーネントのクラッシュが Windows システム全体に影響を及ぼすことはありません。

すべてのアプリケーションとサービスが同じフィルタリング エンジンを使用するため、同じ機能を実行する他のアプリケーションやサービスが存在するかどうか判断するのが容易になります。

すべての WFP ベースのフィルタリング ソリューションは WFP フィルタの判別ルールに従うため、他の WFP ベースのフィルタリング ソリューションと共存できるフィルタリング ソリューションを開発するのは容易です。

下記のような状況では、WFP の使用をお勧めします。

自分のコンポーネントは、TCP/IP プロトコル スタックの特定のレイヤで、TCP/IP トラフィックを調べる必要がある。

自分のコンポーネントは、IPsec で保護されたトラフィックで動作する。

IPsec の解読後にパケット処理を実行したい。

IPv6 フィルタリング エンジンを自分で構築するより、組み込みの IPv6 フィルタリング エンジンを使用して、IPv6 パケット フィルタリングを実行したい。

ページのトップへページのトップへ

WFP のアーキテクチャ

図 1 は、サード パーティのアプリケーション、サービス、およびドライバに対する WFP のアーキテクチャおよびその拡張性を示したものです。

図 1
図 1. サード パーティのコンポーネントに対する WFP のアーキテクチャおよびその拡張性

WFP アーキテクチャは、下記の各コンポーネントで構成されます。

Win32 API

Win32 API には、WFP フィルタリング API が含まれています。パケットのフィルタリングや処理を実行するサード パーティのファイアウォールなどのアプリケーションは、WFP フィルタリング API を使用して、ベース フィルタ エンジン内にフィルタを作成します。これらのフィルタは、カーネル モード フィルタ エンジン内の各レイヤで、定義済みフィルタリング条件のセットを使用できます。IPsec ポリシー エージェント サービスや Windows ファイアウォールは、Windows Vista と Windows Server 2008 に含まれている WFP アプリケーションの例です。詳細については、MSDN ライブラリで「Windows Filtering Platform」を参照してください。

ベース フィルタ エンジン

このユーザー モード サービスは、カーネル モード フィルタ エンジンにフィルタを追加することにより、ユーザー モード フィルタリング アプリケーションが行うフィルタ要求を実装します。

カーネル モード フィルタ エンジン

このカーネル モード コンポーネントは、ベース フィルタ エンジンを通じて、フィルタリング アプリケーションが作成するフィルタを格納し、フィルタリング レイヤを通じて、TCP/IP スタックやインストール済みのコールアウト ドライバのセットと相互作用します。パケットが新しい TCP/IP スタックを通じて処理される際、各レイヤは、カーネル モード フィルタ エンジンと通信します。カーネル モード フィルタ エンジンは、構成済みフィルタをチェックして、パケットを許可または拒否すべきどうか、あるいはインストール済みコールアウト ドライバに渡してパケットを検査および変更すべきかどうか決定します。

コールアウト ドライバ

コールアウト ドライバは、単純なパケット フィルタリング (定義済み WFP フィルタリング条件に対してパケットをチェックし、パケットを許可または拒否すべきかどうか決定する処理) では不十分なときに使用されます。パケット コンテンツの詳細な検査やデータの変更を行うには、コールアウト ドライバが必要です。詳細な検査では、定義済みのフィルタリング条件より細かいレベルで、トラフィックをチェックします。詳細な検査の一例は、アンチウイルス ソフトウェアです。このソフトウェアは、アプリケーション レイヤのデータを検査して、入力データ ストリームにウイルスやワームが存在していないことを保証する必要があります。データ変更の例は、ネットワーク アドレス変換 (NAT) です。NAT では、ルーターは、パケットの転送時に、IPv4 パケットの各フィールドを変更します。Windows Vista と Windows Server 2008 には、IPsec 処理およびインターネット接続の共有用のコールアウト ドライバが含まれています。コールアウト ドライバも、WFP カーネル クライアントの使用により、ベース フィルタ エンジン内にフィルタを作成できます。

サード パーティのソフトウェア メーカーは、下記の方法で WFP を使用して、アプリケーションやサービスを構築できます。

一部のアプリケーションとサービスは、シンプルなパケット フィルタリングのみを使用します。これらのアプリケーションとサービスの場合、必要なのは、WFP Win32 API を使用して新しい TCP/IP スタックの適切なレイヤでフィルタを設定する、ユーザー モード アプリケーションまたはサービスだけです。カーネル モードのコールアウト ドライバは不要です。

パケットの詳細な検査または変更を行う必要のあるアプリケーションとサービスの場合、1 つ以上のコールアウト ドライバ、あるいはユーザー モード アプリケーションまたはサービスを作成する必要があります。コールアウト ドライバ、またはユーザー モード アプリケーションやサービスは、コールアウト ドライバによる詳細な検査に応じて、WFP Win32 API を使用し、TCP/IP スタック内の適切なレイヤにフィルタを設定します。着信または発信トラフィックがこれらのフィルタに一致する場合、カーネル モード フィルタ エンジンは、パケットをコールアウト ドライバに渡します。コールアウト ドライバは、検査または変更を実行してから、パケットを返します。ユーザー モード アプリケーションまたはサービスが不要な場合もあります。

ページのトップへページのトップへ

WFP を使用するようコンポーネントを変換する

表 1 は、Windows XP と Windows Server 2003 でパケット処理を行う既存の方法と、WFP を使用するために Windows Vista と Windows Server 2008 でそれらをどのように変更する必要があるかについて、一覧にまとめたものです。

表 1. 既存のパケット処理方法に対する変更

Windows XP と Windows Server 2003 の既存の方法Windows Vista と Windows Server 2008 の新しい方法

シンプルなパケット フィルタリング用のファイアウォール フックまたはフィルタ フック ドライバ。

WFP Win32 API を使用するユーザー モード アプリケーションまたはサービス。

詳細なパケット検査や変更用のファイアウォール フックまたはフィルタ フック ドライバ。

IP レイヤ、トランスポート レイヤ、または Application Layer Enforcement (ALE) レイヤの、コールアウト ドライバ、および WFP Win32 API を使用するオプションのユーザー モード アプリケーションまたはサービス。

シンプルなパケット フィルタリング用の Transport Driver Interface (TDI) フィルタ ドライバ。

WFP Win32 API を使用するユーザー モード アプリケーションまたはサービス。

パケットやストリームの詳細な検査、または変更用の TDI フィルタ ドライバ。

ALE コールアウト ドライバ、および WFP Win32 API を使用するオプションのユーザー モード アプリケーションまたはサービス。

TCP 接続、またはユーザー データグラム プロトコル (UDP) トラフィック管理用の TDI フィルタ ドライバ。

ストリーム/データグラム データ レイヤのコールアウト ドライバ、および WFP Win32 API を使用するオプションのユーザー モード アプリケーションまたはサービス。プロキシ、複製、接続の複製など、詳細な TCP 接続管理を実行する TDI フィルタ ドライバの場合、引き続き TDI フィルタ ドライバを使用する必要があります。

シンプルなパケット フィルタリング用の Windows ソケット LSP。

WFP API を使用するユーザー モード アプリケーションまたはサービス。

詳細なパケット検査または変更用の Windows ソケット LSP。

ALE、トランスポート、またはストリーム/データグラム データ レイヤの、コールアウト ドライバ、および WFP Win32 API を使用するオプションのユーザー モード アプリケーションまたはサービス。

シンプルなパケット フィルタリング用の Network Device Interface Specification (NDIS) 中間ドライバ。

WFP API を使用するユーザー モード アプリケーションまたはサービス。

TCP 接続または UDP トラフィック管理用の NDIS 中間ドライバ。

ALE またはストリーム レイヤのコールアウト ドライバ、および WFP Win32 API を使用するオプションのユーザー モード アプリケーションまたはサービス。

メディア アクセス制御 (MAC) レベルのフィルタリングを実行する、NDIS ライトウェイト フィルタ ドライバ。

NDIS ライトウェイト フィルタ ドライバの継続使用 (WFP は MAC レベルのフィルタリングをサポートしません)。

注: TDI は、Windows Vista と Windows Server 2008 でサポートされています。ただし、Microsoft は、将来のバージョンの Windows で TDI を削除することを検討中です。

ページのトップへページのトップへ

まとめ

Windows Vista と Windows Server 2008 の新しい WFP は、TCP/IP パケットのフィルタリングと変更、接続監視または承認、IPsec フィルタリング、および RPC フィルタリングを有効にします。一般に、Windows Vista と Windows Server 2008 では、Windows XP と Windows Server 2003 の TCP/IP フィルタリングまたは接続監視コンポーネントを変換して、WFP ユーザー モード アプリケーションまたはサービス、WFP カーネル モード コールアウト ドライバ、またはその両方を使用する必要があります。

ページのトップへページのトップへ

リソース

WFP ユーザー モード アプリケーションまたはサービス:
   Windows フィルタリング プラットフォーム - Win32 API
      http://msdn.microsoft.com/en-us/library/aa366510.aspx

WFP カーネル モード コールアウト ドライバ:
   Windows フィルタリング プラットフォーム コールアウト ドライバ - Windows Driver Kit
      http://msdn.microsoft.com/en-us/library/ms796374.aspx

その他:
   WFP に関する記事 (Windows Core Networking Blog)
      http://blogs.msdn.com/wndp/archive/tags/WFP/default.aspx

   WFP Discussion Forum
      http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=1637&SiteID=1

   WFP サンプル プロジェクト
      http://blogs.msdn.com/onoj/archive/2007/05/09/windows-filtering-platform-sample.aspx


ページのトップへページのトップへ