Настройка RDP на Windows Server: пошаговая инструкция

настройка RDP на Windows Server пошагово

Для настройки RDP на Windows Server включите удалённый рабочий стол в Server Manager (Local Server, Remote Desktop, Enabled), откройте порт 3389 в брандмауэре, добавьте пользователей в группу Remote Desktop Users и настройте NLA (Network Level Authentication) для безопасного подключения.

Что такое RDP и зачем он нужен

RDP (Remote Desktop Protocol) это протокол удалённого рабочего стола от Microsoft. Позволяет управлять сервером, сидя за другим компьютером. Как будто вы сидите прямо перед сервером, только через сеть.

Без RDP администрирование серверов превращается в ходьбу в серверную. Каждый раз, когда нужно что-то настроить. Через RDP подключаетесь из любого места: из офиса, из дома, из кафе (через VPN, конечно).

Короче, RDP это база. Первое, что настраивают на новом сервере. А почему бы и нет, если можно управлять сервером в тапочках из дома?

Включение RDP через Server Manager

Самый простой способ. Для тех, кто установил Desktop Experience.

Откройте Server Manager. В левой панели нажмите «Local Server». Найдите строку «Remote Desktop». По умолчанию будет «Disabled». Нажмите на «Disabled».

В открывшемся окне выберите «Allow remote connections to this computer». Ниже оставьте галочку «Allow connections only from computers running Remote Desktop with Network Level Authentication» (это NLA, про него позже).

Нажмите «OK». Всё, RDP включён.

Если честно, на Windows Server RDP часто включён по умолчанию (зависит от способа установки). Но проверить не помешает. Лучше убедиться лишний раз, чем потом бегать к серверу ногами.

Включение RDP через PowerShell

Для Server Core или для тех, кто любит командную строку.

# Включаем RDP
Set-ItemProperty -Path "HKLM:SystemCurrentControlSetControlTerminal Server" -Name "fDenyTSConnections" -Value 0

# Включаем правило брандмауэра для RDP
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

# Включаем NLA (Network Level Authentication)
Set-ItemProperty -Path "HKLM:SystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" -Name "UserAuthentication" -Value 1

# Проверяем статус
Get-ItemProperty -Path "HKLM:SystemCurrentControlSetControlTerminal Server" -Name "fDenyTSConnections"
# Значение 0 = RDP включён, 1 = выключен

Мой коллега Антон (администрирует 15 серверов на Server Core, всё железо Lenovo ThinkSystem SR630 V2 с Xeon Silver 4310) включает RDP на новых серверах одной командой через PowerShell Remoting. Подключается через WinRM, вводит две строки, готово. На GUI-версиях тратишь больше времени, пока Server Manager откроется.

Настройка брандмауэра

RDP использует порт TCP 3389 по умолчанию. Брандмауэр Windows обычно открывает этот порт автоматически при включении RDP. Но бывает, что не открывает.

# Проверяем правила для RDP
Get-NetFirewallRule -DisplayGroup "Remote Desktop" |
    Select-Object Name, Enabled, Direction, Action

# Если правила отключены, включаем
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

# Или создаём правило вручную (если стандартное удалено)
New-NetFirewallRule -DisplayName "RDP" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow

Вот в чём прикол: если у вас ещё есть внешний файрвол (аппаратный, или на уровне облачного провайдера), нужно открыть порт и там. Брандмауэр Windows это только один уровень.

А знаете что? Публиковать RDP напрямую в интернет (открывать порт 3389 наружу) это очень плохая идея. Боты сканируют порт 3389 постоянно и пытаются подобрать пароль. Используйте VPN для доступа извне.

Добавление пользователей

По умолчанию через RDP может подключаться только администратор. Чтобы добавить обычных пользователей:

# Добавляем пользователя в группу Remote Desktop Users
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "username"

# Добавляем доменного пользователя
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "DOMAINusername"

# Проверяем список
Get-LocalGroupMember -Group "Remote Desktop Users"

Или через GUI: Computer Management, Local Users and Groups, Groups, Remote Desktop Users, Add.

Тут такое дело: администраторы (группа Administrators) могут подключаться по RDP без добавления в Remote Desktop Users. Эта группа нужна именно для обычных пользователей.

Настройка NLA (Network Level Authentication)

NLA это дополнительный уровень безопасности. Пользователь должен аутентифицироваться ДО создания сессии. Без NLA сервер создаёт полноценную сессию для любого подключения, что тратит ресурсы и открывает возможности для атак.

NLA рекомендуется включать всегда. На самом деле в современных версиях Windows Server NLA включена по умолчанию.

# Проверяем статус NLA
Get-ItemProperty -Path "HKLM:SystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" -Name "UserAuthentication"
# 1 = NLA включена, 0 = выключена

# Включаем NLA (если выключена)
Set-ItemProperty -Path "HKLM:SystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" -Name "UserAuthentication" -Value 1

Кстати, если NLA включена, старые клиенты (Windows XP, например) не смогут подключиться. Но в 2024 году это уже неактуально.

А знаете что ещё NLA предотвращает? Атаки типа BlueKeep (CVE-2019-0708). Без NLA злоумышленник мог получить доступ к серверу ещё до аутентификации. С NLA нужно сначала ввести валидные учётные данные, и только потом создаётся RDP-сессия. Разница принципиальная.

Смена порта RDP

Порт 3389 по умолчанию. Его знают все, включая хакеров. Смена порта, это не полноценная защита (security through obscurity), но снижает количество автоматических атак.

# Меняем порт RDP (например, на 33890)
Set-ItemProperty -Path "HKLM:SystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" -Name "PortNumber" -Value 33890

# Обновляем правило брандмауэра
# Удаляем старое
Disable-NetFirewallRule -DisplayGroup "Remote Desktop"

# Создаём новое на нужном порту
New-NetFirewallRule -DisplayName "RDP Custom Port" -Direction Inbound -Protocol TCP -LocalPort 33890 -Action Allow

# Перезагружаем службу RDP
Restart-Service TermService -Force

# Подключение с нестандартным портом:
# mstsc /v:server-ip:33890

Грубо говоря, после смены порта ко всем адресам подключения нужно добавлять :порт. Это может быть неудобно, но безопаснее. Куда вообще стоит менять? Выбирайте порт выше 10000, чтобы не конфликтовать с другими сервисами. И обязательно задокументируйте новый порт, иначе через полгода забудете и сами не сможете подключиться.

Настройка таймаутов RDP-сессий

Бывает, что пользователь отключился от RDP, но сессия висит на сервере и жрёт ресурсы. Через час таких «висящих» сессий набирается десяток, и сервер начинает тормозить. Знакомая ситуация?

Настроить таймауты можно через групповые политики или реестр:

# Через PowerShell (реестр)
# Ограничиваем время отключённой сессии (значение в миллисекундах)
# 3600000 = 1 час
Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindows NTTerminal Services" -Name "MaxDisconnectionTime" -Value 3600000

# Ограничиваем время простоя (бездействия)
# 1800000 = 30 минут
Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindows NTTerminal Services" -Name "MaxIdleTime" -Value 1800000

# Через групповую политику (удобнее для домена):
# Computer Configuration - Administrative Templates -
# Windows Components - Remote Desktop Services -
# Remote Desktop Session Host - Session Time Limits

Моя коллега Наташа (администратор в бухгалтерской фирме, сервер HPE ProLiant ML350 Gen10 с Xeon Silver 4210R, 64 ГБ RAM) рассказывала, как однажды бухгалтеры оставили 18 открытых сессий на ночь, каждая с запущенной 1С. Утром сервер еле дышал. После настройки таймаутов такое больше не повторялось.

Remote Desktop Services (RDS)

Базовый RDP на Windows Server поддерживает только 2 одновременных подключения администраторов. Если нужно больше (терминальный сервер), нужна роль Remote Desktop Services с лицензиями RDS CAL.

# Установка роли RDS
Install-WindowsFeature -Name RDS-RD-Server -IncludeManagementTools

# После установки роли нужно настроить лицензирование:
# Server Manager - Remote Desktop Services - Licensing
# Указываем сервер лицензий и тип CAL (per user или per device)

Наташа настроила RDS-сервер для 20 бухгалтеров. Все работают через тонкие клиенты HP t630. 1С, Excel, почта, всё через RDP. Один мощный сервер вместо 20 рабочих станций. Экономия на железе и поддержке.

Тут такое дело: каждому пользователю RDS нужна лицензия RDS CAL (Client Access License). Без неё после 120-дневного пробного периода пользователи не смогут подключаться. Лицензии покупаются отдельно от лицензии Windows Server.

Выбор типа RDS CAL: Per User vs Per Device

А вот это вопрос, который многие задают. Какой тип CAL выбрать?

ПараметрPer User CALPer Device CAL
ПривязкаК пользователю ADК устройству
Когда выгодноСотрудники работают с разных устройствНа одном ПК работают несколько смен
ПримерМенеджер подключается с ноута, планшета и домашнего ПКТри оператора на одном тонком клиенте посменно
ОтслеживаниеAD-пользовательMAC-адрес устройства

По факту для большинства офисов Per User выгоднее, потому что у каждого сотрудника обычно несколько устройств. Но если у вас производство или колл-центр со сменной работой, Per Device будет экономичнее.

Безопасность RDP

RDP частая цель атак. Вот минимальный набор мер безопасности.

Не публикуйте 3389 в интернет. Используйте VPN или RD Gateway.

Включите NLA. Обязательно.

Сложные пароли. Или лучше многофакторная аутентификация.

Блокировка после неудачных попыток. Через групповые политики.

# Настройка блокировки через PowerShell/групповую политику
# Computer Configuration - Policies - Windows Settings -
# Security Settings - Account Policies - Account Lockout Policy

# Через PowerShell (локальная политика):
net accounts /lockoutthreshold:5
net accounts /lockoutduration:30
net accounts /lockoutwindow:30

# Пять неудачных попыток = блокировка на 30 минут

RD Gateway. Если нужен доступ извне, используйте RD Gateway вместо прямого RDP. Gateway работает через HTTPS (порт 443), что безопаснее.

А ещё рекомендую настроить аудит подключений RDP. Чтобы видеть, кто подключался и когда.

# Смотрим логи RDP-подключений
Get-EventLog -LogName Security -InstanceId 4624 |
    Where-Object { $_.Message -match "Type:s+10" } |
    Select-Object TimeGenerated, Message -First 20

# Тип 10 = RDP-подключение

Troubleshooting: типичные проблемы с RDP

По факту, настроить RDP это полдела. Потом начинаются вопросы «а у меня не подключается». Вот самые частые проблемы и как их решать.

Проблема: «Удалённый компьютер не найден»

Скорее всего, проблема с DNS или IP. Проверьте, что клиент может пинговать сервер. Если по имени не пингуется, попробуйте по IP-адресу.

# Диагностика на стороне клиента
ping server-name
ping 192.168.1.10

# Проверяем, открыт ли порт 3389
Test-NetConnection -ComputerName 192.168.1.10 -Port 3389

# Если порт закрыт, проблема в брандмауэре

Проблема: «CredSSP encryption oracle remediation»

Эта ошибка появилась после обновления безопасности 2018 года. Решается так:

# Временное решение (не рекомендуется для постоянного использования)
reg add "HKLMSoftwareMicrosoftWindowsCurrentVersionPoliciesSystemCredSSPParameters" /f /v AllowEncryptionOracle /t REG_DWORD /d 2

# Правильное решение: обновите ОБА компьютера (и клиент, и сервер)
# до последних обновлений безопасности

Проблема: чёрный экран после подключения

Бывает на серверах с GPU или после обновлений. Мой знакомый Игорь, сисадмин в рекламном агентстве (сервер Dell PowerEdge T440 с Xeon Bronze 3204), ловил чёрный экран регулярно. Решение: отключить аппаратное ускорение графики в настройках RDP-клиента или перезапустить службу TermService на сервере.

# Перезапуск службы RDP на сервере (через PowerShell Remoting)
Invoke-Command -ComputerName server-name -ScriptBlock {
    Restart-Service TermService -Force
}

Оптимизация производительности RDP

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

# Настройка через групповые политики
# Computer Configuration - Administrative Templates -
# Windows Components - Remote Desktop Services -
# Remote Desktop Session Host - Remote Session Environment

# Через реестр: уменьшаем качество обоев
Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindows NTTerminal Services" -Name "fNoRemoteDesktopWallpaper" -Value 1

# Включаем сжатие данных RDP
Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindows NTTerminal Services" -Name "fEnableVirtualizedGraphics" -Value 0

Если честно, простейший способ ускорить RDP: на клиенте в параметрах подключения выбрать «Производительность» вместо «Качество». Это отключит обои, анимацию, сглаживание шрифтов. Визуально менее красиво, зато работает шустро даже через слабый интернет.

Подключение к серверу

С Windows: Win+R, вводите mstsc, указываете адрес сервера. Или через приложение «Подключение к удалённому рабочему столу».

С Mac: скачайте Microsoft Remote Desktop из App Store. Бесплатно.

С Linux: используйте Remmina или xfreerdp. С телефона: есть приложение Microsoft Remote Desktop для iOS и Android. Работает на удивление хорошо, даже на маленьком экране можно управлять сервером. Для экстренных случаев самое то.

# Быстрое подключение из командной строки Windows
mstsc /v:192.168.1.10

# С указанием нестандартного порта
mstsc /v:192.168.1.10:33890

# Полноэкранный режим
mstsc /v:192.168.1.10 /f

# С конкретным разрешением
mstsc /v:192.168.1.10 /w:1920 /h:1080

# Подключение к серверу из Linux через xfreerdp
# xfreerdp /v:192.168.1.10 /u:admin /p:password /f

Сохранение RDP-подключений

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

# Создаём RDP-файл для быстрого подключения
# Откройте mstsc, настройте параметры и нажмите "Сохранить как"
# Файл .rdp можно положить на рабочий стол

# Или создайте .rdp файл вручную:
# full address:s:192.168.1.10:33890
# username:s:DOMAINadmin
# screen mode id:i:2
# desktopwidth:i:1920
# desktopheight:i:1080
# authentication level:i:2

Проброс ресурсов через RDP

RDP умеет пробрасывать локальные ресурсы на удалённый сервер. Это значит, что вы можете видеть свои локальные диски, принтеры и буфер обмена прямо внутри RDP-сессии.

По факту это одна из самых удобных фишек RDP. Подключились к серверу, открыли «Мой компьютер» и видите там свой диск C: с рабочего ноутбука. Можно копировать файлы туда-сюда без всяких сетевых шар.

# Настройка через групповые политики (на сервере)
# Computer Configuration - Administrative Templates -
# Windows Components - Remote Desktop Services -
# Remote Desktop Session Host - Device and Resource Redirection

# Разрешить/запретить:
# - Перенаправление буфера обмена
# - Перенаправление дисков
# - Перенаправление принтеров
# - Перенаправление USB-устройств

# На клиенте: mstsc - Показать параметры - вкладка "Локальные ресурсы"

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

Мониторинг RDP-сессий

Когда на сервере 15-20 пользователей, нужно следить за тем, что происходит. Кто подключён? Сколько ресурсов потребляет каждая сессия?

# Смотрим активные RDP-сессии
quser

# Подробная информация о сессиях
qwinsta

# Отключаем конкретного пользователя (если сессия зависла)
logoff SESSION_ID

# Мониторинг ресурсов по сессиям через PowerShell
Get-Process -IncludeUserName | Group-Object UserName |
    Select-Object Name, @{N='CPU';E={($_.Group | Measure-Object CPU -Sum).Sum}},
    @{N='Memory(MB)';E={[math]::Round(($_.Group | Measure-Object WorkingSet64 -Sum).Sum / 1MB, 0)}}

Знаете что? Команда quser спасла меня не раз. Бухгалтер звонит, говорит «не могу зайти на сервер, пишет что слишком много подключений». Запускаю quser, вижу две отключённые сессии от вчерашнего дня. Logoff, и проблема решена за 10 секунд.

Ну и напоследок: RDP это мощный инструмент, но с большой силой приходит большая ответственность (да, прямо как в кино). Настраивайте правильно, защищайте от атак, и сервер будет работать стабильно и безопасно. Не забывайте про лицензии RDS CAL, если подключается больше двух пользователей одновременно. Купить лицензию Windows Server можно на keytrust24.store.

Частые вопросы

Проблема: "Удалённый компьютер не найден"

Скорее всего, проблема с DNS или IP. Проверьте, что клиент может пинговать сервер. Если по имени не пингуется, попробуйте по IP-адресу.

Проблема: "CredSSP encryption oracle remediation"

Эта ошибка появилась после обновления безопасности 2018 года. Решается так:

Проблема: чёрный экран после подключения

Бывает на серверах с GPU или после обновлений. Мой знакомый Игорь, сисадмин в рекламном агентстве (сервер Dell PowerEdge T440 с Xeon Bronze 3204), ловил чёрный экран регулярно. Решение: отключить аппаратное ускорение графики в настройках RDP-клиента или перезапустить службу TermService на сервере.