Windows RDP 服务器:挡住大多数暴力破解的几项设置

NLA、账户锁定、真正管用的非默认端口,以及把 RDP 限制为只允许您自己地址访问的防火墙规则。

C安CheapServ 安全团队作者 6 分钟阅读
基座上的一台显示器,上面有一把挂锁
本页目录9
  1. 这些攻击长什么样
  2. 1. 网络级别身份验证(NLA)
  3. 2. 账户锁定策略
  4. 3. 日常使用标准用户,并重命名 Administrator
  5. 4. 把 RDP 限制在您自己的地址
  6. 5. 修改端口,以及它的价值
  7. 6. 按计划执行 Windows Update
  8. 其余事项,按优先级排序
  9. 我们的 RDP 镜像开箱即有的配置

3389 端口是互联网上被扫描次数仅次于 22 和 445 的端口。一台拥有公网 IP 的 Windows 服务器,几分钟之内就会收到第一次 RDP 登录尝试,此后每天多达数千次。其中几乎所有的尝试,都能被六项只需 15 分钟就能配置完的设置拦下。这就是我们默认应用在 RDP 镜像上的清单,我们逐项做了说明,方便您自行验证并加以扩展。

这些攻击长什么样

在任何一台已经上线一天的 Windows 服务器上,打开“安全”事件日志,并筛选事件 ID 4625(登录失败)。您会看到源源不断的尝试,目标是 Administrator、admin、user、test 以及几百个常见的人名,来源 IP 地址遍布各个国家。这些攻击并非针对性的;僵尸网络会尝试每一个 IPv4 地址,试完就走。防御的关键,就是不要成为那个容易得手的目标。

1. 网络级别身份验证(NLA)

NLA 要求客户端在会话创建之前先完成身份验证。没有它,每一次尝试都会在服务器上拉起一个登录界面,既消耗 CPU,又暴露出登录前的攻击面,而历史上好几个 RDP 漏洞就出在这里。我们的镜像出厂时已开启 NLA;您可以在系统 → 远程桌面 → 高级设置中检查,或者执行:

Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication
# 1 = NLA required

2. 账户锁定策略

锁定策略会让猜密码的速度慢下来。10 分钟内失败 10 次,就锁定 15 分钟,这会让一个每小时尝试数千个密码的机器人,变成每小时只能尝试 40 个的机器人。可以通过本地安全策略来设置,也可以只用一条命令:

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

内置的 Administrator 账户在设计上不受锁定策略限制,这就引出了下一点。

3. 日常使用标准用户,并重命名 Administrator

每一次攻击都会先尝试 Administrator。重命名并不会让这个账户隐身(它的 SID 仍然以 500 结尾),但它能挡住我们在实际中见到的每一次自动化猜解。请另外创建一个供日常使用的标准用户,把它加入 Remote Desktop Users 组,管理员账户则只留给维护会话使用。

Rename-LocalUser -Name Administrator -NewName ops-admin
New-LocalUser -Name jane -PasswordNeverExpires:$false
Add-LocalGroupMember -Group 'Remote Desktop Users' -Member jane

为每个账户使用一段较长的密码短语,或者更好的做法,使用密码管理器生成的 24 个字符的随机字符串。整个猜解威胁,都建立在人类能记住的密码之上。

4. 把 RDP 限制在您自己的地址

这是效果最显著的一项设置。如果 3389 端口只响应来自您办公室或家里 IP 的连接,僵尸网络就连登录界面都看不到。Windows 防火墙可以把内置规则限定到一个远程地址列表:

Set-NetFirewallRule -DisplayGroup 'Remote Desktop' -RemoteAddress 203.0.113.5,198.51.100.0/24

如果您的地址会变动(家庭宽带经常如此),可以改用 WireGuard 或 Tailscale 隧道,它会给您一个固定的私有地址,改为放行这个地址;Tailscale 附加选项会在开通服务时安装客户端。如果您把自己锁在了外面,控制面板里的控制台仍然可用,所以这项改动可以放心去做。

5. 修改端口,以及它的价值

把 RDP 从 3389 端口挪走,能挡住最笨的扫描器,却挡不住任何一个聪明的,因为一次全端口扫描几秒钟就能找到它。但还是应该这么做:它能把事件日志里的噪声减少 95%,让真正的攻击浮现出来。在注册表中修改端口,为新端口添加一条防火墙规则,重启服务,最后才删除旧规则。

Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber -Value 33890
New-NetFirewallRule -DisplayName 'RDP 33890' -Direction Inbound -Protocol TCP -LocalPort 33890 -Action Allow -RemoteAddress 203.0.113.5
Restart-Service TermService -Force

6. 按计划执行 Windows Update

现实中的大多数 RDP 入侵,利用的都是几个月前就已修补的漏洞。请保持自动更新开启,设置活动时间,让重启发生在您所在时区的夜间,并每月检查一次设置 → Windows 更新。独立服务器上的 Windows Update 附加选项会替您配置好这个计划。

其余事项,按优先级排序

  • 开启 Defender 及云保护。它本来就在那里;不要为了让某个工具跑得更快而把它关掉。
  • 不要共用账户。一人一个用户;这是事件日志能告诉您任何有用信息的唯一办法。
  • 禁用 SMBv1;如果不使用文件共享,就把 445 端口彻底关掉。Set-SmbServerConfiguration -EnableSMB1Protocol $false。
  • 要注销,不要只是断开连接。断开的会话会继续运行,您的凭据仍留在内存中。
  • 关注事件 4625。在您做完加固之后,如果这类事件突然激增,要么说明有人发现了新端口,这没关系;要么说明防火墙的作用范围在某次更新后丢失了,这就有问题了。

我们的 RDP 镜像开箱即有的配置

NLA 已开启,应用了上文的账户锁定策略,启用了 Defender 和 Windows Update,关闭了 SMBv1,管理员密码是 20 位随机字符,并且只会在控制面板中显示一次。第 3 到第 5 步需要用到您自己的地址或命名,所以要由您自己来完成;这些都做完之后,一台公网 IP 上的 RDP 服务器就会变成一台平淡无奇的服务器,而这正是我们的目标。

C安
CheapServ 安全团队

负责处理滥用举报、应急响应,以及每个镜像出厂时的默认设置。

一分钟内部署您的第一台服务器。

以 BTC、ETH、XMR 或 USDT 充值,$25 起。余额永不过期,未使用的部分可退款。

立即注册