有没有一种安全的方式来拥有一个面向公众的终端服务器?

信息安全 访问控制 rdp
2021-09-03 23:52:09

TL;DR我们正在考虑为终端服务器打开端口 3389,我看到的所有建议都是自杀,但没有很好地解释原因。真的有那么糟糕吗?

我们正在考虑设置一个终端服务器,供员工远程访问。他们将使用大量设备,包括 iPad、Android Divices、Windows(XP 到 8)、OSX、Linux,以及几乎任何带有 RDP 客户端的设备。

我希望这是愚蠢的简单并且可以处理所有事情。我的计划是设置 remote.example.com(显然是我们的真实域名)指向我们的服务器,然后通过以下方式保护它:

  1. 防火墙除端口 3389 之外的所有内容。
  2. 将加密级别设置为最高(带有证书)并且不允许“协商”
  3. 锁定超过 7 次失败尝试的帐户,并查看一些脚本以根据登录失败的 IP 地址进行阻止(https://security.stackexchange.com/a/17354/22241
  4. 其他明显的事情,例如操作系统更新和防病毒。

然而,当我谈到建立一个面向公众的 RDP 时,他们的反应通常是这样的:

“不要打开端口 3389 将 VPN 放在它前面” ——但据我所知,对此的两个主要论点是加密(RDP 不是已经这样做了吗?)和更好的身份验证,因为人们会蛮力 RDP . 我们已经有一个 PPTP VPN 设置,但它只是使用与我们的终端服务器相同的帐户用户名/密码组合进行身份验证,因此我没有看到终端服务器添加到我们的攻击面。我认为唯一有分量的论点是设置支持两因素身份验证的 VPN(例如 Cisco),这听起来不错,但会大大减少支持的设备数量。

“不要这样做,使用 RD 网关” 据我所见,阅读http://technet.microsoft.com/en-us/library/cc731150.aspx RD 网关的优点是:

从单个入口点管理多台服务器,精细控制谁可以连接到什么等等。- 听起来不错,但我们只有一台终端服务器。

使用端口 443/HTTPS,因此配置不佳的出站防火墙后面的人可以连接 - 听起来不错,但 RDP 已经提供加密,更改端口不会增加安全性。此外,对于不需要处理出站防火墙的所有额外便利,大多数 RDP 客户端都缺乏支持(最后我检查了 OSX 客户端无法连接到 RD 网关)

“不要使用 RDP,使用(Hamachi/Team Viewer/Jump Desktop/VNC ......认真/其他一些 RDP 工具)它更安全” 对我来说,这些建议中的任何一个都是从将所有鸡蛋放在一个篮子(微软)到把所有你的鸡蛋放在另一个篮子里(Hamachi),但没有切实的安全利益。

我只是不屑一顾吗?设置面向公众的 RDP 服务器是个坏主意吗?

3个回答

RDP是一个复杂的协议,需要复杂的实现,因此可能包含错误。该协议的初始版本不包含太多加密。Ulterior 版本更好,可以使用自制加密系统(可能使用或不使用证书来嵌入服务器公钥)或SSL/TLS(必须使用服务器证书)。请注意,在后一种情况下,TLS 记录被封装到特定于 RDP 的数据包中,因此您不能满足于说“这只是 SSL”。

没有任何概念上的理由会使 RDP 本质上不安全;但是整个内部协议塔和普遍缺乏体面的文档是一个问题。已经很难知道给定客户端将支持哪些功能。微软的实现有很多远程漏洞利用,例如这个那个

微软自己的回应是,如果你想要安全,你需要远程桌面网关,它增加了另一层,但在外面:一个标准的 SSL/TLS,带有用户身份验证和 RDP(所以你最终会得到一个 SSL- RDP-SSL-RDP 三明治)。这个想法是,面向公众的 SSL 服务器是一种已知情况,其代码经过多年的展示(在 IIS 中,用于 HTTPS Web 服务器)已经过彻底调试。RD 网关不会阻止 RDP 漏洞,但漏洞利用将仅限于可以通过外部 SSL 的人,即可以在服务器本身上打开会话并且已经拥有很多权力的人。当然,RD Gateway 不是免费的,因此微软最好为其出售许可证。

请注意,当客户端软件不是 Microsoft 的实现时,RD 网关的客户端支持不是给定的。

总而言之,RDP(Microsoft)只有一个权威来源,他们自己已经放弃了声称他们的产品足够无错误以面向公众的想法。这不是好兆头。出售 RD 网关许可证的冲动可能会引发有关该主题的一些危言耸听的言论,但由于代码的复杂性和悠久的历史,使 Microsoft 的 RDP 实现安全很难是有道理的

您可以使用与 Windows VPN 方法不同的 OpenVPN。您可以安装 ssh 服务器(如 Bitvise WinSSHD)并通过 SSH 隧道传输所有流量。不过,我不能告诉你这是否比目前的情况更安全。

有几种方法可以保护 RDP。

  • 不要使用公共端口#3389。是减少蛮力 atemps 的最佳方法。
  • 仅允许某些 IP(或 IP 范围)地址访问公共 IP。使用智能路由器。我使用 mikrotik ( http://wiki.mikrotik.com/wiki/Bruteforce_login_prevention ) 或 Cisco。
  • 将防火墙阻止配置为多次尝试。我使用第三方工具来阻止流量。免费工具来自http://www.bfguard.com还有几个,但我喜欢这个,因为它是免费的。该工具分析登录失败的事件日志,然后将 IP 添加到 Windows 防火墙以进行阻止。