Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法

すべてのWindows OSにおいて、RDP(リモートデスクトッププロトコル)に割り当てられるデフォルトのポートはTCP 3389です。WindowsでRDPを有効化すると、TermService(リモートデスクトップサービス)がポート3389で接続の待ち受けを開始します。本記事では、レジストリエディターとPowerShellを使用して、Windows 7/8/10/11などのクライアントOSおよびWindows Server上のRDPポート番号を変更する具体的な手順を解説します。

なお、最近のバージョンのWindowsでは、TCPに加えて同じポート番号のUDP 3389もリモートデスクトップ接続に使用されている点に注意してください。

【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法

RDPポートを変更するメリットと注意点

WindowsのRDPポートは、3389から任意のポート番号へ自由に変更できます。これは主に、ネットワーク上でTCP/3389が開放されたWindowsホストを探すポートスキャナーから、RDP/RDSサーバーを隠したい場合に活用されます。

ポートを変更することで、RDPの脆弱性を突いた攻撃(重大な脆弱性としてはCVE-2019-0708で知られる「BlueKeep」があります)を受けるリスクを減らせるほか、RDPへのブルートフォース攻撃(定期的なRDP接続ログの分析を忘れずに行いましょう)や、NLAが無効な場合のSYNフラッドなどの攻撃リスクも低減できます。特に、インターネットに直接接続されているVPS/VDSや、境界ルーターがLAN内のWindowsホストへ3389/RDPを転送しているネットワーク環境で、ポート変更が実施されることが多いです。

ただし、ポート番号を変更しても、RDPポートをインターネットに直接公開することが安全になるわけではありません。ポートスキャナーはシグネチャの特徴から、新しいポート上のRDPリスナーを検出できてしまうためです。外部から社内PCへRDPアクセスを許可したい場合は、VPN、RD Web Access、RDゲートウェイなど、より安全性の高い接続手段の利用を強くおすすめします。

また、非標準のRDPポートを選ぶ際は、1~1023の範囲(ウェルノウンポート)の使用は避けてください。49152~65535のRPC動的ポート範囲、または他のサービスやアプリケーションが使用していない1024~49151の範囲から選択するのが基本です。

Windowsでリモートデスクトップのポートを変更する手順

ここでは例として、リモートデスクトップサービスの待ち受けポートを1350に変更します。手順は以下の通りです。

  1. レジストリエディター(regedit.exe)を開き、次のキーへ移動します:
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
  2. PortNumberという名前のDWORD値を探します。この値がリモートデスクトップサービスの待ち受けポートを示しており、デフォルトは3389(10進数)です。
  3. PortNumberの値を変更します。ここでは1350(10進数)に設定しました。 【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法 PowerShellでレジストリ値を変更することもできます:
    Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\" -Name PortNumber -Value 1350
  4. Windowsファイアウォールが有効になっている場合は、新しいRDPポートへの受信接続を許可するルールを作成する必要があります。特に、RDP経由でリモートのWindowsホストを再設定する場合は、TermServiceの再起動に必ず許可ルールを作成してください。順序を誤るとサーバーへのアクセスを失う恐れがあります。
  5. 新しいTCP/UDPポート用の受信許可ルールは、Windows Defenderファイアウォール管理コンソール(firewall.cpl)から手動で作成できるほか、NetSecurityモジュールのPowerShellコマンドレットでも作成できます:
    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
    【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法
  6. コンピューターを再起動するか、次のコマンドでリモートデスクトップサービスを再起動します:
    net stop termservice & net start termservice 【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法
  7. 新しいポートでリモートデスクトップに接続するには、mstsc.exeクライアントでコロン区切りによりポートを指定します。コンピューター名の場合はRDPComputerName:1350、IPアドレスの場合は192.168.1.10:1350、コマンドプロンプトからはmstsc.exe /v 192.168.1.10:1350のように実行します。
    複数のRDP接続をRDCManで管理している場合は、「接続設定」タブで設定済みのRDPポートを指定できます。 【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法
  8. 以上で、新しいRDPポートを使ってリモートデスクトップに正常に接続できるようになります。netstat –na | Find "LIST"コマンドを実行すれば、リモートデスクトップサービスが新しいポートで待ち受けていることを確認できます。 【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法

なお、UDP側のRDPポート番号も自動的に1350へ変更されます(TCPViewツールで確認可能です)。

【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法

Test-NetConnectionコマンドを使えば、従来のRDPポート3389が閉じられたこと(TcpTestSucceeded: False)を確認できます:

Test-NetConnection 192.168.3.102 -port 3389 |select TcpTestSucceeded

以降のRDP接続には、新しいポート1350を使用してください。

【Windows】リモートデスクトップ(RDP)のデフォルトポート3389を変更する方法

注意: デフォルトのRDP待ち受けポート番号を変更すると、リモートアシスタンスやWindows 10のシャドウRDP接続、Windows ServerにおけるRDSシャドウセッション機能に支障が生じる場合があります。

ドメイン参加コンピューターのRDPポートを変更したい場合は、グループポリシー(GPO)を活用できます。新しいGPOを作成し、PortNumberレジストリパラメーターに新しいRDPポート番号を設定して、ドメイン内のコンピューターへ一括配布しましょう。

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コマンドレットを使って接続します:

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コマンドレットで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 UDP -Action Allow
Restart-Service termservice -force
}
}

本ガイドで紹介したRDPポート変更の手順は、Windows XP(Windows Server 2003)以降から、最新のWindows 10、Windows 11、Windows Server 2022まで、あらゆるWindowsバージョンに適用できます。

  1. Windows 10/11で新規フォルダーの既定名を変更する方法【レジストリ活用】

    Windowsのフォルダーは、複数のファイルやフォルダーをまとめて保存しておくための便利な収納スペースです。家の中の収納ボックスのように、いろいろな物を放り込んでおけば、デスクトップやドキュメントの中身をすっきりと整理できます。 Windowsで新しいフォルダーを作成すると、既定では「新しいフォルダー」という名前が自動的に付けられます。それ自体は大きな問題ではありませんが、同じ名前のフォルダーを何個も作ると、どれに何が入っているのか分かりにくくなり、管理が煩雑になりがちです。 幸い、この既定のフォルダー名は簡単に変更できます。本記事では、Windowsレジストリを使って既定のフォルダー名を好き

  2. Windows 11で既定のターミナルを変更する方法【初心者向け完全ガイド】

    Windows Terminalは、MicrosoftがWindows 11向けに開発したマルチタブ対応のターミナルエミュレーターで、従来のWindows Consoleの後継として位置づけられています。タブごとにコマンドプロンプトやPowerShellなど、あらゆるコマンドラインアプリケーションを実行でき、コマンドプロンプト、PowerShell、WSL、SSH、Azure Cloud Shell Connectorなどがあらかじめ設定済みです。Windows 11では、既定のコマンドラインツールとしてPowerShellやコマンドプロンプトに代わる標準的な存在となっています。このアプリには