За замовчуванням у всіх операційних системах Windows для підключення по протоколу RDP (Remote Desktop Protocol / Віддалений робочий стіл) використовує порт TCP 3389.
Якщо ваш комп'ютер підключений безпосередньо до інтернету (наприклад, VDS сервер), або ви налаштували на своєму прикордонному маршрутизаторі перенаправлення порту 3389 / RDP в локальну мережу на комп'ютер або сервер з Windows, ви можете змінити стандартний RDP порт 3389 на будь-який інший. Змінивши номер RDP порту для підключення, ви можете заховати ваш RDP сервер від сканерів портів, зменшите ймовірність експлуатації RDP вразливостей (остання критична уразливість в RDP BlueKeep описана в CVE-2019-0708), зменшите кількість спроб віддаленого підбору паролів по RDP (не забуває періодично аналізувати логи RDP підключень), SYN і інших типів атак (особливо при відключеному NLA).
Заміну стандартного RDP порту можна використовувати, коли за маршрутизатором з одним білим IP адресою знаходиться кілька Windows комп'ютерів, до яких потрібно надати зовнішній RDP доступ. На кожному комп'ютері ви можете налаштувати унікальний RDP порт і налаштувати перенаправлення портів на маршрутизаторі на локальні комп'ютери (в залежності від номера RDP порту сесія перенаправляється на один з внутрішніх ПК).При виборі нестандартного номера порту для RDP зверніть увагу, що бажано не використовувати номери портів в діапазоні від 1 до 1023 (відомі порти) і динамічні порти з RPC діапазону (від 49152 до 65535).
Спробуємо змінити порт, на якому чекає підключення служба Remote Desktop на 1350. Для цього:
- Відкрийте редактор реєстру і перейдіть в гілку HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Terminal Server \ WinStations \ RDP-Tcp;
- Знайдіть DWORD параметр реєстру з ім'ям PortNumber. У цьому параметрі вказано порт, на якому чекає підключення служба Remote Desktop;
- Змініть значення цього порту. Я змінив RDP порт на 1350 в десятковому значенні (Deciamal); Можна змінити параметр реєстру за допомогою PowerShell:
Set-ItemProperty -Path "HKLM: \ System \ CurrentControlSet \ Control \ Terminal Server \ WinStations \ RDP-Tcp \" -Name PortNumber -Value 1350
- Якщо на вашому комп'ютері включений Windows Firewall, ви повинні створити нове правило, яке дозволяє вхідне підключення на новий RDP порт (якщо ви перенастроювати віддалений сервер через RDP, не створивши правило в брандмауері, ви втратите доступ до сервера). Ви можете створити дозволяє входить правило для нового TCP / UDP порту RDP вручну з консолі 'Брандмауер Захисника Windows' (firewall.cpl) Або за допомогою PowerShell команд:
New-NetFirewallRule -DisplayName "New RDP Port 1350" -Direction Inbound -LocalPort 1350 -Protocol TCP -Action allow
І:New-NetFirewallRule -DisplayName "New RDP Port 1350" -Direction Inbound -LocalPort 1350 -Protocol UDP -Action allow
- Перезавантажте комп'ютер або запустіть службу віддалених робочих столів командою:
net stop termservice & net start termservice
- Тепер для підключення до даного Windows комп'ютера по RDP, в клієнті mstsc.exe потрібно вказувати порт RDP підключення через двокрапку наступним чином:
Your_Computer_Name 1350
або по IP адресою192.168.1.100:1350
або з командного рядка:mstsc.exe / v 192.168.1.100:1350
Якщо для управління безліччю RDP підключень ви використовуєте менеджер RDP підключень RDCMan, заданий вами номер RDP порту для підключення можна вказати на вкладці "Connection Settings". - В результаті ви успішно підключіться до робочого столу віддаленого комп'ютера за новим номером RDP порту (за допомогою команди
nenstat -na | Find "LIST"
переконайтеся, що служба RDP тепер слухає на іншому порту).
Повний код PowerShell скрипт для зміни RDP порту, створення правила в брандмауері і перезапуску служби RDP на новому порту може виглядати так:
Write-host "Вкажіть номер нового RDP порту:" -ForegroundColor Yellow -NoNewline; $ RDPPort = Read-Host
Set-ItemProperty -Path "HKLM: \ SYSTEM \ CurrentControlSet \ Control \ Terminal Server \ WinStations \ RDP-TCP \" -Name PortNumber -Value $ RDPPort
New-NetFirewallRule -DisplayName "New RDP Port $ RDPPort" -Direction Inbound -LocalPort $ RDPPort -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "New RDP Port $ RDPPort" -Direction Inbound -LocalPort $ RDPPort -Protocol UDP -Action Allow
Restart-Service termservice -force
Write-host "Номер RDP порту змінений на $ RDPPort" -ForegroundColor Magenta
Можна змінити номер RDP віддалено на декількох комп'ютерах в домені AD (певної OU) за допомогою Invoke-Command і Get-ADComputer:
Write-host "Вкажіть номер нового RDP порту:" -ForegroundColor Yellow -NoNewline; $ RDPPort = Read-Host
$ PCs = Get-ADComputer -Filter * -SearchBase "CN = DMZ, CN = Computers, DC = winitpro, DC = ru"
Foreach ($ PC in $ PCs)
Invoke-Command -ComputerName $ PC.Name -ScriptBlock
param ($ RDPPort)
Set-ItemProperty -Path "HKLM: \ SYSTEM \ CurrentControlSet \ Control \ Terminal Server \ WinStations \ RDP-TCP \" -Name PortNumber -Value $ RDPPort
New-NetFirewallRule -DisplayName "New RDP Port $ RDPPort" -Direction Inbound -LocalPort $ RDPPort -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "New RDP Port $ RDPPort" -Direction Inbound -LocalPort $ RDPPort -Protocol TCP -Action Allow
Restart-Service termservice -force
Це інструкція по зміні стандартного RDP порту підійде для будь-якої версії Windows, починаючи з Windows XP (Windows Server 2003) і закінчуючи Windows 10 (Windows Server 2019).