SSL VPN是如何工作的?從運維部署角度如何快速理解他的工作過程

今天遇到了一個防火牆設備,要求配置ssl vpn,但是對這個技術不是太了解,ssl了解,vpn了解,加在一起就感覺很怪。
---------------
基於現有的姿勢的猜測:(沒有見過配置成功的案例)
有問題想不明白,希望有個成功案例 可以分析流程。


先簡單說下結論:
1.SSL/TLS + HTTP = HTTPs
2.SSL/TLS + TCP and UDP = SSL VPN

一,什麼是SSL/TLS
Transport Layer Security ,直接參考wiki定義,全面又準確。
SSL/TLS基本上伴隨了互聯網的成長,到現在它仍然是具有非常活躍生命力的協議,例如今年起草的TLS1.3。

二,為什麼是SSL/TLS
最初就是為了使HTTP傳輸更安全,HTTP變成了HTTPs。

而隨著技術發展,SSL/TLS不僅能為HTTP提供安全保障,也能為其他應用層協議提供保障例如mail,DNS,FTP等,這就是SSL VPN。

所以SSL/TLS是一個安全協議,它能在不安全的網路上創建安全的連接,提供安全的數據交換,防止數據受到竊聽及篡改。

三,SSL/TLS架構

SSL/TLS所處的位置位於傳輸層(TCP/UDP)和應用層(Application)之間,如上圖。所以意圖很明顯,就是要對上層應用提供安全保障。

SSL/TLS自己本身的結構又分為兩個協議,握手協議(Handshake Protocol)和記錄協議(Record Layer Protocol),握手協議又分為三個子協議,握手協議(Handshake Protocol),改變密碼規範協議(Change Cipher Spec Protocol)和告警協議(Alert Protocal)。SSL/TLS報文採用TLV編碼方式,不同的值代表不同的報文,具體如下圖,

Handshake Protocol 功能

提供一些重要的安全功能。它執行認證(Authentication),協商加密(Negotiates the encryption),Hash和壓縮演算法(Compression algorithms)的交互

  • Handshake Protocol

Content值22,包含「Client Hello」, 「Server Hello」, 「Certificate」和「Server Hello Done」, 4種消息類型,用於SSL/TLS連接建立

  • Change Cipher Spec Protocol

Content值20, 它通知對端改變在Handshake階段協商的加密信息,隨後記錄層協議都需要使用新的加密方法。

  • The Alert Protocol

Content值21. 將錯誤信息或連接狀態改變通告給對方。

工作流程如下:

Record Protocol 功能

從應用層接受和加密數據,然後將處理好的數據交給傳輸層。它將應用層數據進行加工,通過加密演算法對數據進行適當大小的分片,壓縮(可選)。如果是對接收的數據則進行解密和解壓縮


這裡就涉及到一個問題,Record Protocol如何處理上層應用的數據。

  • Application Protocol

Content值23,只用來傳送data payload.

工作流程如下:

四,SSL VPN
前面理論介紹完,要開始SSL VPN了。

VPN,它可以通過特殊的加密的通訊協議在連接在Internet上的位於不同地方的兩個或多個企業內部網之間建立一條專有的通訊線路。

先以SSL + HTTP = HTTPs為例。原先沒有SSL的時候,HTTP的連接是如下圖的,

數據明文,傳輸過程不加密,不認證。但是加了SSL以後,連接如下圖:

在TCP完成以後直接執行SSL/TLS層的過程,再開始傳輸數據。從而起到了加密的作用。

以上是通過HTTPs訪問網站的過程,但是如果現在要訪問的是公司內部的伺服器,那我們可以延伸一下,

  • Web代理模式

現在假設某用戶在公司內部搭建了一個SSL VPN伺服器,在伺服器上建立一個Web網站(https://sslvpn.com),然後再將公司內部基於Web的應用(例如報表,訂單等)映射到這個Web網站上。這時外部工作人員只需要通過Https登錄這個網站,然後點擊這個網站上的link,網站就會將https的連接解密後轉換成Http連接,代理訪問到內部的Web伺服器,這樣就可以安全的訪問內部的Web資源了。這就是最基本的SSL VPN形式,Web代理模式。

但是這還是有點問題,這個方式只能訪問Web或基於Web的應用,但如果內部的應用不是基於Web的,這種方式還能使用嗎?例如,現在要訪問FTP怎麼辦?所以這種方式就不靈了,必須採用其他的方式

  • 埠映射

由於SSL只能封裝在TCP之上,所以埠映射伺服器只能針對內部的TCP應用,如FTP應用(tcp port 21)。TLS可以支持UDP。

這裡有兩個地方需要做一些改變,
第一個改變在SSL VPN伺服器,此時,SSL VPN伺服器為內部FTP伺服器做了埠映射,TCP 2021埠映射到FTP的TCP 21

另一個地方在於公網用戶PC上。如果PC直接發起TCP 21的連接,那麼這將是一個明文的且沒有SSL加密的訪問,所以我們必須在客戶端上安裝一個小的SSL VPN的agent,用這個agent來代理FTP的訪問,SSL VPN伺服器會讓公網用戶PC自動載入SSL VPN agent程序。

當PC訪問FTP時,SSL VPN agent 會生成一個靜態host映射表項,並告訴PC,訪問FTP其實就是訪問127.0.0.2,那麼PC訪問的是TCP 127.0.0.2:21,SSL VPN agent會監聽這個內部地址,然後會對這個訪問進行代理,變換成訪問伺服器TCP 6.16.5.6:2021,最後該TCP訪問會使用SSL進行加密;

訪問過程如下:

我們可以發現埠映射使整個訪問過程由三段會話組成:使用者應用程序與SSL VPN客戶端程序的普通TCP會話、SSL VPN客戶端程序與伺服器的SSL會話、伺服器與內部站點的普通TCP會話。

但是另外的問題又來了,如果用戶想訪問基於IP的應用,例如,我要直接ping內部的伺服器。這個就得採用第三種方式了

  • IP連接

這裡仍然需要SSL VPN agent,此時的SSL VPN agent程序的目的是給用戶PC創建一個虛擬網卡,然後虛擬網卡創建好後,SSL VPN伺服器會給該用戶從地址池中取一個地址分配給該用戶,假設是192.168.1.2。

此時,當PC發起對內部伺服器(假設地址是10.6.16.1)的訪問時,會先使用SSL VPN agent分配的地址192.168.1.2。該訪問的數據包為Source IP:192.168.1.2--&> Destination IP:10.6.16.1。然後SSL VPN agent會將這個訪問當做應用層payload進行加密,然後在出口上封裝公網IP,Source IP:2.17.0.2(PC公網IP)--&> Destination IP:6.16.5.6(SSL VPN伺服器公網IP)。

當SSL VPN伺服器接受到伺服器的請求後,會拆掉外層包頭Source IP:2.17.0.2--&> Destination IP:6.16.5.6,解密數據包,發現是192.168.1.2--&> Destination IP:10.6.16.1的數據包,然後轉發該數據包給內部伺服器。

具體過程如下:

五,總結

最後針對以上的應用,SSL VPN對於客戶端有三種不同的部署模式,
Web代理,針對Web或基於Web的應用,客戶端採用無代理的模式(Clientless Mode);
埠重定向,針對TCP或UDP(TLS支持)的應用,客戶端採用輕代理的模式(Thin-Client Mode)
IP連接,針對直接支持IP的應用,客戶端採用隧道的模式(Tunnel Mode)


代理模式和隧道模式,代理模式最為常用。核心技術:
1 身份驗證:使用密碼或者key的方式驗證需要登錄vpn的人身份是否合法
2 用戶建立:登錄後建立用戶
3 資源:把內網不同的服務建立成資源
4 建立用戶和資源的映射

最終實現控制哪個用戶可以訪問哪些資源。

還有些具體的問題,例如對撥入終端的安全檢查,審計,等等。


推薦閱讀:

老外來中國,不能上facebook,google,twitter,TA們會怎麼樣?

TAG:VPN | 運維 | HTTPS | SSL證書 | 防火牆 |