淺談常見的隧道技術之IPSec
淺談常見的隧道技術之IPSec
IPSec不是單獨的協議,而是一套網路安全協議族,包括網路認證協議AH(Authentication Header,認證頭)、ESP(Encapsulating Security Payload,封裝載荷)和金鑰管理協定IKE(Internet Key Exchange, 因特網金鑰交換)以及用戶網路認證及加密的一些演算法等。
IPSec工作模式分為:傳輸模式(transport)和隧道模式(tunnel)兩種。簡單來說傳輸模式是原始二層資料包不再附加二三四層頭、隧道模式是原始二層資料包經過協定隧道封裝是添加上二三四層頭,IPSec的隧道模式就是在原始的ip封包外面再封裝了一層ip頭,所以IPSec也常被大家稱作三層隧道協定。以下就帶大家詳細的了解一些這些具體的協議,以及IPSec協議實際應用中佔據重要地位的穿越NAT實現。
Part 01、安全協定-AH協議
AH協定是一種基於IP的傳輸協議,協定編號為51。具體工作方式是在每一個資料包的標準IP封包頭後面加上一個AH封包頭:
AH協定發送方會對資料包和認證金鑰進行hash計算,接收方收到報文之後,按照相同的演算法進行hash計算並與原計算結果進行比較,如果不一致,可以推斷資料包在傳輸過程中遭到了修改或破壞。透過這樣的方式,能提供資料來源認證和資料完整性校驗。值得一提的是AH協定的完整性校驗範圍是整個IP封包。
AH封包頭中有幾個重要的欄位值得關注:安全參數索引(SPI)用於唯一識別IPSec安全聯盟,序號唯一標識每一個資料包,能用於防重播攻擊。
Part 02、安全協定-ESP協議
和AH協定一樣,ESP協定也是一種基於IP的傳輸層協議,協定號碼為50。具體的工作方式是在每個資料包的IP封包頭後面加上一個ESP封包頭,值得注意的是,在封包尾部還追加一個ESP尾部(ESP Tail和ESP Auth Data),同時還有一點與AH協定不同的是,ESP協定僅對IP資料包的有效載荷進行加密,對IP封包頭是沒有進行加密保護的。
和AH協定類似,ESP報文頭中也有安全參數索引(SPI)和序號兩個字段,並且,AH協定和ESP協定的認證演算法是相通的。
AH協定和ESP協定具體的比較如下:
總結:AH協定不能提供資料包加密功能,ESP協定驗證範圍不包括IP頭部,故在安全性要求較高的場景中可以考慮聯合使用AH協定和ESP協定。
Part 03、 IKE協議
簡單來說,IKE協定是動態協商IPSec隧道的協議,能完成身份驗證、金鑰交換、產生IPSec SA,協商過程中,資料包具體採用AH協定還是ESP協定封裝以及身分認證就定下來了。
IKE協定目前有兩個版本:IKEv1和IKEv2,IKEv2在v1的基礎上,不僅簡化了SA的協商過程,提高了協商效率,而且修復了多處公認的密碼學方面的安全漏洞,提高了安全性能,所以實際IKEv2應用更加廣泛。
以IKEv2為例,透過初始交換可以協商建立第一對IPSec SA,這其中包含兩次交互四條訊息,包含加密和驗證演算法等參數協商,產生共享金鑰,完成身份認證、訊息認證。如果需要建立多對IPSec SA,可以透過建立子SA交換過程協商出來,同時在協商過程中存在一些控制訊息的傳遞,例如錯誤訊息或通告訊息,這些訊息是透過通知交換完成的。
Part 04、 NAT穿越
IPSec協定能廣泛應用,除了能提供安全加密的傳輸之外,另一個重要原因是能夠實現NAT穿越,這在現網傳輸中是極其重要的,因為公網IP資源有限,絕大部分設備都是透過NAT轉換之後共享公網IP資源傳輸交換封包的,所以穿越NAT在現網應用中是極為重要的。
如前文所描述的AH協定和ESP協定的特點,我們發現AH協定不能穿越NAT,原因是NAT會修改封包的IP頭,但是AH完整性校驗是基於整個IP報文的,所以導致AH協定下IPSec不能穿越NAT。而ESP封包的完整性校驗不包括IP頭,IP位址轉換也不會破壞ESP的hash值,所以在只做IP轉換的NAT場景下,ESP協定封裝是支援NAT穿越的。但是很多時候,公網IP是共用的,所以NAT轉換不僅需要轉換IP,同時需要轉換端口,但是ESP協定對IP有效載荷進行加密了,導致無法對端口號進行修改,這也是很多IP in IP的隧道無法穿越NAT的根本原因,解決方法是再加一個UDP封包頭-NAT-T(NAT Traversal),來源目的埠號碼皆是4500。
NAT-T的方式隧道能解決IPSec穿越NAT的問題,但是穿越NAT之後同樣存在以下兩個問題:一是穿越NAT後的身份認證及IP位址復用的問題。在目前的IP網路中,IP即為身分標識,但是NAT之後IP會發生變化,當前國內主要採用字串取代IP位址作為身分識別的方式,這樣就不受NAT影響了。二是ESP協定是基於IP的協議,當NAT網關背後存在多個ESP應用端,且位址復用一個,那麼無法只根據IP協定號進行反向映射,ESP協定必須做出改變。這點在NAT-T流程中會有具體的體現,以下我們將詳細闡述NAT-T流程。
首先判斷雙方是否支持NAT-T。當開啟NAT穿越時,IKE協商過程中會發送標識NAT-T能力的vendor ID載荷,用於檢查通訊雙方是否支援NAT-T,只有當雙方都在各自的訊息中包含了該載荷,後續才會進行相關的NAT-T協商。其次是判斷鏈路上是否存在NAT設備。在IKE協商中,會發送NAT-D(NAT Discovery)載荷,這個載荷用於探測NAT設備,雙方都會向對方發送來源目的IP和連接埠的hash值,存放在該載荷中,如果在傳輸過程中發生改變,hash值會對應的改變,判斷hash值就可以判斷連結中是否有NAT轉換。最後是ESP處理,在前兩步驟的前提下,當發現NAT閘道之後,後續的IKE封包埠號碼轉換成4500。
上述技術雖然能實現NAT穿越,但也存在一定的限制:使用NAT-T功能會導致在IKE協商過程中增加約200位元組的開銷,資料傳輸過程中也會增加約20位元組的開銷;同時不能採用AH協議,一定程度上也會降低安全性;NAT設備無法保證始終固定的IP和固定的連接埠為內部主機提供存取映射,所以IPSec必須能夠自動偵測變化,以確保通訊始終暢通。
Part 05、 後記
IPSec自從1990年開發出來以來,目前為止已經應用超過30年,技術的發展經過一代代的積累也日漸成熟,基礎的交換流程也比較完備,未來的發展方向大概率是在認證和加密算法上面。美國NIST在2020年也發布過特別出版品《IPSec VPNs指南》,文中指出IETF正著力於研究各類IKE與IPSec擴展議題,同時也介紹了在組播與組認證、ESP中的隱式IV、後量子密鑰交換等方面的努力。未來我們將及時關注最新的IPSec技術,在實際生產和工作中進行應用,為中國行動新型網路架構添磚加瓦。