−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS
开始使用

如何保护 Windows VPS 上的 RDP:NLA、账户锁定和 IP 白名单

五个 PowerShell 步骤,让 Windows Server 2022 VPS 的 RDP 从“对所有人开放”变成“只响应你”:网络级身份验证、账户锁定、覆盖 3389 所有规则的 IP 白名单,以及查看谁在尝试登录的方法。

对整个互联网开放的 RDP 端口,在服务器启动几分钟后就会开始收到密码猜测。长密码能挡住,但每次猜测仍是一次登录尝试,会填满事件日志,也给下一个 RDP 漏洞送上攻击入口。五个步骤就能解决。每一步都是一条 PowerShell 命令,全部在发布前于我们的 Windows Server 2022 镜像上运行过。

通过 RDP 以管理员身份打开 PowerShell(如何连接),按顺序操作。第 4 步放到最后:只有这一步可能把你自己锁在外面。

1. 使用长且唯一的密码

如果你还在用首次登录的密码,请在控制面板中改成一个长密码(20 位以上,由密码管理器生成)。下面所有步骤都假设密码本身无法被猜中。

2. 开启网络级身份验证(NLA)

开启 NLA 后,Windows 会在创建会话、绘制登录界面之前先验证你的凭据。未经认证的连接永远到不了桌面代码,而最著名的 RDP 漏洞恰恰都在那里。查看当前状态:

(Get-CimInstance -Namespace root/cimv2/TerminalServices -ClassName Win32_TSGeneralSetting -Filter "TerminalName='RDP-tcp'").UserAuthenticationRequired

1 表示 NLA 已开启。如果看到 0,就开启它:

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 1

Windows、macOS 和 Linux(xfreerdp)上当前的远程桌面客户端都支持 NLA。下次连接时,会在远程画面出现前先要求输入密码。

3. 多次失败后锁定账户

Windows Server 2022 的默认安装无论输错多少次密码,都不会锁定账户。自 2026 年 10 月 24 日起用我们的镜像安装的服务器已设好下面的上限;更早的服务器请自行设置:

net accounts /lockoutthreshold:5 /lockoutwindow:15 /lockoutduration:15
net accounts

15 分钟内输错 5 次,账户会被锁定 15 分钟。我们测试过:5 次失败后,普通用户和内置的 Administrator 都被锁定了。锁定会自动解除,所以就算早上频繁打错字,你损失的也只是一刻钟,而不是服务器。

4. 只允许你的 IP 访问 RDP

这一步能消除几乎所有噪音。Windows 防火墙规则接受远程地址列表,填入你自己的地址即可。在任意一个“查询我的 IP”页面看到当前的公网 IP,然后:

$myIp = '203.0.113.10'   # your public IP; several: '203.0.113.10','198.51.100.0/24'
Get-NetFirewallPortFilter | Where-Object LocalPort -eq 3389 | Get-NetFirewallRule | Set-NetFirewallRule -RemoteAddress $myIp

这条命令会找出 3389 端口上的所有入站规则,而不仅仅是内置的“远程桌面”组。这一点很关键:2026 年 10 月 24 日之前用我们的镜像安装的服务器有一条名为“EQVPS RDP 3389”的额外规则,对所有人开放该端口,其他软件也可能添加自己的规则。如果只限制内置组,这类规则会让端口继续开着。我们自己测试时就犯过这个错误。检查结果:

Get-NetFirewallPortFilter | Where-Object LocalPort -eq 3389 | Get-NetFirewallRule |
  Select-Object DisplayName, @{n='Remote';e={($_ | Get-NetFirewallAddressFilter).RemoteAddress}}

每一行都应显示你的地址。在我们的测试中,来自其他任何地址的连接都得不到响应,而被允许的地址可以连上。

在 NAT 套餐上也是一样。从你专属端口进来的转发会保留你的真实地址,所以放行你自己的公网 IP 即可。

如果你的 IP 变了,RDP 也会不再响应你。从控制面板打开浏览器控制台(它不经过 RDP,也不经过防火墙),登录后用新地址再执行一次命令。要完全取消白名单,使用 -RemoteAddress Any。

5. 查看谁在尝试登录

登录失败是安全日志中的 4625 事件。下面的命令会显示每次尝试的账户名和来源地址:

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 20 |
  Select-Object TimeCreated, @{n='User';e={$_.Properties[5].Value}}, @{n='SourceIP';e={$_.Properties[19].Value}}

设置白名单之前,你会看到来自陌生地址的 Administrator、admin、user 源源不断。设置之后,这个列表应该会安静下来。

不值得花时间的事

  • 修改 RDP 端口。 在带独立 IPv4 的套餐上只能减少日志噪音,扫描器很快会找到新端口。在 NAT 套餐上会导致你无法访问,因为转发指向 3389。
  • 为了“能用”而关闭防火墙。 如果改了规则后 RDP 不再响应,请通过浏览器控制台修正规则。

保持更新

最严重的 RDP 事件来自协议漏洞,而不是密码。Windows Server 2022 的安全更新会持续到 2031 年 10 月 14 日,请保持 Windows Update 开启,并在提示时重启。

镜像是使用你自有许可证的 Windows Server 2022(BYOL 如何运作)。套餐从 Windows-Small 起:4 vCPU、4 GB 内存、50 GB,NAT 版 $11/月。带独立 IPv4 的 Windows Small-IP 为 $28/月。四个套餐都在 Windows VPS 页面。如果想在 RDP 之外再用 SSH,请看 在 Windows Server 上使用 OpenSSH。

常见问题

只改 RDP 端口够吗?

不够。换端口能减少日志里的噪音,但任何扫描器几小时内就能找到它。在 NAT 套餐上根本不要改:你的专属外部端口被转发到服务器内部的 3389,移动 RDP 会破坏这条转发。IP 白名单才能真正做到改端口只是假装做到的事。

IP 白名单在 NAT 套餐上有效吗?

有效。转发到你服务器的连接会保留真实的源地址,所以 Windows 防火墙看到的是你自己的公网 IP,可以进行匹配。请放行这个地址,而不是服务器的地址。

如果家里的 IP 变了,把自己锁在外面怎么办?

从控制面板打开浏览器控制台。它直接连到服务器的屏幕,不经过 RDP,所以防火墙不会拦截。在那里登录,用同样的 Set-NetFirewallRule 命令设置新地址即可。

机器人能锁住我的 Administrator 账户吗?

设置了锁定策略就可以,每次锁 15 分钟:在当前的 Windows Server 2022 版本中,内置 Administrator 会像其他账户一样被锁定(我们亲自验证过)。这正是 IP 白名单重要的原因:连不上 3389 端口的机器人也无法触发锁定。

RDP 已经锁好了,还需要 Windows 更新吗?

需要。针对 RDP 最严重的攻击利用的是协议本身的漏洞,而不是密码。Windows Server 2022 会持续获得安全更新直到 2031 年 10 月 14 日,所以请保持 Windows Update 开启。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。