我打算为我的个人计算机(Windows 10,而不是Windows Server,因为它只是一个工作站)设置安全的 WAN 可访问 RDP。
计划是:
- 自然地将 RDP 和 LAN 唤醒端口转发到我的机器。
- 在 USB 密钥上有两个证书,我随身携带到任何我想远程访问我的工作站的地方:通常与 RDP 一起用于确认服务器真实性的常用主机证书,以及一个客户端证书(用外行的话来说,一个客户端必须发送到服务器以确认其真实性的文件)作为第二层安全性。
- 每当我想从远程连接到我的计算机时,我插入 USB 密钥,执行 LAN 唤醒以启动我的计算机(我已经弄清楚这部分),打开 RDP 客户端并通过连接公共端口,首先使用客户端身份验证文件进行身份验证,然后是我的典型密码。
我在实施此安全措施时发现的大多数资源都需要使用 Windows Server,令人困惑的 IPsec 设置似乎也仅适用于 Windows Server 或智能卡(我特别想使用的是 USB 闪存驱动器)。我可以仅使用常规 RDP 和 LAN 唤醒来执行此操作,还是需要设置具有适当客户端证书身份验证支持的各种隧道,例如 VPN 或 SSH(这可能意味着完全放弃 RDP 并使用 VNC 或类似的选择)?
不建议这样做,因为 Windows 中的 RDP 服务历来存在许多无需身份验证即可利用的安全问题。尽管要求 NLA(这是默认设置)稍微改善了这种情况,但它仍然被认为是不必要的高风险。
所以真的,考虑使用 VPN 隧道只是出于这个原因——或者 SSH,如果你想将它带到难以安装 VPN 应用程序的随机 PC 上。(另一种选择是Guacamole,它是一个基于浏览器的 VNC 和 RDP 服务器网关。)
IPsec 在 Windows 的客户端版本上工作得很好,虽然设置起来很混乱——Windows 10 有三个IPsec 客户端;旧版 XP(仅限过时的 IKEv1),属于 Windows 防火墙 (wf.msc) 一部分的新版;以及配置为“IKEv2 VPN”连接的那个。
可能需要 Windows Server 的是智能卡。
“智能卡身份验证”并不严格要求证书位于物理智能卡上(它确实以自包含 USB 令牌的形式出现)——它只要求证书可以通过 Windows CAPI 获得,但实际上它会接受其私钥只是从 .pfx 文件导入“基于软件”的 Windows 证书存储区的证书。
但是这个计划的最大问题是,你的私钥的副本保留在你安装它的任何机器上(因为 RDP 客户端不支持直接从文件中读取它),所以你会信任任何随机的计算机使用您的密码和证书密钥对。真的,即使您不必安装 .pfx 文件,您仍然可以信任任何随机计算机与您的 USB 记忆棒上的证书密钥对。
这实际上就是智能卡的全部意义——即使是恶意 PC,也无法从中提取私钥;该卡在内部执行签名操作并仅返回该结果。但是您不必随身携带整个读卡器——如前所述,有 USB 棒状智能卡,其中 Yubikey 是一种流行的卡。(我特别指的是 Yubikey NEO 和更高版本中的“CCID/PIV”模式,模拟 PIV 卡,它甚至不需要像其他智能卡那样的驱动程序。)
另一个问题是,据我所知,RDP 中的“智能卡身份验证”依赖于 Active Directory,因为它是通过 Kerberos PKINIT 实现的,而不是通过普通的直接证书身份验证。(不一定是 Windows Server——Samba 可以做 AD——但它仍然需要 AD。)它也是用户 AD 密码的替代方案,而不是第二个因素。
最后一个问题是,之前影响 Windows RDP 服务的一些安全问题是预身份验证,这意味着它们可能在验证您的密码之前被利用,因此也可能在验证您的“智能卡”凭据之前被利用。(虽然他们已经打了补丁,但与 OpenSSH 或 WireGuard 等相比,这绝对不是一个很好的记录。)
RDP 仍然通过 SSH 隧道工作;只需确保使用 3389 以外的“本地”端口对其进行配置。(您确实失去了基于 UDP 的传输模式,但它是可选的,性能差异甚至不是很明显。)