在使用阿里云部署 Windows 实例时,大多数人都习惯于直接通过远程桌面连接。但你是否知道,那个熟悉的 TCP 3389 端口特征,正赤裸裸地暴露在公网之下,给无数居心叵测的攻击者提供了可乘之机。面对阿里云不提供免费端口映射的现状,很多新手往往望而却步。其实,安全防护并不复杂。这篇文章将为你揭示一种极简的方法,让你既能保留远程桌面的便捷性,又能轻松修改访问端口,彻底告别端口暴露的风险。
方法一 直接修改 Windows 远程桌面(但我不建议)
Windows 远程桌面端口是可以配置的,但是我不建议这么做。
首先,要配置注册表,这样对不熟悉的人有一定的操作风险;
其次,这种方法不便于移植,如果重新配置必须要重新操作一次;
第三,操作过程中远程桌面会断开,如果您正在使用远程桌面操作会比较尴尬,操作失败再重新登录比较麻烦。
如果要使用这个方法,请继续往下看,如果使用我建议的方法,可以跳到“方法二”。
以下提供一个把远程桌面默认端口与 3389 改成 3390 的方法
第一步:改注册表
Win + R 打开运行,输入 regedit,导航到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
找到 PortNumber,双击修改:
- 选 十进制
- 填入新端口,比如
3390(建议选 1024–65535 之间,避开常用端口)
第二步:防火墙放行新端口
打开 PowerShell(管理员),运行:
New-NetFirewallRule -DisplayName "RDP 新端口" -Direction Inbound -Protocol TCP -LocalPort 3390 -Action Allow
第一步:把 3390 换成你实际选的端口。
第三步:重启远程桌面服务
PowerShell(管理员)中运行:
Restart-Service TermService -Force
或者重启电脑也行。
第四步:阿里云安全组放行
登录阿里云控制台 → ECS 实例 → 安全组 → 添加入方向规则:
| 协议 | 端口范围 | 授权对象 |
|---|---|---|
| TCP | 3390 | 你准入的 IP /32 (推荐限制来源,如果不限制填 0.0.0.0/0) |
第五步:连接测试
mstsc 连接时加上端口号:
服务器IP:3390
⚠️ 注意事项
- 别急着关当前远程会话——先开一个新连接测试新端口能通,确认没问题再断开旧的,否则可能把自己锁在外面;
- 旧端口可以保留也可以关——确认新端口可用后,可以把 3389 的防火墙规则删掉:powershell
# 查找 3389 的防火墙规则 Get-NetFirewallRule -DisplayName "*3389*" | Format-Table DisplayName, Enabled; - 阿里云安全组也要同步改——如果安全组没放行新端口,从外部连不上。
方法二 同时支持两个远程桌面端口,通过阿里云安全组关闭 3389 端口
问:Windows 远程桌面支持同时打开两个 TCP 监听端口吗?
答:Windows 远程桌面的监听端口由注册表 PortNumber 控制,它是单个值,不能同时填两个端口,但有变通方案。
第一步:用 netsh 端口转发
把 RDP 改到新端口(比如 3390),然后用 Windows 自带的 netsh portproxy 把 3389 也转发过去:
# RDP 已改为监听 3390
# 把 3389 的流量转发到 3390
netsh interface portproxy add v4tov4 listenport=3389 connectport=3390 connectaddress=127.0.0.1
# 查看转发规则
netsh interface portproxy show all
# 防火墙两个端口都放行
New-NetFirewallRule -DisplayName "RDP 3389" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow
New-NetFirewallRule -DisplayName "RDP 3390" -Direction Inbound -Protocol TCP -LocalPort 3390 -Action Allow
测试 3389 和 3390 都能连上远程桌面。
在不需要时,删除转发规则,例如删除 3390 端口。
netsh interface portproxy delete v4tov4 listenport=3390
第四步:阿里云安全组放行
登录阿里云控制台 → ECS 实例 → 安全组 → 添加入方向规则:
| 协议 | 端口范围 | 授权对象 |
|---|---|---|
| TCP | 3390 | 你准入的 IP /32 (推荐限制来源,如果不限制填 0.0.0.0/0) |
同时禁用 3389 端口。
第五步:连接测试
mstsc 连接时加上端口号:
服务器IP:3390
⚠️ 注意
netsh portproxy重启后依然生效(写在系统配置里),但如果你重置网络栈(netsh int ip reset)会被清掉;- 如果目的是兼容旧客户端(有些同事习惯连 3389),这个方案够用;如果目的是安全,建议只保留新端口,关掉 3389。
