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处理完毕

你可能感兴趣的:(网络安全)