フィルターアービトレーション
フィルターアービトレーションは、ネットワーク トラフィックのフィルター処理の決定を行うときにフィルターが相互に対話する方法を決定するために使用される、Windows フィルタリング プラットフォーム (WFP) に組み込まれているロジックです。
フィルターアービトレーションの動作
次の動作は、フィルターアービトレーション システムを特徴付けます。
- すべてのトラフィックを検査できます。 特定のレイヤーでフィルターをバイパスできるトラフィックはありません。
- 優先度の高いフィルターで許可されている場合でも、 Veto 経由で吹き出しフィルターによってトラフィックをブロックできます。
- 複数のプロバイダーが同じレイヤーでトラフィックを検査できます。 たとえば、ファイアウォールの後に侵入検出システム (IDS) フィルターが続く場合や、IPsec の後にサービス品質 (QoS) フィルターが続く場合は、すべて同じレイヤーでトラフィックを調べることができます。
モデルのフィルター処理
各フィルター レイヤーは、優先順位 (重みとも呼ばれます) で並べ替えられたサブレイヤーに分割されます。 ネットワーク トラフィックは、最も高い優先度から最も低い優先度までのサブレイヤーを通過します。 サブレイヤーは、WFP API を使用して開発者によって作成および管理されます。
各サブレイヤー内では、フィルターは重み順に並べ替えられます。 ネットワーク トラフィックは、最も高い重みから最も低い重みまでのフィルターを照合するように示されます。
フィルターアービトレーション アルゴリズムは、レイヤー内のすべてのサブレイヤーに適用され、最終的なフィルター処理の決定は、すべてのサブレイヤーが評価された後に行われます。 これにより、複数の一致機能が提供されます。
サブレイヤー内では、フィルターアービトレーションは次のように実行されます。
- 一致するフィルターの一覧を、重み付け順に高い順に計算します。
- "許可" または "ブロック" が返されるまで (フィルターは "Continue" を返すこともできます)、またはリストが使い果たされるまで、一致するフィルターを順番に評価します。
- 残りのフィルターをスキップし、最後に評価されたフィルターからアクションを返します。
レイヤー内では、フィルターアービトレーションは次のように実行されます。
- すべてのサブレイヤーで、優先順位が最も高い順にフィルターアービトレーションを実行します。
- 優先度の高いサブレイヤーがトラフィックをブロックすることにした場合でも、すべてのサブレイヤーを評価します。
- 次のセクションで説明するポリシー 規則に基づいて、結果のアクションを返します。
次の図は、サブレイヤー構成のサンプルを示しています。 外側のボックスはレイヤーを表します。 内側のボックスは、フィルターを含むサブレイヤーを表します。 フィルター内のワイルドカード (*) は、すべてのトラフィックがフィルターと一致します。
フィルターをバイパスする唯一の方法は、高い重みフィルターで同じサブレイヤー内のトラフィックが許可またはブロックされている場合です。 逆に、フィルターでレイヤー内のすべてのトラフィックが常に表示されるようにする方法の 1 つは、すべてのトラフィックに一致する 1 つのフィルターを含むサブレイヤーを追加することです。
構成可能なオーバーライド ポリシー
以下で説明する規則は、レイヤー内の仲裁決定を管理します。 これらのルールは、フィルター エンジンによって使用され、どのサブレイヤー アクションがネットワーク トラフィックに適用されているかを決定します。
基本方針は以下のとおりです。
- アクションは、優先度が最も高いものから最も優先度が低いサブレイヤーの優先順位で評価されます。
- "ブロック" は "許可" をオーバーライドします。
- "Block" は最終版 (オーバーライドできません) であり、評価を停止します。 パケットは破棄されます。
基本ポリシーでは、ファイアウォールによってオーバーライドされない例外のシナリオはサポートされていません。 この種類のシナリオの一般的な例は次のとおりです。
- サードパーティのファイアウォールが存在する場合でも、リモート管理ポートを開く必要があります。
- 機能するためにポートを開く必要があるコンポーネント (ユニバーサル プラグ アンド プレイ UPnP など)。 管理者がコンポーネントを明示的に有効にした場合、ファイアウォールはトラフィックをサイレント にブロックしないようにする必要があります。
上記のシナリオをサポートするために、フィルター処理の決定は、アクションオーバーライドアクセス許可を管理することで、別のフィルタリング決定よりもオーバーライドを困難にする必要があります。 このアクセス許可は 、FWPS_RIGHT_ACTION_WRITE フラグとして実装され、フィルターごとに設定されます。
評価アルゴリズムでは、現在のアクション ("許可" または "ブロック" ) が FWPS_RIGHT_ACTION_WRITE フラグと共に保持されます。 フラグは、優先度の低いサブレイヤーでアクションをオーバーライドできるかどうかを制御します。 FWPS_CLASSIFY_OUT0構造体でFWPS_RIGHT_ACTION_WRITE フラグを設定またはリセットすることで、プロバイダーはアクションをオーバーライドまたはオーバーライドできない方法を制御します。 フラグが設定されている場合は、アクションをオーバーライドできることを示します。 フラグがない場合は、アクションをオーバーライドできません。
アクション | オーバーライドを許可する (FWPS_RIGHT_ACTION_WRITEが設定されている) | 説明 |
---|---|---|
許可 | はい | トラフィックは、別のサブレイヤーでブロックできます。 これはソフト 許可と呼ばれます。 |
許可 | いいえ | トラフィックは、吹き出し Veto によってのみ、別のサブレイヤーでブロックできます。 これはハード 許可と呼ばれます。 |
ブロック | はい | トラフィックは、別のサブレイヤーで許可できます。 これはソフト ブロックと呼ばれます。 |
ブロック | いいえ | 別のサブレイヤーでトラフィックを許可することはできません。 これはハード ブロックと呼ばれます。 |
フィルター アクションは、構造体FWPM_ACTION0の型メンバーを FWP_ACTION_BLOCK または FWP_ACTION_PERMIT に設定することで設定できます。 アクションの種類と共に、フィルターはフラグ FWPM_FILTER_FLAG_CLEAR_ACTION_RIGHTも公開します。 このフラグをクリアすると、後で説明するようにハード許可が Veto によってオーバーライドされる場合を除き、アクションの種類はハードであり、オーバーライドできません。それ以外の場合は、優先度の高いアクションでオーバーライドできるソフトです。
次の表に、フィルターアクションと吹き出しアクションの既定の動作を示します。
アクション | 既定の動作 |
---|---|
フィルター許可 | ソフト 許可 |
吹き出しの許可 | ソフト 許可 |
フィルター ブロック | ハード ブロック |
吹き出しブロック | ソフト ブロック |
Veto は、フィルターを呼び出す前にFWPS_RIGHT_ACTION_WRITE フラグがリセットされたときにフィルターによって返される "ブロック" アクションです。 拒否権は、ハード許可で許可されたトラフィックをブロックします。
Veto が発行されると、構成の競合を示します。 競合を軽減するために、次のアクションが実行されます。
トラフィックがブロックされます。
監査イベントが生成されます。
通知が生成されます。
注意
通知は、サブスクライブしているすべてのエンティティによって受信されます。 これには通常、ファイアウォール (誤った構成を検出するために)、またはアプリケーション (特定のフィルターがオーバーライドされているかどうかを検出するために) が含まれます。
注意
"ハード許可" フィルターがオーバーライドされたときにインスタンス化される必須ユーザー インターフェイス (UI) はありません。 オーバーライドの通知は、それらを受け取るために登録された任意のプロバイダーに送信されます。これにより、ファイアウォール、または "許可" フィルターを作成したアプリケーションは、ユーザーアクションを要求する UI を表示できます。 これらのオーバーライド イベントにプラットフォーム UI 通知を設定しても価値はありません。これは、警告なしでブロックしたくないファイアウォール ISV は、WFP の別の場所に登録することで行うことができるため、または (あまり推奨されない) コールアウト ドライバーですべてのロジックを処理するためです。 ユーザーにプロンプトを表示することが良い考えである ISV は、ユーザー エクスペリエンスを所有し、独自の UI を作成することをお勧めします。
上記の軽減動作により、"ハード許可" フィルターが "ブロック" フィルターによって自動的にオーバーライドされないことが保証され、リモート管理ポートがファイアウォールによってブロックされることが許可されないシナリオについて説明します。 "ハード許可" フィルターをサイレント モードでオーバーライドするには、ファイアウォールのフィルターを優先度の高いサブレイヤー内に追加する必要があります。
注意
クロスレイヤーの仲裁がないため、"ハード許可" で許可されたトラフィックは、別のレイヤーでブロックされる可能性があります。 必要に応じて、各レイヤーでトラフィックが許可されるようにするのは、ポリシー作成者の責任です。
ポートを開くように要求するユーザー アプリケーションは、優先順位の低いサブレイヤーにオーバーライド可能なフィルターを追加します。 ファイアウォールは、フィルターにサブスクライブして通知イベントを追加し、ユーザー (またはポリシー) の検証後に一致するフィルターを追加できます。