Windows 服务器 RDP 远程登录安全加固:从端口修改到白名单策略

枫少@KillBoy
枫少@KillBoy
枫少@KillBoy
管理员
251
文章
0
粉丝
安全运维1 39字数 3578阅读11分55秒阅读模式
AI智能摘要
AI 生成的文章内容摘要

把 Windows 服务器的远程桌面直接暴露在公网,几乎等于把管理入口交给全网扫描器。默认监听 3389 的机器会持续收到口令爆破;即便口令够复杂,未打补丁的 RDP 协议栈本身也可能成为未授权远程代码执行的入口。一套靠谱的防护,至少要同时覆盖网络可达性、身份校验和本地账户策略,而不是只换一个端口就结束。

Windows 服务器 RDP 网络层访问控制示意

先改端口:能降噪,但不能当主防线

默认端口被全网脚本优先扫,改掉 3389 可以把大量无脑爆破挡在门外,减少日志噪音和账号锁定。但它只是“降低被撞见的概率”,并不能阻止针对性扫描,也挡不住协议层漏洞利用。端口修改应作为辅助手段,主防线仍是:不向公网裸奔、IP 白名单或 VPN、网络级身份验证,以及及时补丁。

修改监听端口的操作要点

官方推荐通过注册表项调整 RDP-Tcp 的监听端口。在提升权限的 PowerShell 中执行(将新端口换成你规划的数值,避免与现有服务冲突,并优先选择未被常见扫描列表盯死的高位端口):

$portValue = 53389
Set-ItemProperty -Path 'HKLM:SYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp' -Name 'PortNumber' -Value $portValue

也可以在 regedit 中打开同一路径,找到 PortNumber,以十进制写入新端口。修改后需要重启“Remote Desktop Services”相关服务,或直接重启服务器,新端口才会真正生效。

改端口后必须同步完成三件事,否则等于把自己锁在门外:

第一,在 Windows 防火墙(以及云厂商安全组、硬件防火墙)放行新端口的入站 TCP,并视情况收回对旧 3389 的放行。只改注册表不改防火墙,外网永远连不进来。 第二,客户端连接时写清端口,例如 mstsc 地址栏使用 服务器IP:新端口。 第三,用管理机执行连通性检查(把端口换成你的新端口),确认链路与监听一致,再断开旧会话窗口。

改端口的局限性,必须心里有数

扫描器可以对全端口做服务识别,改端口只能避开最廉价的自动化攻击。若服务器仍对 0.0.0.0/0 开放 RDP,攻击面只是从“默认门牌”变成“稍偏一点的门牌”。历史上 RDP 服务端曾出现无需交互、甚至无需成功登录的高危远程代码执行问题;公开资料中就有针对 RDP 服务端、CVSS 评分极高的未授权 RCE,补丁与网络隔离的优先级远高于“换个好听的端口号”。因此:互联网侧应默认拒绝直连 RDP,改端口只作为纵深里的一层减噪措施。

防火墙白名单:把 3389 从“谁都能敲”变成“只认名单”

真正能显著降低暴力破解成功率的,是网络层只允许可信来源访问 RDP 端口。常见可信来源包括:公司出口固定公网 IP、运维跳板机、SSL VPN / IPsec VPN 下发的客户端地址段。逻辑很简单:先“默认拒绝 RDP 入站”,再“精确允许白名单”,必要时再配合“仅配置文件生效范围”(域/专用/公用)。

配置前先想清楚规则顺序与作用域

Windows 防火墙按规则匹配,允许多条“允许”与“阻止”并存。对 RDP 加固,建议采用下面的策略语义,而不是只点开“远程桌面”预置规则就完事:

  1. 明确监听端口:若已改端口,所有规则都针对新端口;若仍用 3389,就针对 3389。不要假设预置规则会自动跟着注册表走。
  2. 收紧预置远程桌面规则:系统自带的“远程桌面”入站规则往往默认允许更大范围。应编辑其作用域,或禁用过宽规则后自建更严的规则。
  3. 新建“允许”规则:协议 TCP、本地端口为 RDP 端口、远程地址为白名单 IP 或 VPN 网段、操作允许、配置文件按实际网络选型(公网网卡通常对应“公用”)。
  4. 用“阻止”兜底(可选但推荐):对同一本地端口再做一条“阻止任何远程地址”的规则,并确保其评估结果不会误伤白名单。更稳妥的做法是:关闭/收窄所有宽泛允许,只保留白名单允许,使“没有命中允许 = 默认阻止”。
  5. 云上双层控制:若机器在云主机上,安全组/NSG 必须同样只放行白名单;只改访客机防火墙、安全组仍对全世界开放,攻击流量根本到不了你细调的那一层。

图形界面配置白名单的步骤逻辑

在“高级安全 Windows 防火墙”中:

  1. 进入“入站规则”,定位与远程桌面相关的启用规则,或选择“新建规则”。
  2. 规则类型选“端口”→ TCP →“特定本地端口”填入 RDP 端口。
  3. 操作选“允许连接”。
  4. 配置文件按网卡场景勾选;面向公网的网卡务必认真核对,避免在“公用”网络上留下过宽允许。
  5. 关键一步的名称写清楚,例如“RDP-Allow-VPN-and-Office”。
  6. 创建后打开规则属性 →“作用域”→“远程 IP 地址”→“下列 IP 地址”,逐条加入:
  7. 办公出口公网 IP(单个或少量固定地址);
  8. VPN 地址池(例如整段隧道网段,而不是临时拨号后的某一个动态主机地址,除非你能保证该地址稳定);
  9. 跳板机地址。
  10. 确认没有另一条“远程地址为任何”的允许规则仍在生效;有则禁用或同样改成白名单。
  11. 仍保持控制台或带外管理通道的前提下,用白名单内主机连接测试,再用白名单外主机验证应被拒绝。

用 PowerShell 表达同一逻辑(便于复现与审计)

下面示例演示“允许指定远程地址访问某端口”的规则创建思路。请按环境替换端口与 IP,并在有控制台回退手段时操作:

New-NetFirewallRule -DisplayName "RDP-Allow-Whitelist" `
  -Direction Inbound -Action Allow -Protocol TCP -LocalPort 53389 `
  -RemoteAddress 203.0.113.10,198.51.100.0/24 `
  -Profile Any

若需明确阻止非名单流量,应先保证不存在“Any 远程地址”的宽泛允许;必要时对预置远程桌面规则执行禁用或修改其 -RemoteAddress。规则建好后,用 Get-NetFirewallRuleGet-NetFirewallAddressFilter 核对远程地址过滤是否真的挂上,不要只看显示名称。

VPN 场景下的正确白名单对象

若要求“必须先连 VPN 再 RDP”,防火墙远程地址应写 VPN 分配给客户端的内网段VPN 网关侧可达的固定地址,而不是员工家庭宽带的公网 IP。同时:

  • 服务器 RDP 监听最好只绑在内网/VPN 可达接口,避免多网卡时误在公网接口暴露;
  • 安全组同样只对 VPN 网关或混合云专线开放;
  • 在 VPN 未连通时,公网直接打 RDP 端口应表现为超时或明确拒绝,而不是偶尔能通。

测试建议:白名单内 Test-NetConnection -ComputerName <服务器> -Port <RDP端口> 应显示端口开放;白名单外同一命令应失败。不要在只剩一条远程会话、且未验证新规则前,关掉所有旧允许规则。

管理员配置 RDP 防火墙与组策略加固

禁用空密码远程登录:本地策略与组策略怎么选

网络层收紧之后,还要防止“账户存在但口令为空”这类低级且致命的口子。Windows 提供了安全选项:“账户:使用空密码的本地账户只允许进行控制台登录”。启用后,空密码本地账户不能再通过网络登录(含 RDP),只能在物理/控制台登录,从而把空密码账户的风险限制在能接触控制台的人。

单机或工作组:用本地安全策略

适用于:单台服务器、工作组机器、尚未加入域的跳板机。

  1. 运行 secpol.msc 打开“本地安全策略”。
  2. 进入“本地策略”→“安全选项”。
  3. 找到“账户:使用空密码的本地账户只允许进行控制台登录”。
  4. 设置为“已启用”。
  5. 同时检查:不存在业务必需的空密码本地账户;管理员账户有强口令;Guest 等不用的账户保持禁用。

本地安全策略只影响本机。重装系统或未纳入配置管理时容易回漂,适合台数很少、且你明确接受“每台手工维护”的场景。

域环境:用组策略统一下发

适用于:已加入 Active Directory 的服务器与工作站,需要统一基线、可审计、可回滚。

  1. 在域控或管理站打开“组策略管理”,创建或编辑面向服务器 OU 的 GPO。
  2. 路径:计算机配置策略Windows 设置安全设置本地策略安全选项
  3. 同样启用“账户:使用空密码的本地账户只允许进行控制台登录”。
  4. 将该 GPO 链接到存放成员服务器的 OU,并按需使用安全过滤,避免误作用到不该约束的对象。
  5. 服务器上执行 gpupdate /force,再用 gpresult /h 确认策略已生效且来源 GPO 正确。

本地策略与组策略的分工(不要混用思路)

维度本地安全策略 (secpol.msc)组策略 (GPO)
作用范围仅本机OU/域内计算机集合
适用场景工作组、单机应急、样机域成员服务器批量基线
冲突时域成员上,GPO 通常覆盖本地同名安全选项以生效的 GPO 与链接顺序为准
运维建议改完做文档或镜像固化纳入变更与合规检查,定期 gpresult 抽查

域成员服务器上如果只改本地策略,后续 GPO 刷新可能把它盖掉,也会造成“我明明改过却又恢复”的排查陷阱。域环境应把空密码限制写进 GPO;本地策略更适合工作组或临时止血。无论哪种方式,都只是账户策略的一环:仍应禁止共用管理员账号、减少本地管理员数量,并保证真实使用的账户都有强口令与可控的锁定策略。

把网络层到系统层串成一套体系

可以按落地顺序组装,而不是东一榔头西一棒子:

网络层(最先做) 公网安全组默认拒绝 RDP;仅允许 VPN 网段、办公固定 IP 或跳板机。能做到“RDP 根本不出现在公网端口扫描结果里”,爆破和自动化利用会少掉大半。有条件时优先“先 VPN/零信任再进内网 RDP”,而不是把 RDP 当公网业务端口。

主机防火墙层(与安全组叠加) 在操作系统内再做一次远程地址白名单,防止安全组误放开、多网卡绕行或同 VNet 横向移动时被随意连接。规则语义保持“白名单允许 + 无宽泛允许”。

服务与端口层(辅助) 修改默认监听端口并同步防火墙/安全组;客户端改用新端口。接受其局限性,不把它写成核心控制措施。

身份与会话层(系统加固) 启用网络级身份验证(NLA),让认证尽量发生在完整桌面会话建立之前;限制允许通过远程桌面登录的本地/域组;禁用空密码网络登录;控制管理员账户暴露面。NLA 与账户策略不能替代补丁,但能提高攻击成本。

补丁与持续验证(不可缺) RDP 作为长期被重点关照的远程管理面,协议栈高危漏洞出现时,暴露面越大,窗口期越危险。应把累计更新纳入常规变更,并在维护窗口验证 RDP 与依赖角色是否正常。配置变更后做正反两次测试:名单内可连、名单外不可连;同时关注安全日志中的登录失败来源,若仍出现大量陌生 IP,说明白名单或上层安全组仍有漏洞。

操作时容易踩的坑

改端口或改防火墙时,至少保留一种带外手段(云控制台截图、iLO/iDRAC、串口控制台、现场)。先加白名单允许,再删宽泛允许,顺序反了容易直接失联。 白名单 IP 若是家用宽带,次日地址一变就会全员无法运维,这类场景更适合 VPN 网段白名单。 测试不要只从自己当前出口测一次“能连”就结束,还要确认“不该连的真的连不上”。 策略写在本地还是域,取决于机器是否域管理;域服务器以 GPO 为准,并定期核对有效策略。

可直接照着执行的最小加固清单

若你要从一台已对公网开放 3389 的 Windows 服务器收口,可按下列最小闭环推进:先在安全组把来源收到 VPN 或办公 IP,再在系统防火墙写同一套远程地址允许并去掉 Any,视需要改监听端口且三段(注册表、主机防火墙、安全组)一起改,启用空密码仅控制台登录(单机本地策略/域内 GPO 选对载体),打开 NLA 并限制远程桌面用户组,安装并验证安全更新,最后做名单内连通与名单外拒绝的双向测试。

暴力破解看起来喧闹,真正致命的往往是“管理面可达 + 身份薄弱 + 补丁滞后”叠在一起。端口修改降低噪声,防火墙与安全组白名单砍掉大多数网络来源,组策略/本地策略堵住空密码网络登录,再辅以 NLA 与持续更新——这样才是从网络层到系统层可运维、可复查的 RDP 防护体系,而不是堆一堆互不衔接的“安全建议”。

 
枫少@KillBoy
    • 红枫
      红枫 1

      改端口真不能当护身符

    匿名

    发表评论

    匿名网友

    拖动滑块以完成验证