环境
一家小型企业(规模太小,无需使用终端服务网关)希望某些用户能够从家里访问他们的 Windows 10 桌面。
我曾使用 Windows 远程桌面成功实现过此目的,但最佳实践建议不要直接公开 RDP 端口。建议通过 VPN 保护 RDP,但是过去我通常为此目的设置一个 SSH 隧道,因为我对此更熟悉。
我将假设客户端有一台可以运行 SSH 服务器的计算机,并将其称为SSH_SERVER
。 就我而言,通常已经有一台 Linux 或 BSD 计算机,要么用作文件服务器,要么充当防火墙(例如 FreeNAS、pfSense),如果没有,我通常会使用一台专门用于处理这项工作的重建 PC。
SSH 端口转发版本
在本节中,我将详细介绍如何为需要 Windows 远程桌面访问的客户端设置 SSH 端口转发。
- 设置 SSH 的密钥身份验证,
SSH_SERVER
并打开防火墙以在某些非标准端口上公开它。<EXT_SSH_PORT>
注意:这是仅有的我曾经打开过的外部端口,全部与网络的通信是通过 SSH 上的端口转发完成的。 - 对于每个想要远程连接的客户端,我都会生成一个用户,
SSH_SERVER
并将 shell 设置为/bin/false
。 - 添加 SSH 限制,允许用户仅针对他们想要连接的端口和设备进行端口转发。例如,我在文件中添加以下内容
/etc/sshd_conf
:
Match User <USERNAME>
AllowAgentForwarding no
PermitOpen <USER'S_WINDOWS_DESKTOP_IP>:3389
ForceCommand echo 'This account is restricted.'
(更深入的讨论这里)。
- 对于每个设备用户想要连接时,我会生成一个密钥对,并用我提供给他们的密码进行加密。然后我 (a) 将公钥添加到用户
~/.ssh/authorized_keys
文件中,(b) 将私钥安全地传输到用户的设备中。 - 我创建了一些轻松设置 SSH 隧道的方法,要么使用一个可以运行的简单脚本,
ssh -L 10000:<USER'S_WINDOWS_DESKTOP_IP>:3389 <OFFICE_EXTERNAL_IP> -p <EXT_SSH_PORT>
要么使用辅助软件(例如苹果系统, 为了视窗)。 - 我为 RDP 会话添加了一个快捷方式
localhost:10000
。
这种方法效果很好,但我总是觉得它不够“专业”,有一天我应该将这些 SSH 隧道转换为 VPN。
VPN 限制
我正在使用 L2TP/IPSEC 探索这个问题(在 UniFi Dream Machine 上,尽管我认为这里的限制并非特定于路由器),但立即遇到了一些限制:
- 办公室网络必须具有与客户端子网不同的 IP 子网。这会有点烦人,但我想我可以这样做。另一方面,我发现你基本上只是希望选择一个客户端将要使用的子网,这相当不令人满意绝不碰巧在线 - 如果他们正在访问其他公司并使用他们的 wifi,而你恰好从那里选择了与 IT 供应商相同的子网,该怎么办?
- 不清楚如何限制每个用户与单个 PC 的单个端口进行通信。我知道我可以设置它,以便将 VPN 用户放置在单独的 VLAN 中,然后添加防火墙规则,限制从该 VLAN 到特定 RDP 桌面上的端口 3389 的连接,但这并不能阻止 USER_A 尝试连接到 USER_B 的桌面。如果我出于某种原因还打开了 RDP 以外的端口,那么所有 VPN 用户都可以访问这些端口,除非我设置每个用户在他们的自己的VLAN,这似乎是对于我基本上已经通过 SSH “免费”拥有的功能的额外管理开销。
- 没有明确的每个设备的安全性。使用我上面提到的 SSH 方法,如果 USER_A 的笔记本电脑被盗,则无需担心。首先,私钥是加密的,因此除非笔记本电脑在用户主动连接时被盗,否则他们应该无法访问办公室网络。此外,为了增加安全性,我可以从中删除与被盗笔记本电脑相关的密钥
~/.ssh/authorized_keys
,并且客户拥有的所有其他设备(例如个人台式机)将继续工作,无需额外配置。
TL;DR:为什么有人更喜欢使用 VPN 而不是 SSH 端口转发?
似乎唯一需要使用 VPN 的情况是全部通信通过办公室网络进行,并且您对远程网络有一定程度的了解/控制。(站点到站点 VPN 属于此类别。)
我是不是漏掉了什么?VPN 是否比 SSH 端口转发提供更高的性能和/或安全性?
答案1
在我看来,您提出的 SSH 解决方案对于当前的问题来说过于复杂了。
两条建议:
将 VPN 与 2FA/MFA 解决方案(例如 Duo)结合使用。
如果 VPN 有问题,则使用其他远程访问解决方案,如 Teamviewer、AnyDesk 等,并结合 2FA/MFA 提供商(如 Duo)。
您可以创建一个免费的 Duo 帐户,最多可供 10 位用户使用。