VPNトラフィックフィルターか IPsec 規則か: Windows がポートを適用する場所
ルートが見るのは宛先であり、サービスではない。VPN プロファイルのアクセスフィルターが必要か、フローに保護を要求する IPsec 規則が必要かを判断する。
Windows VPN のひとりのユーザーが、あるサーバーの HTTPS には到達し、同じサーバーの SMB には到達しないようにする必要があるが、ルートではそれを表現できない。どちらの要求も同じ宛先アドレスを持つため、トラフィックをトンネルへ送るプレフィックスは、除外したかったフローも一緒に運ぶ。両者を分けるには、宛先より細かいものを見る規則が必要になる。
ふたつの異なる意図は、ふたつの異なる Windows の仕組みで構築する。混ぜると、意図の半分しか適用しないのに完全に見えるポリシーができる。
ルートはひとつのアドレス上のふたつのサービスを分離できない
VPN 本来のルーティングはプレフィックス単位であり、どの宛先がトンネルを通り、どれが外に残るかを決める。ひとつのサブネットを内側に、別のサブネットを外側に保つには適した道具であり、構造上ポートには関知しない。VPN プロファイルのトラフィックフィルターは第二の次元を加え、プロトコル、リモートアドレス、そして リモートポート を、そのインターフェイスを通過できるものに照合する。IPsec 規則は第三の場所で働き、どのフローが保護を必要とし、誰と認証するかを表す。三つは異なる問いに答えるもので、どれも他を代替しない。
まず意図した文を書く。「HTTPS だけを許可する」はアクセスの文であり、「HTTPS に IPsec を要求する」は保護の文であり、両者は異なる構成に導く。
アクセス制限と保護要件は分かれる
アクセス制限は、インターフェイスを使えるものを定め、集合を許可して他をすべて拒否することで適用される。保護要件は、どのフローを暗号化して認証する必要があるかを定め、それに合うセキュリティアソシエーションを交渉することで適用される。前者は一覧にないものがあるとブロックされた要求を生み、後者は必要な保護を運ぶか確立しないかのどちらかの接続を生む。一方を他方として扱うと、ポリシーは何もブロックしないか何も保護しない状態に終わる。
実務上の帰結として、フィルター一覧は閉じた集合である。プロファイルに一覧が存在すれば、そのインターフェイス上でどの項目にも一致しないトラフィックは拒否されるため、DNS、認証のやり取り、アプリケーションが必要とする依存関係にはそれぞれ項目が要る。拒否を黙らせるために広い規則をひとつ足すと、インターフェイス全体が再び開き、制限が静かに取り消される。一覧は要件が許す範囲で短く、アプリケーションが求める範囲で完全であるべきだ。
フィルター一覧を完全な集合として構築する
VPNv2 プロファイルはルート一覧とは別にフィルター一覧を持ち、その項目はコマンドではなくプロファイルのプロパティである。HTTPS の例では、項目にプロトコル 6、リモートアドレス、リモートポートが必要で、使用するプロファイルの種類に応じて管理チャネルまたは ProfileXML で配備する。Microsoft の VPNv2 トラフィックフィルターの定義 は、ひとつの規則内の条件は組み合わされ、別々の規則識別子は代替として働くと述べている。
TrafficFilterList/0/Protocol = 6
TrafficFilterList/0/RemoteAddressRanges = 10.60.4.20/32
TrafficFilterList/0/RemotePortRanges = 443
RouteList/0/Address = 10.60.4.0/24
その一覧のポート値は遠端のサービス側ポートを表し、ローカルポートは制約しないままにしておくべきで、そうしないとクライアントの一時的な送信元ポートが除外される。これを逆にすると、何にも一致しない規則と、半日を要する謎が残る。
ルートとフィルターを ふたつの別々の決定として書く。ルートはこのサーバーにトンネル経由で到達することを決め、フィルターはその経路を使えるサービスを決める。
ふたつの要求で両方の結果を示す
許可されるフローと拒否されるフローを別々に試し、欠けたページではなく失敗を読む。すぐに返る拒否はポリシーの判断であり、タイムアウトはルートの欠落か待ち受けていないサービスの可能性が高い。以下のコマンドは両方の要求を実行し、有効な規則を表示する。
Test-NetConnection 10.60.4.20 -Port 443
Test-NetConnection 10.60.4.20 -Port 445
Get-NetIPsecRule -DisplayName *Vpn*
Get-VpnConnection -Name Corp
SMB テストで即座に拒否され、HTTPS テストが成功するのが、フィルターが生むはずだった結果である。両方のポートで拒否されるなら一覧にセッションが必要とする何かが欠けており、両方でタイムアウトするならフィルターではなくルーティングを指す。保護されたフローが IPsec の出力で セキュリティアソシエーションがない と示すなら、接続が成功しても保護要件は満たされていない。四つの出力をまとめて読むべきで、それぞれ単独では別の筋書きを支える。
有効なプロファイル、規則の集合、相手側のポリシーを結果とともに記録する。古い Windows クライアントに関する過去の互換性の記述は、今日の管理プロファイルの機能が特定のゲートウェイで何を支えるかを示さない。バージョン固有の挙動は前提ではなく記録に属する。