Windowsのリモートデスクトップ接続では、リモート接続を受け付ける側のマシンは、デフォルトでTCPの3389番ポートで接続を待ち受けています。
ですが、万が一悪意のある第三者にリモートデスクトップ接続を試行された場合、デフォルトのポート番号のままだと、認証画面が表示され、そのマシンでリモートデスクトップ接続が有効になっていることが簡単に分かり、不正アクセスの危険性があるため、第三者にアクセスされる可能性があるWindowsマシンでリモートデスクトップ接続を有効化するときは、待ち受けポート番号をデフォルトの3389番から変更することで、リモートデスクトップ接続が有効になっていることを分かりにくくして、セキュリティを強化することができます。
そこでここではWindows 10を例に、リモートデスクトップ接続の待ち受けポート番号を変更する方法を解説します。
目次
待ち受けポート番号の変更
ここからの設定は、リモートデスクトップ接続を待ち受けるマシンで行います。
リモートデスクトップ接続の待ち受けポート番号を変更するには、レジストリで設定します。
レジスト設定は、レジストリエディターからGUI操作で設定することもできますが、ここではPowerShellの「Set-ItemProperty」コマンドレットを使って設定します。
設定は、管理者権限でPowerShellを起動し、以下のコマンドを実行し、コマンドの「XXXXX」部分に、待ち受けに利用する任意のポート番号を指定します。
PS> Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber" -Type Dword -Value "XXXXX"
ポート番号は、他のサービスやアプリケーションで利用しているポート番号と競合しないように49152~65535の間から選ぶのが良いでしょう。
コマンドを実行したら設定を反映させるために、Windowsを再起動すれば設定完了です。
ファイアウォール設定の変更
次に、上で設定したポート番号でリモートデスクトップ接続できるようファイアウォールの設定を変更します。
Windowsに標準搭載されているファイアウォール機能を利用している場合は、新しい受信の規則を追加(TCP用とUDP用の2つ)します。
受信の規則の追加は、管理者権限でPowerShellを起動して、以下のコマンドを順に実行し、コマンドの「XXXXX」の部分には、上記のレジストリ設定で指定したポート番号を入力します。
PS> New-NetFirewallRule -DisplayName "@RDP_TCP" -Profile Any -Direction Inbound -Protocol TCP -LocalPort XXXXX -Action Allow
PS> New-NetFirewallRule -DisplayName "@RDP_UDP" -Profile Any -Direction Inbound -Protocol UDP -LocalPort XXXXX -Action Allow
新しいポート番号でリモートデスクトップ接続できることを確認したら、デフォルトのファイアウォールの規則は無効化しておきます。
PS> Disable-NetFirewallRule -DisplayName "リモート デスクトップ - ユーザー モード (TCP 受信)"
PS> Disable-NetFirewallRule -DisplayName "リモート デスクトップ - ユーザー モード (UDP 受信)"
サードパーティーのセキュリティ対策ソフトを利用している場合は、セキュリティ対策ソフトで新しいポート番号でリモートデスクトップ接続を許可するよう設定します。
接続確認
待ち受けポート番号を変更したら、実際に新しいポート番号でリモートデスクトップ接続できるか確認します。
待ち受けポート番号をデフォルトから変更した場合は、リモートデスクトップ接続の画面で接続先マシン名を入力する欄に、接続先マシン名とポート番号を合わせて「接続先マシン名:ポート番号」と入力します。
たとえば、接続先マシン名が「remotepc」でポート番号が「45678」なら「remotepc:45678」と入力します。
トラブルシュート
ポート番号の変更後、新しいポート番号でリモートデスクトップ接続できない時は、以下の方法で状況を確認できます。
リモートデスクトップ接続を待ち受けるマシンでコマンドプロンプトを開き、以下のコマンドを実行します。
> netstat -ano | find ":<設定したポート番号>"
ここで何も表示されない場合は、正しくポート番号が変更されていない可能性があるので、設定内容を再確認してみましょう。
netstatコマンドを実行すると、設定したポート番号で待ち受けているプロセスIDを確認できるので、そのプロセスIDを基に、以下のコマンドを実行します。
> tasklist /svc /fi "PID eq <表示されたプロセスID>"
表示されたサービスの名称が「TermService」であれば、正しく設定されています。
ここで違うサービス名が表示されている場合は、指定したポート番号が別のサービスやアプリケーションによって利用されている可能性があるので、別のポート番号で設定し直してみましょう。