Remote Desktop Gateway: настройка безопасного удалённого доступа через HTTPS

Windows Server 24 марта 2026 14 мин чтения
Настройка Remote Desktop Gateway для безопасного удалённого доступа

Открытый порт 3389 во внешнюю сеть — это не просто риск, это гарантированные брутфорс-атаки. Мы проверяли: среднестатистический Windows Server с проброшенным RDP получает первые попытки подбора пароля уже через 10–15 минут после появления в интернете. Remote Desktop Gateway (RD Gateway, ранее TS Gateway) закрывает эту дыру: весь RDP-трафик упаковывается в HTTPS-туннель через порт 443. Клиент цепляется к шлюзу по SSL, а шлюз сам разруливает соединение до нужного сервера или рабочей станции внутри сети. В этом руководстве поднимем RD Gateway с нуля на Windows Server 2019/2022, настроим политики доступа, прикрутим SSL-сертификат и разберём грабли, на которые наступают администраторы при первом развёртывании.

Зачем нужен RD Gateway и как он работает?

RD Gateway — это посредник между внешним миром и вашей RDS-инфраструктурой. Клиент поднимает HTTPS-соединение со шлюзом на порту 443, проходит аутентификацию, и только после этого шлюз создаёт RDP-сессию с нужным сервером внутри корпоративной сети. На внешнем файрволе открыт исключительно 443/TCP. Порт 3389 снаружи вообще не торчит.

Чем это лучше VPN-подключения:

RD Gateway особенно полезен для компаний, которые публикуют RemoteApp-приложения — пользователь запускает приложение как локальное, а трафик идёт через защищённый шлюз.

Требования и подготовка к установке

Что понадобится для развёртывания RD Gateway:

Шлюз можно поднять как на отдельной машине в DMZ, так и совместить с другими ролями RDS — RD Session Host, RD Connection Broker. Если честно, в продуктиве мы всегда рекомендуем выделенный сервер: и безопаснее, и проще разбираться с проблемами, когда что-то пойдёт не так.

Установка роли RD Gateway через PowerShell

Запустите PowerShell от имени администратора и выполните:

# Установка роли RD Gateway со всеми компонентами
Install-WindowsFeature RDS-Gateway -IncludeAllSubFeature -IncludeManagementTools

# Проверка установленных ролей
Get-WindowsFeature RDS* | Where-Object Installed -eq $true

После установки в системе появится оснастка RD Gateway Manager (tsgateway.msc). Сервер в домене — роль сама зарегистрируется в Active Directory. Рабочая группа — ничего дополнительно настраивать не нужно, всё работает на локальных группах.

При установке через Server Manager выберите: Server Roles → Remote Desktop Services → Remote Desktop Gateway. Мастер также предложит установить NPS и IIS, которые являются зависимостями.

Создание и настройка SSL-сертификата

SSL-сертификат — это не просто галочка в настройках. CN или SAN в сертификате обязан совпадать с тем DNS-именем, по которому клиенты будут подключаться к шлюзу. Не совпадает — получите ошибку сертификата у каждого пользователя.

Вариант 1: Самоподписанный сертификат (для тестов)

# Создаём самоподписанный сертификат на 5 лет
$todaydate = Get-Date
$addyear = $todaydate.AddYears(5)
$cert = New-SelfSignedCertificate `
    -DnsName "rdgw.company.ru","192.168.1.100" `
    -NotAfter $addyear `
    -CertStoreLocation cert:\LocalMachine\My `
    -KeyLength 2048

# Экспортируем для распространения на клиентов
Export-Certificate -Cert $cert -FilePath C:\rdgw-cert.cer
Write-Host "Thumbprint: $($cert.Thumbprint)"

Самоподписанный сертификат придётся вручную раскидать по клиентским машинам в хранилище Trusted Root Certification Authorities. В доменной среде проще: раскатываете через GPO за пару минут.

Вариант 2: Let's Encrypt (для продуктива)

# Установка win-acme
Invoke-WebRequest -Uri "https://github.com/win-acme/win-acme/releases/latest" -OutFile wacs.zip
Expand-Archive wacs.zip -DestinationPath C:\wacs

# Запрос сертификата (интерактивный режим)
C:\wacs\wacs.exe --target manual --host rdgw.company.ru `
    --store certificatestore --certificatestore My `
    --installation script --script "C:\scripts\update-rdgw-cert.ps1"

Настройка политик подключения (CAP) и ресурсов (RAP)

RD Gateway контролирует доступ через два типа политик:

Подготовка групп в Active Directory

# Группа пользователей, которым разрешена аутентификация на шлюзе
New-ADGroup -Name "rdgwExtUsers" -GroupScope Global `
    -Path "OU=Groups,DC=company,DC=ru"

# Группа администраторов с доступом к серверам через шлюз
New-ADGroup -Name "rdgwExternalAdmins" -GroupScope Global `
    -Path "OU=Groups,DC=company,DC=ru"

# Группа целевых серверов
New-ADGroup -Name "rdgwTargetServers" -GroupScope Global `
    -Path "OU=Groups,DC=company,DC=ru"

# Добавляем пользователей и серверы
Add-ADGroupMember -Identity "rdgwExtUsers" -Members user1,user2,user3
Add-ADGroupMember -Identity "rdgwExternalAdmins" -Members admin1,admin2
Add-ADGroupMember -Identity "rdgwTargetServers" -Members "SRV-RDS01$","SRV-RDS02$"

Создание политик через PowerShell

# Импортируем модуль
Import-Module RemoteDesktopServices

# Создаём CAP — разрешаем аутентификацию группе rdgwExtUsers
New-Item -Path 'RDS:\GatewayServer\CAP' `
    -Name 'AllowExternalUsers-CAP' `
    -UserGroups "rdgwExtUsers@company.ru" `
    -AuthMethod 1

# Создаём RAP — разрешаем доступ к серверам из группы rdgwTargetServers
New-Item -Path 'RDS:\GatewayServer\RAP' `
    -Name 'AllowRDSServers-RAP' `
    -UserGroups "rdgwExternalAdmins@company.ru" `
    -ComputerGroupType 1 `
    -ComputerGroup "rdgwTargetServers@company.ru"
Если в RAP указать ComputerGroupType 2, пользователи смогут подключаться к любому компьютеру в сети. Это удобно для тестирования, но опасно в продуктивной среде — всегда ограничивайте список серверов.

Привязка сертификата к RD Gateway

Когда политики созданы, привязываем SSL-сертификат к службе шлюза:

# Привязка сертификата через PowerShell
$cert = Get-ChildItem cert:\LocalMachine\My | Where-Object {
    $_.Subject -like "*rdgw.company.ru*"
}
Set-Item -Path "RDS:\GatewayServer\SSLCertificate\Thumbprint" `
    -Value $cert.Thumbprint

# Перезапуск службы
Restart-Service TSGateway

Можно сделать то же самое через оснастку RD Gateway Manager: правый клик на имени сервера → Properties → вкладка SSL Certificate → Select Existing Certificate.

Настройка RDP-клиента для подключения через шлюз

На клиентской машине открываем mstsc.exe и настраиваем подключение:

  1. В поле Computer — внутреннее имя или IP целевого сервера, например SRV-RDS01.company.ru
  2. Вкладка AdvancedSettings в разделе Connect from anywhere
  3. Выбираем Use these RD Gateway server settings
  4. В поле Server name — внешнее DNS-имя шлюза: rdgw.company.ru
  5. Ставим галочку Use my RD Gateway credentials for the remote computer — так пользователь не будет вводить пароль дважды
# Альтернативный способ — через .rdp файл
full address:s:SRV-RDS01.company.ru
gatewayhostname:s:rdgw.company.ru
gatewayusagemethod:i:1
gatewayprofileusagemethod:i:1
gatewayaccesstoken:s:
gatewaycredentialssource:i:0

Настройка RD Gateway в рабочей группе (без домена)

Active Directory есть далеко не у всех. RD Gateway отлично работает и без домена — на локальных группах и учётных записях. Мы разворачивали такую схему в небольших компаниях, всё прекрасно живёт.

# Создаём локального пользователя для подключения
New-LocalUser -Name "rdpuser1" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force)
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpuser1"

# Создаём CAP с локальной группой
New-Item -Path 'RDS:\GatewayServer\CAP' `
    -Name 'Workgroup-CAP' `
    -UserGroups "BUILTIN\Remote Desktop Users" `
    -AuthMethod 1

# Создаём RAP — разрешаем подключение к любому компьютеру
New-Item -Path 'RDS:\GatewayServer\RAP' `
    -Name 'Workgroup-RAP' `
    -UserGroups "BUILTIN\Remote Desktop Users" `
    -ComputerGroupType 2
В рабочей группе убедитесь, что на целевых машинах включён Remote Desktop и в группу Remote Desktop Users добавлены нужные пользователи.

Мониторинг подключений и аудит безопасности

RD Gateway пишет подробный лог всех подключений. Для нас это одна из главных причин использовать шлюз — при разборе инцидента сразу видно, кто подключался, откуда и в какое время.

# Просмотр успешных подключений (Event ID 302)
$properties = @(
    @{n='User';e={$_.Properties[0].Value}},
    @{n='SourceIP';e={$_.Properties[1].Value}},
    @{n='TimeStamp';e={$_.TimeCreated}},
    @{n='TargetHost';e={$_.Properties[3].Value}}
)
Get-WinEvent -FilterHashTable @{
    LogName='Microsoft-Windows-TerminalServices-Gateway/Operational'
    ID=302
} -MaxEvents 50 | Select-Object $properties | Format-Table -AutoSize

Event ID, за которыми стоит следить:

Интеграция с NPS для двухфакторной аутентификации

Один фактор — это слабо. Особенно когда речь о точке входа из интернета. RD Gateway умеет работать с RADIUS через Network Policy Server (NPS), и это самый прямой путь прикрутить второй фактор без сторонних костылей.

# Установка роли NPS
Install-WindowsFeature NPAS -IncludeManagementTools

# Регистрация NPS в Active Directory
netsh ras add registeredserver

В оснастке RD Gateway Manager заходите в Properties → RD CAP Store, переключаете на Central NPS, указываете IP-адрес NPS-сервера и shared secret. На стороне NPS прописываете RADIUS-клиент — им будет ваш RD Gateway — и настраиваете политику подключения, которая требует второй фактор. Что использовать: Azure MFA Extension, MultiFactor, что-то своё — решать вам, вариантов хватает.

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

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

# Проверка текущих активных подключений
Get-WmiObject -Namespace "root\cimv2\TerminalServices" `
    -Class "Win32_TSGatewayConnection" |
    Select-Object UserName, ConnectedResource, ConnectedTime |
    Format-Table -AutoSize

Типичные ошибки и их решение

Ошибка: «Не удалось подключиться к шлюзу удалённых рабочих столов»

Когда подключение не идёт, сначала проверяем четыре вещи: резолвится ли DNS-имя шлюза с клиентской машины; открыт ли 443-й порт на файрволе; запущена ли служба TSGateway; не протух ли сертификат и совпадает ли CN/SAN с тем DNS-именем, которое указал клиент. Половина обращений в поддержку закрывается на этих четырёх пунктах.

Ошибка: «Ваш компьютер не может подключиться к удалённому компьютеру» (код 0x804)

Такое бывает: CAP пользователя пропустила, а подключение до сервера всё равно не доходит. Здесь смотрите RAP — скорее всего, целевой сервер просто не входит в группу компьютеров, которая там прописана. Добавьте его в нужную группу, и всё заработает.

Ошибка NTLMv1 и уязвимость Channel Binding

Чтобы закрыть возможность relay-атак, пропишите в реестре RD Gateway следующее:

# Включение Channel Binding для защиты от NTLM-relay
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TerminalServerGateway\Config\Core" `
    -Name "EnforceChannelBinding" -Value 1 -Type DWord

Балансировка нагрузки нескольких шлюзов

Один шлюз — это единая точка отказа, и в продуктиве это риск. Мы обычно ставим два-три сервера RD Gateway за балансировщиком — NLB, HAProxy, F5, кому что ближе. Важный момент: на всех шлюзах должен стоять одинаковый SSL-сертификат, wildcard или с нужными SAN под общее имя. Политики CAP/RAP хранятся локально на каждой машине, централизованного хранилища нет, так что синхронизировать их придётся руками или скриптом — это немного неудобно, но жить можно.

# Экспорт политик с первого шлюза
Export-Module RDGateway -Path C:\rdgw-policies-backup

# На каждом шлюзе в ферме:
# 1. Установите роль RDS-Gateway
# 2. Привяжите общий сертификат
# 3. Импортируйте одинаковые политики CAP/RAP

Настройка RemoteApp через RD Gateway

RD Gateway умеет пробрасывать не только полные рабочие столы. RemoteApp через шлюз работает отлично — просто добавьте нужные параметры в .rdp-файл приложения:

# Параметры RD Gateway в .rdp файле RemoteApp
gatewayhostname:s:rdgw.company.ru
gatewayusagemethod:i:1
gatewayprofileusagemethod:i:1
remoteapplicationmode:i:1
remoteapplicationname:s:1C Предприятие
remoteapplicationprogram:s:||1cv8c
alternate full address:s:SRV-RDS01.company.ru

Защита RD Gateway: лучшие практики безопасности

Никогда не открывайте порт 3389 на внешнем файрволе «для тестов» — это моментально привлечёт ботов. Используйте RD Gateway даже для временного доступа.

Часто задаваемые вопросы (FAQ)

Можно ли использовать RD Gateway без домена Active Directory?

Да, рабочая группа вполне рабочий вариант. Вместо доменных групп используете локальные — например, BUILTIN\Remote Desktop Users — в политиках CAP и RAP всё это принимается нормально. Ограничение одно: GPO для централизованного управления недоступен, и каждого пользователя придётся заводить локально на сервере шлюза. Неудобно при десятках пользователей, но для небольших инсталляций вполне терпимо.

Какой порт использует RD Gateway и нужно ли открывать 3389?

Наружу нужен только порт 443/TCP. Порт 3389 на внешнем файрволе не открываем — в этом весь смысл шлюза: RDP-трафик идёт внутри HTTPS-туннеля. Дополнительно можно пробросить UDP 3391 — особой разницы не почувствуете на обычных сессиях, но при работе с мультимедиа задержки действительно снижаются.

Почему клиенты Windows 7 не могут подключиться через RD Gateway?

Windows 7 по умолчанию не умеет TLS 1.2, а современные серверы на меньшее не соглашаются. Решается в три шага: устанавливаете обновление KB3140245, вручную включаете TLS 1.1 и TLS 1.2 через реестр (HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols), перезагружаете машину. И не забудьте импортировать корневой сертификат CA в хранилище Trusted Root Certification Authorities на клиенте — без этого будет ошибка доверия, даже если TLS уже работает.

Как настроить двухфакторную аутентификацию для RD Gateway?

Здесь хорошо работает схема с NPS (Network Policy Server) в роли RADIUS-прокси. Ставите роль NPS, переключаете RD Gateway на Central NPS для аутентификации — и дальше подключаете любой MFA-провайдер: Azure MFA NPS Extension, MultiFactor или multiOTP. В политиках NPS создаёте Connection Request Policy с требованием второго фактора. Мы в нескольких проектах именно так и делали — работает надёжно.

Буфер обмена не работает через RD Gateway — что делать?

Первым делом смотрите настройки Device Redirection в политике CAP — откройте RD Gateway Manager и убедитесь, что перенаправление clipboard там вообще разрешено. Параллельно проверьте клиент: в mstsc.exe на вкладке Local Resources Clipboard должен быть включён. Если всё стоит правильно, а буфер всё равно не работает — подключитесь к целевому серверу и перезапустите rdpclip.exe через диспетчер задач. Помогает в девяти случаях из десяти.

Можно ли использовать сертификат Let's Encrypt для RD Gateway?

Да, это именно то, что нужно делать в продуктивной среде. Берёте утилиту win-acme (wacs.exe) — она сама получает и обновляет сертификаты Let's Encrypt. Задачу на автопродление настраиваете в планировщике с интервалом 60 дней. Два обязательных условия: DNS-имя шлюза должно резолвиться на внешний IP сервера, и порт 80 — открыт для ACME challenge. Без этого автоматика просто не сработает.

Event ID 312 в логах RD Gateway — как исправить?

Event ID 312 — это почти всегда Kerberos. Проблема, с которой мы сталкивались неоднократно: имя сервера в поле Computer клиента mstsc не совпадает с CN или SAN сертификата шлюза. Проверьте это первым делом. Дальше — смотрите SPN для службы TSGateway командой setspn -L servername. Если у вас NLB, SPN обязательно должен быть зарегистрирован именно для виртуального имени кластера, а не для физического хоста. Пропустите этот момент — аутентификация будет падать стабильно.

IT-аутсорсинг для бизнеса

Нужна помощь с настройкой RD Gateway?

Команда IT Fresh развернёт защищённый шлюз удалённого доступа, настроит SSL-сертификаты и политики безопасности. Ваши сотрудники смогут безопасно работать из любой точки мира без VPN.

10+лет опыта
200+компаний
24/7поддержка