Windows Serverのリモートデスクトップ(RDP)ポート3389を変更する方法
リモートデスクトップを既定のTCP 3389から別のポートに移すと、公開されたWindowsサーバーに絶え間なく届く自動ログイン試行を手早く減らせます。このガイドでは、PowerShellでWindows ServerのRDPポートを変更する方法(2016/2019/2022対応)を、切り替え前のファイアウォール開放、うまくいかなかった時のVNCコンソールでの復旧まで含めて説明します。ヨハネスブルグ・モスクワ・東京・ソウルのJUSTGクラウドサーバーや専用サーバーでも手順は同じです。例ではポート40125、サーバーIP 203.0.113.10を使います。
ステップ1:リモートデスクトップ用の空きポートを決める
1025〜49151の範囲で、ほかのアプリが使っていない番号を選びます。49152〜65535はWindowsが外向き通信に使う動的ポート範囲なので避けてください。現在のRDPポートを確認し、選んだポートが空いていることを確かめます(2行目は何も表示されなければOK)。
Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber
Get-NetTCPConnection -LocalPort 40125 -ErrorAction SilentlyContinue作業前に、クライアントエリア(製品とサービス → 対象サーバー → 管理/コントロールパネル)からVNCコンソールを別タブで開いておきましょう。新しいポートで入れなかった時の入口になります。
ステップ2:先にWindowsファイアウォールで新しいRDPポートを開く
レジストリを変える前に、必ず新しいポートを許可しておきます。順番を逆にすると、サービス再起動の瞬間に締め出されます。RDPはセッションにTCP、遅延の大きい回線での快適さのためにUDPも使うので、両方の規則を作成します。
$port = 40125
New-NetFirewallRule -DisplayName "RDP custom TCP $port" -Direction Inbound -Protocol TCP -LocalPort $port -Action Allow
New-NetFirewallRule -DisplayName "RDP custom UDP $port" -Direction Inbound -Protocol UDP -LocalPort $port -Action Allowサーバーの手前に別のファイアウォール(専用サーバーのハードウェアファイアウォールなど)がある場合は、そちらでも同じポートを許可してください。
ステップ3:レジストリのPortNumberを変更してTermServiceを再起動する
RDPの待ち受けポートはRDP-Tcpキーの PortNumber に保存されています。値を書き換えてRemote Desktop Servicesを再起動します。UmRdpServiceが依存しているため -Force が必要です。
$port = 40125
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber -Value $port
Restart-Service -Name TermService -Forceステップ4:「IP:ポート」で接続して確認する
リモートデスクトップクライアントには、サーバーアドレスの後ろにコロンとポート番号を付けて入力します。PowerShellならポートのテストとクライアント起動をまとめて行えます。
# On the server (VNC console or new RDP session)
Get-NetTCPConnection -LocalPort 40125 -State Listen
# On your PC
Test-NetConnection -ComputerName 203.0.113.10 -Port 40125
mstsc /v:203.0.113.10:40125IPv6の場合はアドレスを角かっこで囲みます([2001:db8::10]:40125)。保存済みの.rdpファイルやパスワード管理ツール、同僚の接続設定も忘れずに更新しましょう。
ステップ5:3389を閉じて接続元を制限する
新しいポートでログインできたら、既定のリモートデスクトップ規則を無効にして3389を閉じます。必要に応じて、新しい規則の接続元を社内のアドレス範囲に絞り込みます。
# Built-in Remote Desktop rules (language-independent group ID)
Disable-NetFirewallRule -Group "@FirewallAPI.dll,-28752"
# Optional: only allow your own IP to reach the new port
Set-NetFirewallRule -DisplayName "RDP custom TCP 40125" -RemoteAddress 198.51.100.0/24ステップ6:締め出された時はVNCコンソールで元に戻す
新しいポートで接続できない場合は、VNCコンソールからログインして既定の設定に戻します。
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber -Value 3389
Enable-NetFirewallRule -Group "@FirewallAPI.dll,-28752"
Restart-Service -Name TermService -Force数秒でリモートデスクトップは3389に戻ります。そのうえで、ポート番号の入力ミスや外部ファイアウォールの設定に注意しながらステップ2〜4をやり直してください。
よくある質問
RDPポートを変更した後、Windows Serverの再起動は必要ですか?
不要です。TermServiceサービスの再起動だけで反映されます。サービスが再起動できない時はOSごと再起動しても構いません。
ポートを変えたのに、RDPがまだ3389で待ち受けています。
グループポリシーやリモート管理ツールが値を書き戻していないか、また編集したのが RDP-Tcp キーで間違いないかを確認し、ステップ4の確認コマンドを再度実行してください。
RDPポートを変えると中国やアフリカからの速度に影響しますか?
影響しません。遅延はルーティングで決まり、ポート番号とは無関係です。JUSTGのモスクワと南アフリカは中国電信CN2 GIA、東京は中国電信の高品質回線で、どのポートでも同じ経路を通ります。
ポート変更後もリモートデスクトップにつながらない場合は、選んだポート番号とステップ4の結果を添えてチケットを送信し、JUSTGテクニカルサポートへご連絡ください。