如何保护面向公众的远程桌面服务器?

我正在寻找需要公开我的远程桌面服务器(terminal服务)从我们的networking外部访问。 现在,它只能从我们的networking内部访问。

我知道很容易打开防火墙并转发端口。

但是,如何保护机器本身,以及围绕此方面的最佳做法是什么? 我担心的是黑客能够闯入它。

任何最佳实践准则/build议将不胜感激。


编辑:

关于我发现的产品的问题:

通过IP,MAC地址,计算机名称等来过滤传入的RDP连接

任何人都可以评论这个安全吗? 看起来我也可以使用它来限制机器名/ mac访问? 其他人使用它?

这可能比您想要做的更多,但是这里是我们如何为不使用VPN的远程用户使用RDP。

我们最近开始在远程桌面服务中使用RD网关pipe理器,这是Windows 2008中的一个angular色。我们已经将它设置为通过我们的TMG服务器并直接到用户计算机。 它使用NLA如上所述。 用户连接必须是正确的AD组的成员,并且是允许访问的右侧本地组的成员。 根据你想如何设置,你可以通过一个基本上打开mstsc的网页进行连接,并为RD网关input代理设置,或者你可以在你的机器上手动设置设置,这样每次打开它都会尝试去通过这个代理。 到目前为止,它工作得很好,似乎是安全的。

正如最近的历史告诉我们的那样,暴露协议存在固有的风险。 但是,您可以采取一些措施来保护系统:

  • 强制执行networking级别authentication。
  • 强制连接encryption。
  • 将允许通过terminal服务login的用户限制在绝对最低限度,并且不要允许“特殊”账户,比如默认域Administrator账户,或者理想的其他任何高级账户。
  • 确保允许login的帐户的密码强大。取决于多less用户以及您的策略目前的状况,但是倾销哈希并试图破解它们,增encryption码长度的限制,或仅仅教育用户好的方法。

我强烈build议使用远程桌面网关服务。 它给你一个地方,你可以执行谁可以连接到什么地方的政策。 它为您提供了一个日志logging的好地方,所以您可以查看谁正在尝试login,而无需检查服务器场中单个服务器的事件日志。

如果您还没有这样做,请确保您的帐户locking策略设置得相当强大。 即使有NLA和一个网关的RDP给人一些尝试强制密码的东西。 强大的locking政策极大地使暴力试图取得成功变得非常困难。

在系统上设置有效的SSL证书,所以如果有人试图执行某种MITM攻击,客户端会通知最终用户。

这不是很安全,但是有几种方法来加强安全。

禁止从该服务器访问Internet。 许多更严重的恶意软件会在系统妥协时尝试与其命令和控制服务器进行通信。 configuration防火墙访问规则默认情况下不允许出站访问,而允许仅出站访问内部/已知networking和RFC 1928子网的规则可以降低风险。

使用智能卡或其他types的双因素身份validation。 这通常是昂贵的,主要在大型组织中find,但是选项正在改进(PhoneFactor浮现)。 请注意,要求智能卡可以按服务器完成,作为在帐户级别configuration它的选项。

configuration外围networking,将远程桌面服务器放置在外围,并使用便宜的VPN来提供访问。 Hamachi就是一个例子。 请注意,不允许从外围networking访问Internet也是一个好的做法。

如果可能的话,不要提供完整的桌面,而是发布他们需要的应用程序。 如果有人只需要访问单个应用程序,也可以configuration一个“初始程序”,它可以是一个简单的包装程序shell程序,可以在应用程序closures时执行注销。

我会build议采取以下措施:

  1. 更改用于远程桌面连接的端口
  2. 不要使用通用的用户名,而要使用更复杂的命名策略
  3. 高密码要求
  4. 从外部closures任何其他未使用的端口(入站)

可选的

  1. 使用VPN(CISCO,Open VPN等),然后使用内部IP连接到服务器。
  2. 如果可能,请使用智能卡login

您可以在端口22上运行WinSSHD ,然后使用Tunnelier客户端为您创build隧道,并通过隧道自动打开terminal服务会话。 这也给你一个非常好的安全的FTP选项,以及传输文件。

我使用ssh端口转发这些东西,并且只允许用户级,基于公钥的authentication。 所有的用户私钥也应该被encryption。 在Windows上,Putty可以做到这一点,并且pageant可以让用户轻松加载密钥。 如果你没有运行任何默认有ssh的Linux / BSD服务器,你可以在Cygwin中使用OpenSSH来做到这一点。

我推荐一个专门的远程shell服务器,用本地防火墙阻止你不想让人远程访问的东西,因为允许在SSH中进行端口转发基本上为你想要的用户打开任何内部服务器/端口。

Bitvise SSH是一个很好的Windows免费SSH。

我会去从客户端到Internet网关周边的廉价SSL VPNterminal,以供随意使用(例如商业信心)。

上述有关保护RDP的文章也是很好的做法,如果你不想和freeloader共享你的电脑,应该总是这样做。

不是最好的做法,而是一些随意的想法:

  • 保持你的系统更新 – 允许自动更新,不要使用即将到期的产品,
  • 所有系统帐户使用长/复杂的密码
  • 我会因为暗示“暗中安全”而受到责骂,但是如果你:
    • 将默认的3389 / tcp端口更改为26438 / tcp等其他名称
    • 在防火墙级别添加端口敲击 (如果可能),以便潜在的rdp用户首先访问某个网页,然后才可以将rdp发送到您的服务器。