把 RDP 端口从 3389 改掉:能解决什么,不能解决什么

把 RDP 从默认端口挪走能大幅降低攻击量,同时几乎不提供任何防护。动手之前,这两半都值得先弄明白。

阅读约 6 分钟

诚实的结论

把 RDP 从 3389 挪走,会让您的失败登录量在一夜之间下降大约 90%。它同时也不是一项安全控制措施,而把它当成安全措施,正是那些自以为「已经搞定了」的管理员把服务器丢掉的方式。

两句话都成立,因为它们回答的是不同的问题。量的下降是真实的、可测量的、有用的。而面对任何愿意花三十秒去看一眼的人,防护效果接近于零。

值得做吗?通常值得——作为降噪手段,在防御之外附加,而绝不是取代防御。

它确实能挡住什么

绝大部分 RDP 攻击流量来自非定向扫描器,它们只做一件事:在大片 IP 段上连接 3389 端口,对任何应答的机器尝试密码。它们不做端口扫描。对每个地址扫描 65535 个端口,成本比只查一个端口高出几个数量级,而 3389 上的机器已经足够多,根本没必要折腾。

换到 34519,您就彻底脱离了这个群体。曲线断崖式下跌,安全日志不再每隔几小时就轮转一次,在里面找到一条真实事件重新变得可能。

最后这一点常被低估。一份读得动的事件日志在事故处置时价值真金白银,而每天三千条失败记录的时候,您手上并没有这样一份日志。

它挡不住什么

任何扫描全端口范围的人,几分钟内就能找到您。无论 RDP 在哪个端口上,它的握手过程都极易识别,所以一台遍历所有端口并对应答内容做指纹识别的扫描器,第一次就能正确标注出您的服务。

Shodan 和 Censys 正是持续在全网做这件事,并把结果发布成可检索的索引。您那个非标准的 RDP 端口就在里面,任何人都能查到,而这只需要在您开放它之后的几天。

所以,面对非定向的机器人,改端口有效;面对专门选中您的人——竞争对手、前雇员、按行业名单逐个下手的勒索软件运营者——它只让对方多花几分钟。而对于弱密码、暴露在外的 SMB、未打补丁的主机,或是在别处泄露的凭据,它什么也做不了。

此外还有一个实打实的副作用:冷门端口会弄坏一些东西。允许出站 3389 的企业防火墙会拦下出站 34519,而您会从一位无法开展工作的用户那里得知这件事。

如何改端口而不把自己关在门外

端口存在注册表里,而且必须先让 Windows 防火墙知道它,然后才能重启服务——顺序必须如此,否则您会把自己从一台只能通过 RDP 访问的机器上断开。

选一个 10000 以上、没有被占用的端口,确认它空闲,先放行,再修改:

powershell
$NewPort = 34519

# 1. 确认该端口尚未被占用。
Get-NetTCPConnection -LocalPort $NewPort -ErrorAction SilentlyContinue

# 2. 先在防火墙放行——必须在服务迁移之前。
New-NetFirewallRule -DisplayName "RDP-$NewPort" -Direction Inbound `
  -Protocol TCP -LocalPort $NewPort -Action Allow

# 3. 让终端服务指向新端口。
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' `
  -Name PortNumber -Value $NewPort

# 4. 重启服务(这会断开您当前的会话)。
Restart-Service TermService -Force

改完之后

连接时明确指定端口——mstsc /v:server:34519——并更新一切保存了旧端口的地方:已保存的 RDP 文件、连接管理器、监控检查项、跳板机配置、团队文档。然后删除或收紧原先放行 3389 的规则,否则您等于什么也没得到。

在确认新端口能从您网络之外正常访问之前,不要删除旧规则。在局域网内两者都能用,而人们恰恰是这样说服自己「没问题」的。

该与什么搭配

改端口降低的是噪音。仍然需要有东西来处理那些抵达的尝试——而改完端口之后,抵达的尝试恰恰来自专门找您的人,也正是您真正需要在意的那部分。

这意味着还是之前那三件事:盯住失败登录、封禁越过阈值的来源、永远不要让封禁落到自己头上。RDP Protector 从注册表和监听套接字识别真实的 RDP 端口,而不是想当然地认为是 3389——因此已经迁移过的服务器无需任何配置即受保护,而且如果端口再次变更,规则会自动重建。

改端口,是为了拿到一份读得动的日志。保留防御,是为了应对无论如何都会找到您的流量。

FAQ

该把 RDP 改到哪个端口?
10000 以上任何空闲端口都行——34519、47820,能用就行。避开知名服务占用的端口,因为扫描器会专门探测它们;也避开 3390,那是所有人在 3389 之后第一个会试的。确定之前请用 Get-NetTCPConnection 确认没有程序在监听。
改 RDP 端口会让远程桌面客户端连不上吗?
不会,但每个客户端现在都必须写明端口:在计算机字段填 server:34519,或者使用 mstsc /v:server:34519。已保存的 .rdp 文件和连接管理器仍然保留旧端口,在更新之前会连接失败。允许出站 3389 的企业防火墙可能会直接拦下新端口,这是改完之后最常见的抱怨。
把 RDP 放在非标准端口上安全吗?
与放在 3389 上完全一样安全,只是背景噪音更少。端口不是访问控制手段:该服务可以通过握手过程识别出来,而 Shodan 会持续索引非标准端口上的 RDP。安全性来自于「谁在处理这些尝试」,而不是「它们从哪里进来」。
该改端口,还是干脆封禁攻击 IP?
封禁才是防御;改端口是让日志变得可读的卫生措施。如果只能做一件事,那就封禁。两件都做比只做一件更好:抵达的尝试更少,而抵达的那些会在 Windows 为其花费任何资源之前被拦下。

覆盖那些无论如何都会找到您的尝试

代理会识别 RDP 实际使用的端口,并封禁抵达该端口的来源。一台服务器永久免费,无需信用卡。