1. 程式人生 > >linux ipsec 資料包處理流程

linux ipsec 資料包處理流程

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處理完畢