
環境
小型企業(太小而無法證明終端服務閘道的合理性)希望某些使用者能夠在家中存取其 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 有問題,請結合 2FA/MFA 提供者(例如 Duo)使用不同的遠端存取解決方案(例如 Teamviewer、AnyDesk 等)。
您可以建立一個免費的 Duo 帳戶,最多可供 10 個使用者使用。