Contents

リモート アクセスに AD で KDC (Kerberos) プロキシを使用する

Contents

<本文>/images/group-policy-option-specify-kdc-proxy-servers-for.png

Kerberos Key Distribution Center (KDC) プロキシ サービスは安全なブリッジとして機能し、リモート クライアントが Active Directory ドメイン コントローラーに直接アクセスできない場合に Kerberos 認証を使用できるようにします。 KDC プロキシは、外部ユーザー (つまり、インターネットから接続しているユーザー) またはワークグループ ユーザーが関与する Kerberos 認証シナリオに使用されます。 KDC プロキシ サービスは、もともと DirectAccess、リモート デスクトップ ゲートウェイ、Azure 仮想デスクトップ (AVD)、および SMB over QUIC ファイル アクセス用に設計されました。ただし、Microsoft が計画している NTLM v1 および v2 認証プロトコルの廃止により、追加のリモート アクセス サービスに KDC プロキシを使用することが必要になる場合があります。

クライアントと Active Directory (AD) ドメイン コントローラー上の KDC サービスの間で Kerberos 認証を実行するには、次のポートが開いている必要があります。

  • UDP/TCP 88 – Kerberos 認証、チケット認可チケット (TGT) の取得

  • UDP/TCP 464 – Kerberos を介したユーザーのパスワードの変更

外部ユーザーのドメイン コントローラーに対してこれらのポートを開くことは安全ではないため、代わりにユーザー接続ポイントで KDC プロキシ サービスを作成できます。 KDC プロキシは、ドメインに参加しているサーバー上で実行され、外部クライアントからの HTTPS (TCP/443) ポートで Kerberos 要求をリッスンし、それらを DC に安全にトンネルします。

次の単純なシナリオを考えてみましょう。リモート デスクトップ ゲートウェイ サーバーが内部境界内に展開され、外部ユーザーがそれに接続します。 Kerberos 専用モードで動作している RD ゲートウェイ ホストで NTLM 認証が無効になっているため、非ドメイン マシン上の外部ユーザーは接続できません。これにより、RDP エラーが発生します。


An authentication error has occurred.The function requested is not supportedRemote computer: xxxxThis could be due to CredSSP encryption oracle remediation.

/images/rdp-connection-error-when-ntlm-disabled-the-funct.png

この状況では、クライアントは Kerberos 経由で DC 上で認証できないため、ホスト上で無効になっている NTLM へのフォールバックが試行されます。これにより、ユーザーはリモートでログインできなくなります。

外部クライアントが Kerberos 経由でこの RDP ホストで認証できるようにするために、KDC プロキシ サービス (KPSSVC) が RDGW ホストに展開されます。

KDC プロキシ サービス ホストには、トラフィックの暗号化とサーバー認証のための証明書がインストールされている必要があります。証明書の拡張キー使用法 (EKU) には、サーバー認証、クライアント認証、および Kerberos 認証が含まれている必要があります。証明書のサブジェクト代替名 (「SAN」) には、クライアントが接続に使用する KDC プロキシの完全修飾ドメイン名 (FQDN) が含まれている必要があります。このような証明書は、内部 CA または商用 CA によって発行できます (テスト展開および非運用展開の場合は、自己署名証明書を使用できます)。

証明書はサーバーの証明書ストアに追加する必要があります。証明書の拇印をコピーします。

Get-ChildItem-Path Cert:\LocalMachine\My | Where-Object { $\_.Subject のような "*CN=rds01.wshub.com*"} | Select-Object-ExpandProperty サムプリント

/images/powershell-copy-cert-localmachine-my-certificat.png

自己署名証明書または内部 CA からの証明書を使用する場合は、クライアントが信頼できるように、証明書の公開キーをクライアントの Windows デバイスにインストールします。

次に、KDC プロキシ サービスの構成に進みましょう。

接続 URL エンドポイントを作成します。

NETSH http add urlacl url=https://+:443/KdcProxy user="NT authorization\Network Service"


URL reservation successfully added

/images/netsh-http-add-urlacl-url443-kdcproxy.png

一意の GUID を生成します。

$appguid=Guid::NewGuid().ToString("B")

証明書のサムプリント値を設定します。

$kdccert="F00AB752B63F3B840A44BF6A20F6EF0E25DEF4D4"

証明書を接続エンドポイントにバインドします。

netsh http add sslcert ipport=0.0.0.0:443 certhash=$kdccert appid=$appguid


SSL Certificate successfully added

/images/netsh-http-add-sslcert-bind-ssl-cert-kdc-proxy.png

スマート カードまたは Windows Hello 認証を使用するつもりはないので、KDC プロキシ操作の HTTPS クライアント証明書認証要件を無効にします。これにより、パスワードや HTTPS 経由の Kerberos などの代替方法をスマート カードなしで使用できるようになります。

REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\KPSSVC\Settings"/v HttpsClientAuth/t REG\_DWORD/d 0x0/f

パスワード認証を有効にします。

REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\KPSSVC\Settings"/v DisallowUnprotectedPasswordAuth/t REG\_DWORD/d 0x0/f

KDC プロキシ サービス (KPSSVC) を有効にします。

Set-Service kpssvc-StartupType 自動

サービスの開始 kpssvc

クライアントが KDC プロキシに接続できるように、サーバー上の TCP ポート 443 での受信トラフィックを許可します。 PowerShell を使用して Windows ファイアウォールの許可ルールを作成します。

New-NetFirewallRule-DisplayName "KDCProxy TCP\_In"-Direction Inbound-Protocol TCP-LocalPort 443

次に、接続に KDC プロキシを使用するようにクライアント側でいくつかの変更を加えてみましょう。

クライアントの KDC プロキシ設定は、コンピューターの構成 -> ポリシー -> 管理用テンプレート -> システム -> Kerberos セクションの Kerberos クライアントの KDC プロキシ サーバーを指定する グループ ポリシー オプションを使用して構成できます。

ポリシーを有効にし、「表示」ボタンをクリックして、KDC プロキシの接続文字列を追加します。文字列は次の形式である必要があります。

  • 値の名前: AD ドメイン名、woshub.com

  • 値: このドメインの KDC プロキシ接続文字列 (複数のサーバーを指定できます):

/images/group-policy-option-specify-kdc-proxy-servers-for.png

または、レジストリを介してクライアント上で KDC プロキシ設定を直接構成することもできます。

` reg add “HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos”/v KdcProxyServer_Enabled/t REG_DWORD/d 1/f

reg add “HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\KdcProxy\ProxyServers”/v woshub.com/t REG_SZ/d “"/f `

GPO 設定を適用するには、クライアント コンピューターを再起動する必要があります。

次に、クライアントから RDP ゲートウェイにログインしてみます。クライアントは、KDC プロキシを使用してドメイン コントローラーで認証し、Kerberos チケットを取得する必要があります。 Kerberos チケットが kdcproxy 経由で発行されたことを確認するには、以下のコマンドを実行します。

klist 取得 krbtgt

/images/klist-get-krbtgt-view-kerberos-tickets.png

Kerberos プロキシ認証ログは、イベント ビューアーの次のセクションにあります: イベント ビューアー -> アプリとサービス -> Microsoft -> KDCProxy -> Operational。

将来の Windows リリースでは、Microsoft は Windows Admin Center (WAC) Web インターフェイスを介して KDC プロキシの展開を自動化および簡素化する予定です。

*️⃣ 出典リンク:

リモート デスクトップ ゲートウェイ、SMB over QUIC ファイル アクセス、NTLM v1 および v2 認証プロトコルの非推奨、ユーザーのパスワードの変更、NTLM 認証の無効化、認証エラーの発生、自己署名証明書、クライアントの Windows デバイスへの証明書の公開キーのインストール、PowerShell を使用した Windows ファイアウォールの許可ルール、GPO 設定の適用、