· 16 мин чтения

PowerShell Remoting через WinRM: настройка HTTPS-листенера, Kerberos и JEA в корпоративной сети

PowerShell Remoting через WinRM: настройка HTTPS-листенера, Kerberos и JEA в корпоративной сети

Я Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет обслуживания Windows-инфраструктур развернул WinRM на сотнях серверов — от простого «Enable-PSRemoting» на десятке машин до сложных схем с JEA, HTTPS, Kerberos Constrained Delegation и ограниченными наборами cmdlet для helpdesk. И каждый раз сталкиваюсь с одним и тем же: админы включают WinRM, но не настраивают безопасность, или настраивают с ошибками, которые всплывают в самый неподходящий момент. В этой статье — как я сам развожу WinRM на продакшене, с акцентом на HTTPS, сертификаты, корректную delegation и траблшутинг.

Что такое WinRM и PowerShell Remoting

WinRM — реализация протокола WS-Management от Microsoft. По HTTP/HTTPS передаёт XML-сообщения, поверх которых работают разные приложения: PowerShell Remoting, Ansible winrm connection, PSExec через WinRM, SCVMM. PowerShell Remoting — набор командлетов (Invoke-Command, Enter-PSSession, New-PSSession), которые используют WinRM для выполнения скриптов на удалённом хосте.

Порты по умолчанию:

Быстрое включение — только для начала

# На целевой машине (PowerShell от администратора)
Enable-PSRemoting -Force

# С клиента
Test-WSMan -ComputerName srv-app01
Invoke-Command -ComputerName srv-app01 -ScriptBlock { hostname }

Enable-PSRemoting делает за вас: запускает службу WinRM, создаёт HTTP-листенер на 5985, добавляет правила firewall. Для лабы и первого знакомства — хватит. Для продакшена — нет, потому что открытый HTTP-листенер на публичных интерфейсах и отсутствие HTTPS — это плохая практика.

Правильный HTTPS-листенер

Стандартная корпоративная схема — HTTPS с сертификатом из собственного AD CS. Шаблон «Web Server» нужно включить на Issuing CA, затем на каждом сервере запросить сертификат:

# Автоэнроллмент через GPO выдаст сертификат на Computer
# Либо вручную:
$req = [ordered]@{
    Subject = "CN=$env:COMPUTERNAME.corp.itfresh.local"
    DnsName = @("$env:COMPUTERNAME", "$env:COMPUTERNAME.corp.itfresh.local")
    KeyAlgorithm = 'RSA'
    KeyLength = 2048
    CertStoreLocation = 'Cert:\LocalMachine\My'
    Template = 'WebServer'
}
Get-Certificate @req -Url ldap:

# Создание HTTPS-листенера
$cert = Get-ChildItem Cert:\LocalMachine\My |
    Where-Object { $_.Subject -like "*$env:COMPUTERNAME*" } |
    Select-Object -First 1

New-Item -Path WSMan:\localhost\Listener -Transport HTTPS `
    -Address * -CertificateThumbPrint $cert.Thumbprint -Force

# Правило firewall
New-NetFirewallRule -Name 'WinRM-HTTPS-In' -DisplayName 'WinRM HTTPS Inbound' `
    -Protocol TCP -LocalPort 5986 -Direction Inbound -Action Allow

# Удалить HTTP-листенер (по желанию)
Get-ChildItem WSMan:\localhost\Listener | Where-Object Keys -like '*HTTP*' |
    Where-Object Keys -notlike '*HTTPS*' | Remove-Item -Recurse

Проверка с клиента: Test-WSMan -ComputerName srv-app01 -UseSSL. Ответ должен прийти в формате XML с версией WS-Management.

Kerberos против NTLM в WinRM

КритерийKerberosNTLM
Когда используетсяВнутри домена, FQDN-имяРабочая группа, подключение по IP
Требуется TrustedHostsНетДа (на клиенте)
ДелегированиеПоддерживает (constrained, unconstrained)Не делегирует
Mutual authenticationДа, нативноТолько с HTTPS+cert
БезопасностьВысокаяСредняя

Я у себя всегда стараюсь использовать Kerberos. Это значит: подключаться только по FQDN (не по IP), целевой хост в AD-домене, клиент либо в том же, либо в доверенном домене. Когда подключаюсь к машинам в рабочей группе или по IP — прописываю TrustedHosts на клиенте:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'srv-dmz01,192.168.100.*' -Force
Get-Item WSMan:\localhost\Client\TrustedHosts

Проблема double hop и решения

Типичный сценарий: подключились к серверу A через Invoke-Command, оттуда хотите достучаться до серверного share B. С Kerberos по умолчанию это не работает — учётка остаётся на сервере A. Варианты:

# Настройка RBKCD (правильный способ)
Set-ADComputer -Identity 'srv-fileB' `
    -PrincipalsAllowedToDelegateToAccount (Get-ADComputer 'srv-adminA')
# После этого с A можно без проблем открывать \\srv-fileB\share

Just Enough Administration (JEA)

JEA — механизм, при котором админы и операторы подключаются по WinRM, но получают урезанную оболочку с конкретным набором разрешённых команд. Отлично для helpdesk: сотрудник может разблокировать учётку и перезапустить службу, но не может создать пользователя или удалить файл.

# Role capability file (разрешённые команды)
New-PSRoleCapabilityFile -Path .\HelpdeskOperator.psrc `
    -VisibleCmdlets 'Unlock-ADAccount','Enable-ADAccount',
                    @{Name='Set-ADAccountPassword'; Parameters=@(
                        @{Name='Identity'},@{Name='Reset'},@{Name='NewPassword'})},
                    'Restart-Service' `
    -ModulesToImport ActiveDirectory

# Session configuration
New-PSSessionConfigurationFile -Path .\Helpdesk.pssc `
    -SessionType RestrictedRemoteServer `
    -RoleDefinitions @{ 'CORP\Helpdesk' = @{ RoleCapabilities = 'HelpdeskOperator' } } `
    -RunAsVirtualAccount

Register-PSSessionConfiguration -Name Helpdesk -Path .\Helpdesk.pssc -Force

# Использование
Enter-PSSession -ComputerName srv-dc01 -ConfigurationName Helpdesk -UseSSL

Мини-кейс: централизованное управление 120 серверами

В августе 2025 клиент (логистика, 3 дата-центра, 120 Windows-серверов) пришёл с запросом: сделать так, чтобы у каждого из 8 админов был ограниченный доступ, все действия логировались, и подключаться можно было только с выделенных jump-hosts. До этого у них все админы имели Domain Admin и лезли напрямую через RDP.

Что мы сделали за две недели:

Результат: поверхность атаки снизилась, каждое админ-действие теперь задокументировано с timestamp и user ID, помощник администратора спокойно разблокирует учётку без риска что-то сломать. Стоимость работ 130 тыс. руб.

Траблшутинг WinRM

Частые проблемы и как их чинить:

ОшибкаПричинаРешение
WinRM cannot complete operation. Verify that the specified computer name is validНет сетевой доступности или firewallTest-NetConnection -Port 5985/5986, проверить правила
The WinRM client cannot process the request. If the authentication scheme is different from Kerberos...Подключение по IP, нет TrustedHostsДобавить в TrustedHosts или использовать FQDN
Access is deniedПользователь не в Remote Management UsersAdd-LocalGroupMember -Group 'Remote Management Users' -Member user
Certificate CN does not match computer nameСертификат выписан на другой CNПеревыпустить сертификат с правильным Subject/SAN
MaxMemoryPerShellMB limit reachedМаленький лимит памяти на PSSessionSet-Item WSMan:\localhost\Plugin\Microsoft.PowerShell\Quotas\MaxMemoryPerShellMB 2048
# Полный сброс конфигурации WinRM (осторожно)
winrm invoke restore winrm/config
Enable-PSRemoting -Force

# Посмотреть все листенеры
winrm e winrm/config/listener
Get-ChildItem WSMan:\localhost\Listener

Безопасность и чек-лист

Настроим WinRM безопасно и централизованно

Разверну WinRM HTTPS на всех ваших серверах, подключу к корпоративному PKI, настрою JEA-роли и логирование, подниму jump-host. 15+ лет опыта с Windows-инфраструктурами, серверное плечо — Dell Xeon Platinum 8280 в дата-центре МТС на 40G аплинке Mellanox. От 10 до 800 рабочих мест.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы по WinRM

HTTP или HTTPS для WinRM?
Внутри AD-домена HTTP тоже шифрует трафик через Kerberos, поэтому формально безопасно. Но для машин вне домена, non-domain клиентов, машин за маршрутизаторами — только HTTPS с сертификатом из AD CS или публичного CA.
Что такое TrustedHosts?
Список имён/IP, которым клиент доверяет при NTLM-аутентификации (без Kerberos). Нужен, когда подключаетесь по IP или к машинам за пределами домена. Минимизируйте список, не ставьте '*'.
Зачем CredSSP?
CredSSP делегирует учётные данные на удалённый хост, чтобы оттуда можно было пройти на следующий (double hop). Небезопасно — отключённый сервер увидит ваш пароль. Используйте только в тестовых средах или для Kerberos Constrained Delegation.
Что такое JEA?
Just Enough Administration — механизм, когда администратор подключается через WinRM, но видит только ограниченный набор команд под сервисной учёткой. Снижает поверхность атаки, идеален для операторов helpdesk.
Как дебажить WinRM?
Test-WSMan -ComputerName srv — базовый пинг. winrm e winrm/config/listener — состояние листенеров. Логи: event viewer → Microsoft-Windows-WinRM/Operational. Для сетевой диагностики — Test-NetConnection -Port 5985/5986.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.