linux ipsec 資料包處理流程
阿新 • • 發佈:2019-01-11
IPSec資料流處理
資料流輸入處理:
1)模組接收一個IP包;
2)如果IP包下一下協議proto=UDP&&port=500,繞過不處理,傳給上層協議;
3)判斷下一個協議proto是否AH或ESP,如果不是,根據其地址查SPD,如果有對應策略則丟棄該包否則繞過;(IPSec只負責IPSec包的處理)
4)查三元組,得said指標;
5)根據said查詢SAD
if SA為空
〔查詢策略;(根據selector,查詢相應的SPD,取SPD中的action)
if統過 不處理;
if丟棄 丟包;
if應用 丟包;
if無策略 不處理〕
if SA期滿 丟包;
if SA狀態異常 丟包;
6)檢查序列號seq,抗重播撿查;
7)根據下一個協議為AH或ESP,分別送交AH/ESP處理模組進行驗證解密,並剝去AH頭或ESP頭和尾;
8)從策略(或SA)中獲知是採用傳輸模式,還是隧道模式;
9)If tunnel mode,移走外部IP頭;
10)對這個處理後的新的IP包進行策略檢查(如果沒有策略則宣告失效);
11)檢查新的內部IP頭的“nextproto”欄位,如果不是IPSec頭,處理結束、返回。
12)如果IP頭的目的地址不是自己,則轉發。
13)如果仍為IPSec包,轉4)。
資料流輸出處理:
1)模組取出一個IP包;
2)根據selector查詢策略資料庫SPD,根據action判斷是否應用或丟棄,若沒有SPD,則繞過;
3)查詢SPD對應的SA或SA束(真正的目的地址所有的)
if 沒有SA
手工建立;或IKE動態建立;或繞過;
if 有SA
SA生命期、狀態的判斷;
4)將策略,SA和原始IP包送給AH/ESP模組處理(負責根據傳輸模式和通道模式,插入AH頭(ESP頭和尾)和外部IP頭(此時可將外部IP頭源、目的地址設為和內部頭一樣));
5) if策略中有閘道器應用且到該閘道器有策略;
6)根據策略查詢相應的SA
if 沒有SA
手工建立;或IKE動態建立;或繞過;
if 有SA
SA生命期、狀態的判斷;
7)將策略,SA(束)和處理後的IPSec包送結AH/ESP模組處理。(此時IP頭目的地址為閘道器);
8)IPSec處理完畢
資料流輸入處理:
1)模組接收一個IP包;
2)如果IP包下一下協議proto=UDP&&port=500,繞過不處理,傳給上層協議;
3)判斷下一個協議proto是否AH或ESP,如果不是,根據其地址查SPD,如果有對應策略則丟棄該包否則繞過;(IPSec只負責IPSec包的處理)
4)查三元組,得said指標;
5)根據said查詢SAD
if SA為空
〔查詢策略;(根據selector,查詢相應的SPD,取SPD中的action)
if統過 不處理;
if丟棄 丟包;
if應用 丟包;
if無策略 不處理〕
if SA期滿 丟包;
if SA狀態異常 丟包;
6)檢查序列號seq,抗重播撿查;
7)根據下一個協議為AH或ESP,分別送交AH/ESP處理模組進行驗證解密,並剝去AH頭或ESP頭和尾;
8)從策略(或SA)中獲知是採用傳輸模式,還是隧道模式;
9)If tunnel mode,移走外部IP頭;
10)對這個處理後的新的IP包進行策略檢查(如果沒有策略則宣告失效);
11)檢查新的內部IP頭的“nextproto”欄位,如果不是IPSec頭,處理結束、返回。
12)如果IP頭的目的地址不是自己,則轉發。
13)如果仍為IPSec包,轉4)。
資料流輸出處理:
1)模組取出一個IP包;
2)根據selector查詢策略資料庫SPD,根據action判斷是否應用或丟棄,若沒有SPD,則繞過;
3)查詢SPD對應的SA或SA束(真正的目的地址所有的)
if 沒有SA
手工建立;或IKE動態建立;或繞過;
if 有SA
SA生命期、狀態的判斷;
4)將策略,SA和原始IP包送給AH/ESP模組處理(負責根據傳輸模式和通道模式,插入AH頭(ESP頭和尾)和外部IP頭(此時可將外部IP頭源、目的地址設為和內部頭一樣));
5) if策略中有閘道器應用且到該閘道器有策略;
6)根據策略查詢相應的SA
if 沒有SA
手工建立;或IKE動態建立;或繞過;
if 有SA
SA生命期、狀態的判斷;
7)將策略,SA(束)和處理後的IPSec包送結AH/ESP模組處理。(此時IP頭目的地址為閘道器);
8)IPSec處理完畢