Настройка KDC (Kerberos) Proxy для удаленного доступа

Служба KDC прокси (Kerberos Key Distribution Center Proxy) позволяет клиентам выполнять Kerberos аутентификацию через промежуточный сервер, когда у пользователей нет прямого доступа к контроллерам домена Active Directory. Как правило, он нужен для сценариев Kerberos аутентификации внешних пользователей (из интернета), или пользователей рабочих групп. Служба KDC proxy изначально разработана для DirectAccess, RDP Gateway, файлового доступа SMB over QUIC однако в связи с планами Microsoft полностью отказаться от NTLM v1 и v2, службу Kerberos прокси возможно придется использовать и для аутентификации в других сервисах удаленного доступа.

Для выполнения обычной Kerberos аутентификации между клиентом и службой KDC на контроллере домена AD должны быть открыты следующие порты:

  • UDP/TCP 88 – Kerberos аутентификация, получение билетов TGT
  • UDP/TCP 464смена пароля пользователя через Kerberos

Открывать эти порты внешним пользователям до контроллеров домена небезопасно, поэтому на точке подключения пользователей можно создать службу KDC proxy. Клиенты устанавливают соединение с KDC прокси по HTTPS (TCP/443) порту, и уже в шифрованном туннеле через него пересылают запросы аутентификации Kerberos к контроллерам домена.

Рассмотрим простейший сценарий Remote Desktop Gateway сервера во внутреннем периметре, к которому подключаются внешние пользователи. На RDGW хосте отключена NTLM аутентификация (разрешена только Kerberos аутентификация), поэтому внешние пользователи (подключающиеся с не-доменных машин), не смогут подключиться к такому сервере с RDP ошибкой:

An authentication error has occurred.
The function requested is not supported
Remote computer: xxxx
This could be due to CredSSP encryption oracle remediation.

RDP ошибка The function requested is not supported при kerberos аутентификации

В данной ситуации, т.к. клиент не можете аутентифицироваться по Kerberos на DC, будет выполнена попытка отката (fallback) до NTLM (который запрещен на хосте), в результате пользователь не сможет выполнить удаленный вход.

Чтобы внешние клиенты могли аутентифицироваться на данном RDP хосте через Kerberos, развернем на нем службу KDC Proxy Service (KPSSVC).

На хосте со службой KDC прокси должен быть установлен сертификат, который будет использоваться для шифрования трафика и проверки подлинности сервера. Extended Key Usage (EKU) сертификата должны включать Server Authentication , Client Authentication , Kerberos Authentication . В SAN сертификата должно быть включено FQDN сервера KDC прокси, по которому к нему будут обращаться клиенты. Такой сертификат можно выпустить от внутреннего CA (для тестовых развертываний можно использовать самоподписанный сертификат).

Сертификат должен быть установлен в Personal хранилище компьютера. Скопируйте отпечаток (Thumbrint) такого сертификата:

Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -like "*CN=w-rds01.winitpro.ru*" } | Select-Object -ExpandProperty Thumbprint

получить отпечаток сертификата

Если используется самоподписанный сертификат или сертификат от внутреннего CA, открытый ключ такого сертификата нужно установить на клиентах, чтобы они доверяли ему.

Теперь переходим к настройке службы KDC прокси.

Создаем точку подключения (URL endpoint):

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

URL reservation successfully added

NETSH http add urlacl KdcProxy

Генерируем уникальный GUID:

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

Задаем значение отпечатка сертификата:

$kdccert="2E9D8A634ACA8A17657AD597CE0CA7E1D634B088"

Привязываем сертификат к точке подключения:

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

SSL Certificate successfully added

netsh http add sslcert ipport - привязать сертификат

Т.к. мы не планируем использовать аутентификацию с помощью смарт карты или Windows Hello, отключаем аутентификацию по сертификатам:

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 Proxy Service (KPSSVC) и запускаем ее:

Set-Service kpssvc -StartupType Automatic

Start-Service kpssvc

Разрешаем входящий трафик по TCP порту 443 на сервере, чтобы клиенты могли подключиться к KDC Proxy. Создайте разрешающее правило файрвола с помощью PowerShell:

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

Теперь нужно внести изменения на стороне клиентов, чтобы они использовали KDC прокси для подключений.

Параметры KDC прокси для клиентов можно задать через GPO Specify KDC proxy servers for Kerberos clients в разделе Computer Configuration -> Policies -> Administrative Templates -> System -> Kerberos.

Включите политику и в ее настройках (кнопка Show) добавьте строку для подключения к вашему KDC прокси в формате:

  • Value name: имя вашего домена AD, winitpro.ru
  • Value: строка подключения к KDC прокси для этого домена (можно указать несколько серверов): <https w-rds01.winitpro.ru:443:kdcproxy />

Групповая политика Specify KDC proxy servers for Kerberos clients

Или можно добавить настройки 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 winitpro.ru /t REG_SZ /d "<https w-rds01.wintpro.ru:443:kdcproxy />" /f

Чтобы применить настройки GPO, нужно перезагрузить клиентский компьютер.

Теперь попробуйте выполнить вход на RDP gateway с клиента. Клиент должен воспользоваться KDC прокси для аутентификации на контроллере домена. Выполните команду, чтобы проверить что тикет Kerberos был выдан через kdcproxy :

klist get krbtgt

klist get krbtgt

Логи аутентификации Kerberos через прокси доступны в разделе Event Viewer -> App and Services -> Microsoft -> KDCProxy -> Operational.

В будущем Microsoft планирует автоматизировать и упростить развертывание KDC прокси через веб интерфейс Windows Admin Center (WAC).


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)