什么是IPsec?
IPsec(Internet Protocol Security)是為IP網絡提供安全性的協議和服務的集合,它是VPN(Virtual Private Network,虛擬專用網)中常用的一種技術。其實就是一種協議簇(類似TCP/IP協議簇),IPsec VPN就是基于IPsec協議簇來進行封裝的一種VPN技術。VPN的核心就是隧道技術,隧道技術的核心就是封裝技術。
通信雙方通過IPsec建立一條IPsec隧道,IP數據包通過IPsec隧道進行加密傳輸,有效保證了數據在不安全的網絡環境如Internet中傳輸的安全性。
IPsec VPN 保護的是點對點之間的通信,通過IPsec VPN可以在主機和主機之間、主機和網絡安全網關之間或網絡安全網關(如路由器、防火墻)之間建立安全的隧道連接。其協議主要工作在IP層,在IP層對數據包進行加密和驗證。
IPsec?VPN的工作流程
大致可以分為四個階段:
1、識別“感興趣流”。網絡設備接收到報文后,通常會將報文的五元組等信息和IPsec策略進行匹配來判斷報文是否要通過IPsec隧道傳輸,需要通過IPsec隧道傳輸的流量通常被稱為“感興趣流”。
2、協商安全聯盟(Security Association)。SA是通信雙方對某些協商要素的約定,比如雙方使用的安全協議、數據傳輸采用的封裝模式、協議采用的加密和驗證算法、用于數據傳輸的密鑰等,通信雙方之間只有建立了SA,才能進行安全的數據傳輸。
????????識別出感興趣流后,本端網絡設備會向對端網絡設備發起SA協商。在這一階段,通信雙方之間通過IKE協議先協商建立IKE SA(用于身份驗證和密鑰信息交換),然后在IKE SA的基礎上協商建立IPsec SA(用于數據安全傳輸)。
3、數據傳輸。IPsec SA建立成功后,雙方就可以通過IPsec隧道傳輸數據了。IPsec為了保證數據傳輸的安全性,在這一階段需要通過AH或ESP協議對數據進行加密和驗證。加密機制保證了數據的機密性,防止數據在傳輸過程中被竊取;驗證機制保證了數據的真實可靠,防止數據在傳輸過程中被仿冒和篡改。
????????如下圖,IPsec發送方會使用加密算法和加密密鑰對報文進行加密,即將原始數據“喬裝打扮”封裝起來。然后發送方和接收方分別通過相同的驗證算法和驗證密鑰對加密后的報文進行處理得到完整性校驗值ICV。如果兩端計算的ICV相同則表示該報文在傳輸過程中沒有被篡改,接收方對驗證通過的報文進行解密處理;如果ICV不相同則直接丟棄報文。
IPsec VPN中的數據加密流程:
4、隧道拆除。通常情況下,通信雙方之間的會話老化(連接斷開)即代表通信雙方數據交換已經完成,因此為了節省系統資源,通信雙方之間的隧道在空閑時間達到一定值后會自動刪除。
IKE (互聯網密鑰交換協議)
?
主要用來完成IPsec中需要的密鑰相關參數的協商工作,可以動態建立IPsec SA 。有兩個版本IKE V1、IKE V2
IKE中的三個協議
1、SKEME
2、OAKLEY
3、ISAKMP ISAKMP(互聯網安全聯盟密鑰管理協議)
我們重點了解第三個ISAKMP ISAKMP(互聯網安全聯盟密鑰管理協議)
這就是IKE協議的本體,主要用來完成IPSEC中需要的密鑰相關參數的協商工作。可以動態建立IPsec SA UDP500----源、目標端口都必須是500。
SKEME、OAKLEY ---這兩個協議可以理解為是IKE協商過程中使用到的資源庫(了解即可)
注意:身份認證是建立安全通道的前提。
IKE第一階段
主要目的是為了獲得建立IPSEC SA時使用的密鑰,以及進行身份認證。
IKE SA(ISAKMP SA)-----這個SA是雙向邏輯的,不區分源和目標。
主模式:默認使用IP地址作為身份標識(也要作為PSK的識別標志),使用6個數據包進行交互,安全性更高

這里我們根據上圖中的各個數據包單獨進行分析:
第一二個數據包:進行SA交換
1、Cl--- cookie ---這個參數每個數據包中都會攜帶,在IKEV2中,變成了SPI,在這里作用類似。 2,SA---里面攜帶的是需要協商的安全參數 ------“五元組"(如下)
加密算法,哈希算法,身份認證,DH組,SA存活期
AES ??????????????MD5???????? PSK???????? DH2 ?????84600s(默認值)
注意:手工建立的SA,一經建立,則將永久有效;但是IKE建立的SA,需要配置生存周期,周期時間到了之后,將重新建立SA。時間可以不同,不同的話按照小的來執行。
第二個回包主要確認安全參數,如果安全參數都可以對的上,則將繼續完成后面的協商。如果參數沒有對上,則將回復一個負載拒絕報文,結束IKESA的建立。
第三四個數據包 ---DH密鑰交換 ---對稱密鑰1,NI,Nr---代表的是隨機數 2,X,Y --- DH算法中需要公開的參數這里,為了加強安全性,DH算法會生成四種密鑰
種子密鑰 --- 剩余三種密鑰都需要加入種子密鑰運算得出,并且,種子密鑰中計算時,會攜帶預共享密鑰。
SKEYID_e---加密密鑰 --- g^ir(代表的就是DH算法中計算出來的Z),CKY-I/CKY-R(前面雙方攜帶的cookie值)----用于第一個階段5,6數據包和第二階段數據包加密使用。
SKEYID_a ---- 驗證密鑰 ---用于第二階段hash時使用的密鑰 ---HMAC算法(結合密鑰的HASH算法),安全性比不加入密鑰的HASH算法更高。
SKEYID_d ---推導密鑰 ---用于計算最終密鑰(最終加密數據的密鑰)的素材
注意:在NAT環境,或是IP地址會變化的場景下,不適合用主模式。
野蠻模式?
特點:可以自定義身份標識,速度快,只需要三個數據包就可以完成標識,安全性低

注意:在野蠻模式中,可以自定義身份標識,主要是因為身份信息不需要加密,并且,前兩個數據包都無法加密,所以,野蠻模式安全性較低。僅第三個數據包會進行加密。但是,野蠻模式適用于NAT環境以及IP地址不固定的環境。
主模式和野蠻模式的區別

第二階段
基于已經建立的安全通道,來協商建立IPSEC SA的安全參數,完成后,則標志著IPSEC SA的建立。 快速模式(quick mode) UDP500
需要協商的安全參數
加密算法 ---正式傳輸數據時使用的加密算法(加密算法協商完成后,會計算密鑰第一階段計算出來的推導密鑰會加入到該密鑰的計算中)
HASH算法 ---正式傳輸數據時進行完整性校驗的算法
安全協議 ---AH/ESP
封裝模式 --- 傳輸模式/隧道模式
存活時間
可以了解一下這個協議
PFS --- 密鑰完美向前保密 --- 正常工作中,第二階段的最終密鑰是通過第一階段的推導密鑰計算出來的,但是,這樣做不安全,推導密鑰泄露可能導致最終密鑰泄露。所以,可以開啟這個PFS技術(注意:要開啟需要兩端設備都開啟才行),之后,則將在第二階段重新進行一次DH交換,計算最終的密鑰,從而提高安全性。
數據傳輸階段
VPN黑洞:隧道建立之后,如果其中一段的設備異常重啟,另一端還在有效期內,則他發送的數據將有去無回,就形成了VPN黑洞。
解決方法
DPD死亡對等體檢測。類似于心跳檢測機制 ---采用空閑計時器原理 ---兩邊同時開啟一個固定時間的計時器,期間數據值直接發過去,如果計時器超時,則數據發送前,先發送一個DPD檢測報文,如果收到對方的DPD應答報文,則將重置計時器。如果沒有收到,并且,連續5次都沒有收到,則將拆掉安全通道。
最后,在面試過程中常問的一個問題,IPSec SA和IKE SA誰是單向誰是雙向?
IKE SA 是雙向的,兩端只需要構建一條SA就可以共同擁有了;
IPSec SA是單向的,所以就需要創建兩條。