SSL VPN作為遠程接入型的VPN,已經具備非常廣闊的前景,它的主要適應場景是取代L2TP Over IPSec,但功能要比L2TP Over IPSec更豐富,方案也更加靈活。
一、SSL VPN簡介
何謂SSL VPN,首先要從SSL談起,使用網絡不能不提的是各個網站,瀏覽網站使用瀏覽器,網絡上傳送網頁的協議叫HTTP,它是明文傳播的,傳播內容可以被黑客讀取。
而SSL全名叫Secure Session Layer(安全會話層),其最初目的是給HTTP加密使用的安全套件,使用SSL的HTTP,也就搖身一變成了HTTPS,端口也從HTTP的80變成了443。
由于HTTPS具備安全性,也具備傳輸數據的能力,也就被研究VPN技術的專家盯上了,覺得HTTPS可以用于組建VPN方案,SSL VPN技術呼之欲出了。
經過多年的發展,SSL版本發展到了3.0,也被標準組織采納為TLS(Transport Layer Security傳輸層安全)1.0之中,所以SSL VPN也叫TLS VPN。下面是SSL 與SSL VPN、TLS的區別:
1. SSL:單純的實現對某些TCP應用的保護,如HTTPS和SFTP;
2. SSL VPN:利用TCP的傳輸作用以及SSL對TCP會話的保護,實現VPN業務,被保護的VPN業務可以是TCP的、也可以UDP,純IP的應用;
3. TLS:在SSL上進行擴展,能夠直接實現對UDP應用的保護,這也是傳輸層安全的最佳注釋。
接下來看看SSL VPN的使用場景吧:
L2TP實現的是遠程接入VPN,而IPSec為L2TP提供安全保護,這種應用已經非常成熟,但屬于兩個協議的生硬組合,在方案上不是特別靈活。
而SSL VPN是天然的安全遠程接入,在方案上,特別是權限控制、應用粒度上有獨到之處,成為目前遠程接入領域的香餑餑,目前已經超越了技術范疇,而成為一個安全網絡服務框架。
SSL VPN最常見的入口還是網頁,所以推廣起來特別方便:
1. 使用者只需要記住VPN的網站(通常是HTTPS),用瀏覽器打開該網站;
2. 輸入使用者的身份信息,身份信息可以是用戶名、數字證書(如USB-Key)、靜態口令、動態口令的至尊組合,確保身份不泄露、不假冒;
3. 選擇服務種類,其中WEB代理是最為簡單的應用,也是控制粒度最細的SSL VPN應用,可以精確地控制每個鏈接;
4. 端口映射是粒度僅次于WEB代理的應用,它通過TCP端口映射的方式(原理上類似于NAT內部服務器應用),為使用者提供遠程接入TCP的服務,它需要專門的、與服務器配套的SSL VPN客戶端程序幫忙;
5. IP連接是SSL VPN中粒度最粗的服務,但也是使用最廣泛的,它實現了類似于L2TP的特性,所有客戶端都可以從服務器獲得一個VPN地址,然后直接訪問內部服務器,它也需要專門的SSL VPN客戶端程序幫忙;
6. SSL VPN由于處在TCP層,所以可以進行豐富的業務控制,如行為審計,可以記錄每名用戶的所有操作,為更好地管理VPN提供了有效統計數據;
7. 當使用者退出SSL VPN登陸頁面時,所有上述安全會話會統統釋放。
以上7個步驟可以劃分為三個階段:階段一是連接與驗證、階段二是VPN應用、階段三是審計與退出。
由于連接與驗證、審計與退出都是統一流程,也比較簡單,本期針對大家較為關注的階段二,VPN應用部分進行展開介紹。
二、WEB代理
由于SSL是封裝在TCP上的,穿越NAT不是問題,所以在示例中客戶端使用公網地址進行介紹:
1. 假設SSL VPN的WEB站點的互聯網域名是https://sslvpn,該WEB站點對應的主機則是SSL VPN服務器;
2. 使用者登陸SSL VPN的WEB頁面后,WEB代理一欄會有許多鏈接,如內部財務報表、訂單提交等內部網站;
3. 假設“訂單提交”網站在單位內部私有URL是http://site1/page,那么在SSL VPN服務器上的訂單提交鏈接URL則會進行相應的修改,變成https://sslvpn/httpsite1/pate,相當于SSL VPN站點的內部鏈接;
4. 使用者點擊“訂單提交”鏈接后,會新建一個瀏覽器窗口,打開鏈接https://sslvpn/httpsite1/page,也就是說對于使用者而言,訂單提交像是SSL VPN站點的一個鏈接,而非另外一個站點,所有的訪問都終結在SSL VPN站點;
5. SSL VPN站點的所有者SSL VPN服務器在接收到使用者對https://sslvpn/httpsite1/page的頁面請求后,SSL VPN服務器會做WEB代理的工作,即以內部地址10.1.1.1向真正的“訂單提交”站點10.6.16.3訪問頁面http://site1/page;
6. 可以發現整個頁面訪問是由使用者與服務器之間的HTTPS會話、服務器與“訂單提交”站點的HTTP會話連接而成的,服務器在這個訪問中起的是WEB代理作用,因為在“訂單提交”站點看來,訪問者IP是服務器,而不是最終用戶IP;
7. 而使用者訪問另外一個站點“財務報表”,也是類似過程。
WEB代理因為原理簡單,實現起來較為容易,因為傳統的WEB Proxy代理是兩段HTTP會話的銜接,而SSL VPN的WEB代理則把用戶與服務器的連接把HTTP換成了HTTPS、并對網站的URL進行了替換而已,從圖中我們可以看到紅色部分即為URL的替換。
從這張封裝原理圖,我們可以比較清楚地看到HTTPS與HTTP會話在這個訪問過程中的銜接。可能有人會問,讓“訂單提交”站點直接在互聯網提供HTTPS服務,直接用一個HTTPS會話不是更好,原理上當然更好,但是有更多的現實問題:
1. 直接在互聯網提供HTTPS服務,需要一個互聯網地址和公共域名,這兩樣都是要花錢申請的,使用SSL VPN統一接入,這么多內部站點只需要一個公網地址、一個公網域名,多劃算;
2. 訂單提交真的需要開放到互聯網嗎?訂單提交都是公司內部業務,訪問量也不大,直接開放到互聯網并不能有更多的提速效果;
3. 開放到互聯網怎么保證安全,財務報表等信息都是公司機密,老老實實放在內網,前面通過SSL VPN服務器擋著,即使有攻擊也只是攻擊SSL VPN服務器,內網服務器還是很安全的。
綜上所述對于一些內部站點,使用SSL VPN還是相當有好處的,特別是在擁有一款強大的SSL VPN服務器的時候。
三、端口映射
剛才講的是WEB代理,對于一些內部服務器并不是WEB站點,那WEB代理還能使用嗎?不能使用了,比如內部站點是FTP應用,那么訪問不可能由HTTPS會話和FTP會話銜接而成,SSL VPN必須想其余辦法。
由于SSL只能封裝在TCP之上,所以端口映射服務器只能針對內部的TCP應用,如FTP。
在端口映射中,SSL VPN的使用者會從SSL VPN頁面自動加載一個客戶端程序,我們姑且就叫它SSL VPN客戶端程序吧,它是怎么使端口映射工作的呢,我們假設內部有兩個FTP服務器,一個叫FTP1,內部地址10.6.16.1,另一個是FTP2,內部地址10.6.16.4,都是監聽TCP 21端口:
1. SSL VPN服務器為這兩個內部服務器做了端口映射,TCP 2021端口映射到FTP1的TCP 21,3021則映射到FTP2;
2. SSL VPN服務器會讓使用者PC自動加載SSL VPN客戶端程序,并根據這兩個映射生成兩個靜態host映射表項,告訴使用者PC訪問FTP1其實就是訪問127.0.0.2,訪問FTP2就是訪問127.0.0.3,127.0.0.0/8稱為環回地址,及該地址只能在PC內部使用,不可能被發出到PC之外,那么SSL VPN客戶端程序就監聽這兩個內部地址;
3. 使用者訪問FTP1,其實訪問的是TCP 127.0.0.2:21,所有數據都會被SSL VPN客戶端程序監聽,客戶端程序會進行代理,變成訪問服務器TCP 6.16.5.6:2021,該TCP訪問會使用SSL進行加密;
4. 大家可能會問,為何需要個客戶端程序進行代理呢,使用者的應用程序不能直接和SSL VPN服務器建立SSL會話嗎?這個問題很好,使用者的應用程序的確無法直接建立SSL會話,所以使用客戶端程序代勞,這種方式可以讓所有TCP應用都能夠享用SSL VPN服務;
5. 服務器接收到SSL加密的請求后,首先會進行解密,然后根據端口映射,會向內部FTP1站點TCP 10.6.16.1:21發起訪問;
6. 反向轉發以及訪問FTP2類似。
我們可以發現這種端口映射使整個訪問過程由三段會話組成:使用者應用程序與SSL VPN客戶端程序的普通TCP會話、SSL VPN客戶端程序與服務器的SSL會話、服務器與內部站點的普通TCP會話。
從這張圖可以看出更詳細的數據封裝過程以及會話銜接過程,使用SSL VPN服務器進行端口映射的好處與WEB代理類似,可以犧牲SSL VPN服務器,保護內部服務器。
四、IP連接
前面介紹的WEB代理是專門針對WEB應用的,端口映射則受制于SSL只支持TCP應用,如果使用者要任意訪問一個內部服務器的任意協議、端口,該如何是好呢?IP連接應運而生,IP連接可以完美地替代L2TP這種傳統意義上的VPN:虛擬連接、內部地址、路由互聯。
我們從上圖來解釋一下IP連接的原理:
1. 用戶登陸SSL VPN頁面后,會建立HTTPS會話,服務器通過這個會話給用戶自動加載SSL VPN客戶端程序;
2. 此時的SSL VPN客戶端程序的目的是給用戶PC創建一個虛擬網卡,以實現類似于L2TP那種到客戶總部網絡的VPN連接;
3. 虛擬網卡創建好后,服務器會給該用戶從地址池中取一個地址分配給該用戶,同時下發路由、DNS等信息,服務器針對該地址池也會有一個服務器地址192.168.1.1,作為所有客戶端程序虛擬網卡的網關;
4. 此時SSL VPN客戶端程序與服務器之間會建立一個全新的SSL會話,專門用來傳輸虛擬網卡與服務器之間的流量;
5. 假設用戶要訪問DNS 10.6.16.1,根據路由的關系,PC會通過虛擬網卡將DNS請求(源192.168.1.2目的10.6.16.1)轉發給SSL VPN服務器192.168.1.1;
6. PC上的SSL VPN客戶端程序會將虛擬網卡發出的IP包封裝至新的SSL會話中,通過互聯網傳送到服務器;
7. 服務器進行解密,解封裝后發現IP目的地址是10.6.16.1,那么就轉發給DNS;
8. 反向過程以及訪問ERP服務器10.6.16.4與此類似。
再來看一下數據封裝過程,會有更加直觀的認識:
在SSL VPN的IP連接中,客戶端訪問內部服務器不再像WEB代理、端口映射那應該多個會話銜接而成,而是一個內部地址端到端會話,穿越互聯網的時候直接會話被封裝至SSL會話中,和L2TP Over IPSec非常類似。
五、SSL VPN總結
為什么說SSL VPN可以通過多粒度的服務呢?這是一個對比:
1. WEB代理,可以精確到對HTTP站點某些URL的控制;
2. 端口映射,可以精確到對某個端口的控制;
3. IP連接,可以精確到對某個IP地址的控制;
L2TP只能實現3,無法實現1和2,更是很難實現行為審計功能。因此業界非常看好SSL VPN的前景,但使用SSL VPN必然也有一些局限性和代價:
1. 對于站點到站點的應用,效率上不如IPSec,所以通常用來取代L2TP方案,而不是IPSec方案;
2. SSL VPN的IP連接服務,在有連接的TCP中封裝無連接的IP、UDP上效率不是很高,如果TCP中再封裝TCP,在網絡狀況不穩定情況下,傳輸效率可能會急劇下降,但這個難題在被逐步功課之中,將來的TLS VPN可以實現在安全UDP會話,那情況就會好轉很多;
3. SSL VPN客戶端必須配合SSL VPN服務器,各個廠家的客戶端都是自行開發的,無法互相兼容。
版權聲明:本文轉載自公眾號“ccie_lab”,版權歸原作者所有,轉載請保留此字段,感謝!