Смена RDP-порта в Windows без перезагрузки сервера

Опубликовано Обновлено 3 мин. чтения

Короткий скрипт PowerShell меняет RDP-порт в Windows, создаёт нужное правило в брандмауэре и перезапускает службу удалённых рабочих столов, причём без перезагрузки сервера.

В этом руководстве показано, как через PowerShell изменить порт удалённого рабочего стола (RDP) в Windows, например на Windows Server, как соответствующим образом настроить брандмауэр Windows и перезапустить службу удалённых рабочих столов. Перезагружать весь сервер для этого не нужно.

Зачем менять RDP-порт?

Стандартный порт для удалённого рабочего стола — TCP 3389, и именно его круглосуточно сканируют автоматические боты. Любой сервер Windows, который стоит в интернете с открытым портом 3389, за считаные часы набирает сотни неудачных попыток входа. Это не только нагружает систему: при активной политике блокировки учётных записей из-за таких попыток блокируется и ваша собственная учётная запись.

Изменённый порт выводит сервер из этих массовых сканирований. Однако он не заменяет остальные меры защиты: надёжный пароль, включённая проверка подлинности на уровне сети (NLA) и правило файрвола, ограничивающее RDP вашим собственным IP-адресом, остаются такими же важными.

Что потребуется

  • Система Windows с включённым удалённым рабочим столом, например Windows Server 2022 или Windows Server 2025
  • Права администратора в этой системе
  • Свободный порт выше 1024, в примере используется 33445
  • Доступ к KVM-консоли в личном кабинете как запасной путь на случай, если соединение после изменения заработает не сразу

Запуск PowerShell от имени администратора

Сначала откройте Windows PowerShell от имени администратора. Для этого щёлкните в меню «Пуск» правой кнопкой мыши по пункту «Windows PowerShell» и выберите «Запуск от имени администратора». Без повышенных прав скрипт не сможет изменить ни реестр, ни правила брандмауэра.

Скрипт PowerShell для смены RDP-порта

Вставьте следующий скрипт в PowerShell. Номер порта в первой строке заранее замените на нужный вам:

# Порт 33445 приведён только как пример. Вы можете использовать любой свободный порт.

$newPort = 33445
$regPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp'
Set-ItemProperty -Path $regPath -Name 'PortNumber' -Value $newPort
if (-not (Get-NetFirewallRule -DisplayName "RDP Port $newPort" -ErrorAction SilentlyContinue)) {
    New-NetFirewallRule `
      -DisplayName "RDP Port $newPort" `
      -Direction Inbound `
      -Protocol TCP `
      -LocalPort $newPort `
      -Action Allow
}
Restart-Service -Name TermService -Force
Write-Host "The RDP port has been changed."

Что делает скрипт по шагам

  1. Задаёт новый номер порта в переменной $newPort.
  2. Записывает это значение в параметр реестра PortNumber в разделе HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp.
  3. Создаёт в брандмауэре Windows подходящее правило, которое разрешает входящие TCP-соединения на новом порту. Если правило уже существует, повторно оно не создаётся.
  4. Перезапускает службу удалённых рабочих столов (TermService), чтобы изменение вступило в силу сразу.

Подключение после изменения

При перезапуске службы все текущие RDP-соединения немедленно разрываются. Это нормально. Для нового подключения в RDP-клиенте указывают уже не только адрес сервера, а сочетание адреса и порта:

<IP-адрес>:<новый-порт>

Для нашего примера это выглядит так:

192.168.1.100:33445

Проверка текущего RDP-порта

Какой порт задан сейчас, в любой момент можно прочитать прямо из реестра:

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber

Что стоит сделать после этого

  • Настроить внешний файрвол: Если перед сервером стоит ещё один, внешний файрвол, новый порт нужно открыть и там. Иначе сервер останется недоступным, несмотря на корректное правило Windows.
  • Проверить старое правило для порта 3389: Существующее правило «Удаленный рабочий стол» остаётся активным. Отключите его, если порт 3389 больше не должен быть доступен.
  • Ограничить доступ: Эффективнее всего ограничить RDP в файрволе вашим собственным IP-адресом. Тогда все автоматизированные атаки уходят в никуда.
  • Учётная запись уже заблокирована? Если ваша учётная запись оказалась заблокирована из-за предыдущих попыток взлома, поможет наше руководство Устранение ошибки RDP «Учётная запись заблокирована».

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

Нужно ли перезагружать сервер после смены RDP-порта?
Нет. Достаточно перезапустить службу TermService, и скрипт делает это автоматически. Все открытые RDP-сессии при этом будут разорваны.
Какой порт выбрать для RDP?
Выберите свободный порт выше 1024, например 33445. Избегайте портов, уже занятых другими службами, и запишите номер: он понадобится при каждом подключении.
Как подключиться после изменения?
В RDP-клиенте укажите адрес сервера вместе с новым портом, то есть в формате IP-адрес:порт. Для нашего примера это 192.168.1.100:33445.
Действительно ли другой RDP-порт защищает от атак?
Изменённый порт выводит сервер из массовых сканирований, нацеленных на порт 3389, и заметно снижает число попыток входа. Но он не заменяет надёжный пароль, проверку подлинности на уровне сети (NLA) и ограничение по IP в файрволе.
После изменения сервер стал недоступен, что делать?
Чаще всего дело в том, что новый порт не открыт на внешнем файрволе. Подключитесь к серверу через KVM-консоль в личном кабинете и проверьте там правило брандмауэра, а также значение порта в реестре.

Windows Server Windows RDP RDP-порт Удалённый рабочий стол PowerShell Файрвол Безопасность сервера