| はじめに | |
| 自作のコンポーネントを 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 によってフィルタ処理されていない接続は、パフォーマンスに影響を与えることなくオフロードできます。
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 パケット フィルタリングを実行したい。 |
図 1 は、サード パーティのアプリケーション、サービス、およびドライバに対する WFP のアーキテクチャおよびその拡張性を示したものです。

図 1. サード パーティのコンポーネントに対する WFP のアーキテクチャおよびその拡張性
WFP アーキテクチャは、下記の各コンポーネントで構成されます。
| • | Win32 API |
| • | ベース フィルタ エンジン |
| • | カーネル モード フィルタ エンジン |
| • | コールアウト ドライバ |
サード パーティのソフトウェア メーカーは、下記の方法で WFP を使用して、アプリケーションやサービスを構築できます。
| • | 一部のアプリケーションとサービスは、シンプルなパケット フィルタリングのみを使用します。これらのアプリケーションとサービスの場合、必要なのは、WFP Win32 API を使用して新しい TCP/IP スタックの適切なレイヤでフィルタを設定する、ユーザー モード アプリケーションまたはサービスだけです。カーネル モードのコールアウト ドライバは不要です。 |
| • | パケットの詳細な検査または変更を行う必要のあるアプリケーションとサービスの場合、1 つ以上のコールアウト ドライバ、あるいはユーザー モード アプリケーションまたはサービスを作成する必要があります。コールアウト ドライバ、またはユーザー モード アプリケーションやサービスは、コールアウト ドライバによる詳細な検査に応じて、WFP Win32 API を使用し、TCP/IP スタック内の適切なレイヤにフィルタを設定します。着信または発信トラフィックがこれらのフィルタに一致する場合、カーネル モード フィルタ エンジンは、パケットをコールアウト ドライバに渡します。コールアウト ドライバは、検査または変更を実行してから、パケットを返します。ユーザー モード アプリケーションまたはサービスが不要な場合もあります。 |
表 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