使用easytier开启Windows远程桌面的高安全方案
Windows直接开启远程桌面,即使使用复杂密码也会遇到撞库或者0day漏洞等问题。常用的安全方案是组件内网并只允许指定的IP访问特定的网卡,这样即使出现了意外情况也不会被碰撞到远程桌面。
以最常用的easytier组件内网为例:
- 在需要开启远程桌面的电脑(被控电脑)上安装easytier并配置固定IP地址而不是自动的DHCP,比如给定IP地址10.144.144.20
- 在管理电脑上安装easytier并配置固定IP地址而不是自动的DHCP,比如给定IP地址10.144.144.11
- 修改默认的RDP端口3389改成其他端口,比如53389
- 指定RDP只监听easytier的网卡进入的连接,并且只允许10.144.144.11连接
一、安全模型
预设如下:
被控电脑 EasyTier IP:10.144.144.20
管理电脑 EasyTier IP:10.144.144.11
RDP 端口:53389
EasyTier 网段:10.144.144.0/24防火墙规则:
来源地址:10.144.144.11/32
目标地址:10.144.144.20
入站接口:EasyTier 虚拟网卡
目标服务:Remote Desktop Services
目标端口:TCP/UDP 53389这样,即使 EasyTier 网络中还有其他设备,它们也不能访问这台电脑的远程桌面。
只有确实需要所有 EasyTier 节点都能连接时,才放宽为:
10.144.144.0/24二、先加固 EasyTier
1. 使用固定虚拟 IP
RDP 被控电脑和管理电脑都应使用固定 EasyTier IP,不建议对它们使用可能变化的 DHCP 地址。EasyTier 文档说明,DHCP 模式遇到地址冲突时可能自动更换地址;如果地址变化,绑定了本地 IP 的防火墙规则将不再匹配。
例如被控电脑固定为:
10.144.144.20管理电脑固定为:
10.144.144.112. 使用强网络密钥和 Secure Mode
EasyTier 至少应配置:
--network-name
--network-secret
--secure-modenetwork_secret 用于验证节点是否属于该虚拟网络;Secure Mode 使用新的安全握手和认证路径。
如果使用公共共享节点或第三方中继,仅开启 Secure Mode 还不够。应固定共享节点私钥,并在客户端配置 peer_public_key,否则连接虽然加密,但未必验证了中继节点的真实身份。
3. 启用 EasyTier ACL
支持 ACL 的版本中,建议把管理电脑放入类似 admin 或 management 组,只允许该组访问被控电脑的 TCP 53389。
EasyTier 支持使用 ACL 限制节点间访问,也提供 --tcp-whitelist 53389 生成简单端口白名单的方式;但从安全角度,最好进一步结合节点组或身份限制来源,而不是只限制端口。
除非确实需要,不要在 RDP 被控电脑上启用:
proxy-networks
子网代理
公共中继
无关的监听端口三、Windows 11 安全配置脚本
在被控电脑本地,以管理员身份打开 PowerShell。
首先把下面的:
'10.144.144.11/32'修改为实际管理电脑的 EasyTier IP。
# =====================================================
# Windows 11 RDP over EasyTier 安全配置
# =====================================================
$RdpPort = 53389
# 推荐填写允许管理本机的具体 EasyTier 节点地址
$AllowedSources = @(
'10.144.144.11/32'
# 多台管理电脑可以继续添加:
# '10.144.144.12/32'
)
$TerminalServerPath =
'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server'
$RdpTcpPath =
'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp'
$TcpRuleName = 'RDP-EasyTier-Secure-TCP'
$UdpRuleName = 'RDP-EasyTier-Secure-UDP'
# -----------------------------------------------------
# 1. 自动查找本机 10.144.144.x EasyTier 地址
# -----------------------------------------------------
$EasyTierCandidates = @(
Get-NetIPAddress `
-AddressFamily IPv4 `
-ErrorAction Stop |
Where-Object {
$_.IPAddress -match '^10\.144\.144\.\d{1,3}$' -and
$_.AddressState -eq 'Preferred'
}
)
if ($EasyTierCandidates.Count -eq 0) {
throw @'
没有找到 10.144.144.x 的 EasyTier 虚拟地址。
请确认:
1. EasyTier 已经启动;
2. 被控电脑已加入虚拟网络;
3. 本机已获得固定 EasyTier IP。
'@
}
if ($EasyTierCandidates.Count -gt 1) {
Write-Host '检测到多个匹配地址:' -ForegroundColor Yellow
$EasyTierCandidates |
Format-Table IPAddress,PrefixLength,InterfaceAlias,InterfaceIndex
throw '存在多个 EasyTier 地址,请手工指定目标虚拟网卡。'
}
$EasyTierIP = $EasyTierCandidates[0].IPAddress
$EasyTierAlias = $EasyTierCandidates[0].InterfaceAlias
Write-Host "EasyTier 网卡:$EasyTierAlias" -ForegroundColor Cyan
Write-Host "EasyTier 地址:$EasyTierIP" -ForegroundColor Cyan
# -----------------------------------------------------
# 2. 备份当前 RDP 注册表和防火墙配置
# -----------------------------------------------------
$BackupDirectory = Join-Path `
$env:ProgramData `
("RDP-EasyTier-Backup-{0}" -f (Get-Date -Format 'yyyyMMdd-HHmmss'))
New-Item `
-Path $BackupDirectory `
-ItemType Directory `
-Force | Out-Null
reg.exe export `
'HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server' `
"$BackupDirectory\TerminalServer.reg" `
/y | Out-Null
netsh.exe advfirewall export `
"$BackupDirectory\WindowsFirewall.wfw" | Out-Null
Write-Host "配置备份位置:$BackupDirectory" -ForegroundColor Cyan
# -----------------------------------------------------
# 3. 确保 Windows 防火墙启用,并默认阻止入站流量
# -----------------------------------------------------
Set-NetFirewallProfile `
-Profile Domain,Private,Public `
-Enabled True `
-DefaultInboundAction Block
# -----------------------------------------------------
# 4. 开启 RDP、启用 NLA、设置端口
# -----------------------------------------------------
Set-ItemProperty `
-Path $TerminalServerPath `
-Name 'fDenyTSConnections' `
-Value 0
Set-ItemProperty `
-Path $RdpTcpPath `
-Name 'UserAuthentication' `
-Value 1
Set-ItemProperty `
-Path $RdpTcpPath `
-Name 'PortNumber' `
-Value $RdpPort
# -----------------------------------------------------
# 5. 禁用 Windows 内置的宽范围 RDP 放行规则
# -----------------------------------------------------
Get-NetFirewallRule -ErrorAction SilentlyContinue |
Where-Object {
$_.Name -like 'RemoteDesktop-*'
} |
Disable-NetFirewallRule
# -----------------------------------------------------
# 6. 清除之前可能创建的自定义 RDP 规则
# -----------------------------------------------------
$OldRules = @(
$TcpRuleName
$UdpRuleName
'RDP-EasyTier-53389-TCP'
'RDP-EasyTier-53389-UDP'
'RDP-53389-TCP-Allow-10.144.144.0-24'
'RDP-53389-UDP-Allow-10.144.144.0-24'
)
Get-NetFirewallRule `
-Name $OldRules `
-ErrorAction SilentlyContinue |
Remove-NetFirewallRule
# -----------------------------------------------------
# 7. 创建严格限制的 TCP 规则
# -----------------------------------------------------
New-NetFirewallRule `
-Name $TcpRuleName `
-DisplayName 'RDP TCP 53389 - EasyTier Restricted' `
-Description "仅允许指定 EasyTier 节点访问 $EasyTierIP`:53389" `
-Direction Inbound `
-Action Allow `
-Enabled True `
-Profile Any `
-Protocol TCP `
-LocalPort $RdpPort `
-LocalAddress $EasyTierIP `
-RemoteAddress $AllowedSources `
-InterfaceAlias $EasyTierAlias `
-Service TermService `
-EdgeTraversalPolicy Block
# -----------------------------------------------------
# 8. 创建严格限制的 UDP 规则
# -----------------------------------------------------
New-NetFirewallRule `
-Name $UdpRuleName `
-DisplayName 'RDP UDP 53389 - EasyTier Restricted' `
-Description "仅允许指定 EasyTier 节点访问 $EasyTierIP`:53389" `
-Direction Inbound `
-Action Allow `
-Enabled True `
-Profile Any `
-Protocol UDP `
-LocalPort $RdpPort `
-LocalAddress $EasyTierIP `
-RemoteAddress $AllowedSources `
-InterfaceAlias $EasyTierAlias `
-Service TermService `
-EdgeTraversalPolicy Block
Write-Host ''
Write-Host 'RDP 安全配置已完成:' -ForegroundColor Green
Write-Host " EasyTier 接口:$EasyTierAlias"
Write-Host " 被控端地址:$EasyTierIP"
Write-Host " RDP 端口:$RdpPort"
Write-Host " 允许来源:$($AllowedSources -join ', ')"
Write-Host ' NLA:启用'
Write-Host ' Windows 内置 RDP 规则:禁用'
Write-Host ''
Write-Host '请检查输出无误后重新启动电脑。' -ForegroundColor YellowWindows 防火墙默认阻止未匹配允许规则的入站流量;自定义规则可以同时限制本地地址、远程地址、服务、端口和接口。因此,不需要再建立一条“阻止其他来源”的 RDP 规则,默认入站阻止已经承担这个作用,而且显式阻止规则可能覆盖允许规则。
Microsoft 建议不要关闭 Windows 防火墙,因为关闭后会失去服务强化、启动阶段过滤和其他网络保护。
四、重启并测试
修改 RDP 监听端口后需要重启 Windows。RDP 默认端口是 3389,也可以修改为其他端口;修改端口本身只能减少普通扫描噪声,真正的安全边界仍然是 EasyTier 身份控制和 Windows 防火墙来源限制。
执行:
Restart-Computer从允许的管理电脑连接:
mstsc /v:10.144.144.20:53389先测试端口:
Test-NetConnection 10.144.144.20 -Port 53389应显示:
TcpTestSucceeded : True从其他未列入 $AllowedSources 的 EasyTier 节点执行同样测试,应显示:
TcpTestSucceeded : False同时测试物理局域网地址:
Test-NetConnection 被控电脑物理局域网IP -Port 53389也应失败。
五、检查规则是否真正绑定到 EasyTier
在被控电脑上执行:
$Rules = @(
'RDP-EasyTier-Secure-TCP'
'RDP-EasyTier-Secure-UDP'
)
Get-NetFirewallRule -Name $Rules |
Format-Table Name,Enabled,Direction,Action,Profile查看来源和目标地址:
Get-NetFirewallRule -Name $Rules |
Get-NetFirewallAddressFilter |
Format-Table LocalAddress,RemoteAddress正常应类似:
LocalAddress RemoteAddress
------------ -------------
10.144.144.20 10.144.144.11/32查看接口:
Get-NetFirewallRule -Name $Rules |
Get-NetFirewallInterfaceFilter |
Format-Table InterfaceAlias查看端口:
Get-NetFirewallRule -Name $Rules |
Get-NetFirewallPortFilter |
Format-Table Protocol,LocalPort成功连接后检查实际来源:
Get-NetTCPConnection `
-LocalPort 53389 `
-State Established |
Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort应看到来源为允许的 EasyTier 地址:
LocalAddress LocalPort RemoteAddress
------------ --------- -------------
10.144.144.20 53389 10.144.144.11最终推荐配置
最理想的结果是:
公网端口转发:无
物理局域网 RDP:不可访问
EasyTier 整个 /24:不全部放行
允许的管理节点:具体 /32 地址
EasyTier Secure Mode:开启
公共中继公钥:固定并校验
Windows 防火墙:开启
默认入站策略:阻止
NLA:开启
RDP 用户:独立标准用户
RDP 端口:53389,可选其中最重要的改进,是把原来的:
RemoteAddress = 10.144.144.0/24收紧为:
RemoteAddress = 管理电脑的 EasyTier IP/32这样即使 EasyTier 网络中的某个普通节点被入侵,也不能直接尝试登录这台 Windows 电脑。