背景

綜合分析了之前提到的遠程開發技術方案,結合安全,性能,效率,成本,應用,部署難度多方面因素,決定以內網穿透為基礎,進行遠程開發環境部署,下面先準備部署遠程創建環境

內網穿透

首先,明確當前的目標,遠程的目的不是為了去控制一個內網的 Windows 系統,而是希望能連接上遠程的 Ubuntu 環境,準確點應該説是遠程 Linux 環境,因為利用終端命令行登錄,也沒必要看到 Ubuntu 的桌面環境了

然後,內網穿透是一個概念,是讓位於私有網絡中,沒有公網 IP 的設備,能夠被公網上的其他設備訪問的技術,遠程桌面比如遠程桌面就是一種內網穿透技術的具體實現,但前面説了,現在目標不是去控制一個內網的 Windows 系統,而是希望通過終端命令行能夠登錄遠程的 Linux 系統,就像在家裏用 VSCode 登錄 Ubuntu 一樣,這裏提到 VSCode 登錄 Ubuntu 環境,就不得不提到 Remote SSH 插件,沒錯,就是 SSH 科技

SSH(Secure Shell)是一種用於安全遠程登錄和網絡服務的加密通信協議,主要用於在不安全的網絡(如互聯網)中,安全地訪問和管理遠程計算機

  • SSH 是運維,開發,雲計算的基礎設施協議
  • 幾乎所有 Linux 服務器都依賴 SSH 進行管理
  • SSH 被廣泛用於自動化腳本,CI/CD,Git 代碼託管等
  • 是實現零信任安全架構一旦 SSH 認證通過,那麼後續就無限信任其來源,不會再做任何防備,可見 SSH 認證的含金量之高就是的重要組件之一,意思就

SSH-2,SSH-1 有安全缺陷已經被淘汰,關於 SSH 的詳細內容,後面有空再分析,OK,確定了內網穿透科技方案:SSH 遠程認證登錄,下面先回顧下之前在局域網領域,SSH 登錄的過程就是目前主流

ubuntu16.04利用ssh反向代理及autossh實現內網穿透_雲服務


下面結合雲服務器(具有公網 IP),其登錄過程是這樣的

  • 第一步,內網設備主動連接雲服務器,建立 SSH 反向隧道,沒錯,這裏內網的家庭服務器需要先用私鑰和雲服務器進行 SSH 認證,隨後建立反向隧道,反向隧道能讓公網上的雲服務器主動將某個端口的流量反向轉發到內網客户端來,這個過程也叫打洞
  • 第二步,用户在外地,先通過 SSH 認證,登錄雲服務器
  • 第三步,登錄雲服務器後,再通過 SSH 本地轉發的方式訪問到內網

或者在第二步用户直接用私鑰 1 訪問雲服務器的固定端口,雲服務器只做轉發

ubuntu16.04利用ssh反向代理及autossh實現內網穿透_內網_02


但是這種方法,任何能訪問雲服務器 IP 的人,都行連接這個固定端口並穿透到內網此時雲服務器不做任何來源過濾或認證,只是純 TCP 轉發,萬一有惡意流量,將直接打到內網當然,這種情況也可以用雲服務器防火牆限制來源 IP,設置安全組白名單,只允許用户的辦公 IP 或家庭 IP 可以訪問這個固定端口

ubuntu16.04利用ssh反向代理及autossh實現內網穿透_IP_03

另外,加強縱深防禦,加固內網服務本身,確保即使流量進來了,內網服務難以被攻破,比如

  • 禁用 SSH 密碼登錄,只允許密鑰認證
  • 使用強密鑰(ed25519)
  • 限制 SSH 用户權限,禁止 root 用户登錄
  • 定期更新系統和 OpenSSH,比如舊版 OpenSSH 的漏洞可能被利用
  • 考慮用 fail2ban 防暴力破解
  • 記錄 SSH 登錄日誌 /var/log/auth.log,定期檢查
  • 監控異常端口監聽,定期審計等