모든 Windows 운영 체제에서 RDP(원격 데스크톱 프로토콜)의 기본 포트는 TCP 3389로 지정되어 있습니다. Windows에서 RDP를 활성화하면 TermService(원격 데스크톱 서비스)가 3389번 포트에서 연결을 대기하기 시작합니다. 이 글에서는 레지스트리 편집기와 PowerShell을 사용하여 Windows 데스크톱 버전(7/8/10/11) 및 Windows Server에서 기본 RDP 포트 번호를 변경하는 방법을 소개합니다.
참고로 최신 버전의 Windows는 TCP뿐만 아니라 동일한 포트 번호(3389)의 UDP도 원격 데스크톱 연결에 함께 사용합니다.
RDP 포트를 변경해야 하는 이유
Windows에서 기본 RDP 포트인 3389를 다른 포트로 변경할 수 있습니다. 이는 주로 네트워크상에서 TCP/3389 포트가 열려 있는 Windows 호스트를 찾는 포트 스캐너로부터 RDP/RDS 호스트를 숨기고 싶을 때 사용됩니다.
RDP 포트를 변경하면 RDP 취약점 악용 가능성(마지막 치명적 취약점인 BlueKeep은 CVE-2019-0708에 설명되어 있음)을 줄이고, RDP 무차별 대입(brute force) 공격 횟수를 감소시키며, NLA가 비활성화된 경우 SYN 공격 등 다른 유형의 공격 위험도 낮출 수 있습니다. 일반적으로 인터넷에 직접 연결된 컴퓨터(VPS/VDS)나, 경계 라우터가 3389/RDP 포트를 내부망의 Windows 호스트로 포워딩하는 네트워크 환경에서 RDP 포트를 변경하는 경우가 많습니다.
다만 포트 번호를 변경하더라도 호스트의 RDP 포트를 인터넷에 직접 개방하는 것은 안전하지 않습니다. 포트 스캐너를 사용하면 공격자가 시그니처 기반으로 새 포트에서 대기 중인 RDP 리스너를 발견할 수 있습니다. 네트워크상의 컴퓨터에 RDP 접근을 허용하려면 VPN, RD Web Access, RDS Gateway 등 보안 연결 도구를 사용하는 것이 좋습니다.
비표준 RDP 포트를 선택할 때는 1~1023 범위의 잘 알려진 포트(well-known ports) 사용을 피해야 합니다. RPC 동적 포트 범위(49152~65535)의 포트를 사용하거나, 다른 서비스나 애플리케이션이 사용하지 않는 1024~49151 범위의 포트를 선택하는 것이 좋습니다.
Windows에서 원격 데스크톱 포트 변경 방법
이 예시에서는 원격 데스크톱 서비스가 대기하는 포트 번호를 1350으로 변경해 보겠습니다. 절차는 다음과 같습니다.
- 레지스트리 편집기(
regedit.exe)를 열고 다음 레지스트리 키로 이동합니다.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp - PortNumber라는 이름의 DWORD 값을 찾습니다. 이 값은 원격 데스크톱 서비스가 대기 중인 포트를 나타내며, 기본값은 10진수 3389입니다.
- 이 값의 데이터를 변경합니다. 여기서는 RDP 포트를 1350(10진수)으로 변경했습니다.
PowerShell로도 레지스트리 값을 변경할 수 있습니다:Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\" -Name PortNumber -Value 1350 - 컴퓨터에서 Windows 방화벽이 활성화되어 있다면, 새 RDP 포트로의 인바운드 연결을 허용하는 새 규칙을 만들어야 합니다. RDP를 통해 원격 Windows 호스트를 재구성하는 경우, TermService를 재시작하기 전에 반드시 방화벽 허용 규칙을 먼저 생성하세요. 그렇지 않으면 서버에 대한 접근 권한을 잃게 됩니다.
- 새 TCP/UDP RDP 포트에 대한 인바운드 허용 규칙은 Windows Defender 방화벽 콘솔(
firewall.cpl)에서 수동으로 만들거나, NetSecurity 모듈의 PowerShell cmdlet을 사용하여 생성할 수 있습니다:New-NetFirewallRule -DisplayName "NewRDPPort-TCP-In" -Direction Inbound -LocalPort 1350 -Protocol TCP -Action allow
New-NetFirewallRule -DisplayName "NewRDPPort-UDP-In" -Direction Inbound -LocalPort 1350 -Protocol UDP -Action allow - 컴퓨터를 재부팅하거나 다음 명령으로 원격 데스크톱 서비스를 재시작합니다:
net stop termservice & net start termservice - 이 Windows 호스트에 원격 데스크톱으로 연결하려면 mstsc.exe 클라이언트에서 콜론(:)을 사용하여 새 RDP 연결 포트를 지정해야 합니다. 컴퓨터 이름 기준:
RDPComputerName:1350, IP 주소 기준:192.168.1.10:1350, 또는 명령 프롬프트에서:mstsc.exe /v 192.168.1.10:1350
RDCMan으로 여러 RDP 연결을 관리하는 경우, Connection Settings 탭에서 구성한 RDP 포트를 지정할 수 있습니다. - 이제 새 RDP 포트를 사용하여 원격 데스크톱에 성공적으로 연결됩니다. 다음 명령으로 원격 데스크톱 서비스가 새 포트에서 대기 중인지 확인할 수 있습니다:
netstat –na | Find "LIST"
UDP RDP 포트 번호도 자동으로 1350으로 변경됩니다(TCPView 도구로 확인할 수 있습니다).
Test-NetConnection 명령을 사용하여 기본 RDP 포트 3389가 이제 닫혀 있는지 확인할 수 있습니다(TcpTestSucceeded: False):
Test-NetConnection 192.168.3.102 -port 3389 |select TcpTestSucceeded
이후에는 RDP 연결 시 새 포트인 1350을 사용해야 합니다.
주의: 기본 RDP 대기 포트 번호를 변경하면 원격 지원(Remote Assistance), Windows 10의 섀도우 RDP 연결, Windows Server의 RDS 섀도잉 사용 시 문제가 발생할 수 있습니다.
도메인에 가입된 컴퓨터의 RDP 포트 번호를 변경하려면 그룹 정책(Group Policy) 기능을 활용할 수 있습니다. 새 GPO를 만들어 도메인 컴퓨터들에 새 RDP 포트 번호가 담긴 PortNumber 레지스트리 매개변수를 배포하면 됩니다.
PowerShell로 RDP 대기 포트 변경하기
RDP 포트 번호 변경, 방화벽 규칙 생성, 원격 데스크톱 서비스 재시작까지 한 번에 처리하는 완전한 PowerShell 스크립트는 다음과 같습니다:
Write-host "Specify the number of your new RDP port: " -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 "NewRDPPort-TCP-In-$RDPPort" -Direction Inbound –LocalPort $RDPPort -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "NewRDPPort-UDP-In-$RDPPort" -Direction Inbound –LocalPort $RDPPort -Protocol UDP -Action Allow
Restart-Service termservice -force
Write-host "The number of the RDP port has been changed to $RDPPort " -ForegroundColor Magenta
원격 컴퓨터의 RDP 포트 번호도 변경할 수 있습니다. 이를 위해서는 원격 컴퓨터에서 WinRM을 활성화한 후, Invoke-Command cmdlet을 사용하여 해당 컴퓨터에 연결하면 됩니다:
Invoke-Command -ComputerName wksname112 -ScriptBlock {Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TCP\" -Name PortNumber -Value 1350}
AD 도메인 내 여러 컴퓨터(특정 OU)의 RDP 포트를 원격으로 변경해야 하는 경우, 다음 스크립트를 사용하세요(Get-ADComputer cmdlet으로 OU 내 컴퓨터 목록을 가져올 수 있습니다):
Write-host "Specify the number of your new RDP port: " -ForegroundColor Yellow -NoNewline;$RDPPort = Read-Host
$PCs = Get-ADComputer -Filter * -SearchBase "CN=IT,CN=Computers,CN=NY,DC=woshub,DC=com"
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 "NewRDPPort-TCP-In-$RDPPort" -Direction Inbound –LocalPort $RDPPort -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "NewRDPPort-UDP-In-$RDPPort" -Direction Inbound –LocalPort $RDPPort -Protocol TCP -Action Allow
Restart-Service termservice -force
}
이 기본 RDP 포트 변경 가이드는 Windows XP(Windows Server 2003)부터 최신 Windows 10, Windows 11, Windows Server 2022 빌드까지 모든 Windows 버전에 적용됩니다.