加载中…
个人资料
绝世流浪汉
绝世流浪汉
  • 博客等级:
  • 博客积分:0
  • 博客访问:86,140
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

【互联网运维--安全技术】Ipsec 数据包处理流程简介

(2012-04-30 20:19:06)
标签:

ipsec

ah

esp

分类: 互联网运维技术

上周因为要给公司的同事讲安全课,趁着这个机会我阅读了一些ipsecrfc文档以及在linux上的实现代码。对ipsec处理数据包流程有了一些比较清晰的了解,现在整理文档如下。

 

概念介绍

ipsec对数据包进行处理主要是按照两个数据表来实现的一个就是SPD(安全策略数据库),另一个则是SAD(安全联盟数据库),

SP主要是描述到达或者源自某个网络/主机的特定数据流的处理策略(指安全方面的处理策略)。对于特定的数据流只有三种策略(action):包丢弃(discard);不采用ipsec(bypass)(此种情况有些文档中也称为无策略);采用ipsec(apply ipsec).

包丢弃(discard:是指对规定不能通过ipsec设备的数据包进行丢弃处理;

不采用ipsec(bypass):是指那些可以通过ipsec设备路由,但是不进行ipsec处理的数据包,这些包可以正常的被路由过程处理,由路由模块决定转发过程。

采用ipsec(apply ipsec):是指需要被ipsec进行保护的数据包,这些包将会被ipsec处理(例如被ahesp协议封装,是传输模式还是隧道模式)。数据包被ipsec模块处理后,才被放到路由模块进行路由转发处理。

SP被有序的组织起来,看上去类似于一个数据库,这就叫做SPD。有两种类型的SPD分别是针对输入数据包和输出数据包的。如何识别一个SPD中的记录(SP策略)呢?RFC定义了一个专门的术语,叫做选择器(selector),关于选择器RFC定义了大概8种元素,但是目前主流是包括了以下内容,数据包的源IP地址,目的IP地址,传输层协议,源端口,目的端口。

假设有以下拓扑:

【互联网运维--安全技术】Ipsec <wbr>数据包处理流程简介

 

 

在该拓扑中,192.168.3.1所在的ispec网关上应该会有如下类似的输出SPD

 

匹配顺序

选择器

执行的动作

源地址

目的地址

协议

目的端口号

1

192.168.1.0/24

192.168.2.0/24

Any

Any

Apply ipsec

[ESP]

隧道模式

隧道起始地址:192.168.3.1

隧道目的地址:

192.168.3.2

加密算法:DES-CBC

认证算法:HMAC-SHA-1

SA指针:0x89ba

2

Any

Any

Any

Any

Bypass ipsec


 

   2   SA(安全联盟),是描述两个ipsec实体对某种特定数据流的一种安全保护协定。

内容包括:

-采用何种IPSec协议(AH还是ESP

-运行模式(传输模式还是隧道模式)

-验证算法

-加密算法

-加密密钥

-密钥生存期

-抗重放窗口

-计数器等

SA决定了保护什么、如何保护以及谁来保护。SA是单向的,进入(inboundSA负责处理接收到的数据包,外出(outboundSA负责处理要发送的数据包。因此每个通信方必须要有两种SA,一个进入SA,一个外出SA,这两个SA构成了一个SA束(SA Bundle)。

如何识别一个SA呢,是由一个三元组SPI,源/目的IP地址,IPSec协议(采用esp还是ah惟一标识。

-SPISecurity Parameter Index,安全参数索引)是32位的安全参数索引,标识同一个目的地的SA

-/目的IP地址:表示对方IP地址,对于外出数据包,指目的IP地址;对于进入IP包,指源IP地址。

-IPSec协议:采用AHESP

SA可以是手工配置完成,也可以是通过 IKE这样的密钥管理协议在通信对等方之间协商而生成,通常我们都是采用自动生成的配置。

SA中的存在的元素 (以192.168.3.1的输出SA为例)

 

        元素

  上图拓扑中的示例

终端IP地址

192.168.3.2

Ipsec协议

ESP

SPI

0x78fa87be

封装模式

隧道模式

认证算法

HMAC-SHA-1-96

认证密钥

0x0a1b2c3d445e6f778899a1bbc34de5ff00112233

加密算法

AES-CBC

加密密钥

0x07192c88df5e6f76bb89a563c34de5fe

BCN隧道

无效(forbidden

序列号计数器

75

序列号计数器是否溢出

1(溢出的情况下SA无效)

SA的有效期

软生存周期:3570  硬生存周期:3600

防止重放窗口

11111111111111111111111111111101

数据传送字节数

87653bytes

PMTU

1472

加密算法使用的iv

0x723bf68de5f458eda79a562c35d65be6

部分表示必须存在的元素,是唯一标识一个SA记录项的关键字。

注意这个表只是一个举例而已,并不是所有的元素都必须要存在,例如如果只是采用ah协议,当然就不需要加密算法和加密密钥了。

 

对一些主要的元素定义描述如下:

  -终端IP地址:这是一个必须要存在的元素。当采用隧道模式的时候,该元素表示的是隧道终端的ip地址,如果是传输模式则是原ip头部的Ip地址。

  -Ipsec协议:这是一个必须要存在的元素。Ah或者ESP

  -SPI:这也是一个必须要存在的32bit的整数。无论是ah还是esp在头字段中都有该值存在。1255IANA保留将来使用。0被保留用于本地实现

  -封装模式:隧道模式还是传输模式

  -序列号计数器:32位整数,刚开始通常为0,每次用SA来保护一个包时增1,用于生成AHESP头中的序列号域,在溢出之前,SA会重新进行协商

  -序列号计数器是否溢出:只用于外出包处理,标识序列号计数器溢出时,一个SA是否仍可以用来处理其余的包,默认情况:32位的序列号溢出后,SA失效,从新协商生成SA并且序列号计数器归0.

-SA的有效期:包含一个时间值,外加一个当该SA过期时是被替代还是终止。采用软和硬的存活时间:软存活时间用于在SA会话到期之前通知内核,便于在硬存活时间到来之前内核能及时协商新的SA,这个值也可以通过定义传输的字节数来定义,比如可以定义该sa上传送8000字节,就重新协商sa,两者都定义的时候,哪个先达到条件,则采用哪个条件。

  -PMTU值:路径最大传输单元,是可测量和可变化的,它是IP数据报经过一个特定的从源主机到目的主机的网络路由而无需分段的IP数据包的最大长度。

  -加密算法使用的iv:加密算法使用的初始化向量。

-防止重放窗口:这是一个可选的参数,由接受端是否采用序列号计数器认证而决定。它使用一个32位计数器和位图确定一个输入的AHESP数据包是否是一个重放包。

-ECN隧道模式:这是一个可选的参数。表示是否采用explicit congestion notification功能。默认情况下是不开启的forbidden。如果开启则是allow.

上述输入SA和输出SA分别组成了输入SAD和输出SAD(安全联盟数据库)。

上述拓扑中的一个输出SAD的可能例子是:

     关键SA元素

         其他元素

终端IP地址

协议

SPI

192.168.3.2

Esp

4000

此处省略

192.168.3.2

Ah

4001

此处省略

 SASPISAD的关系:

 

【互联网运维--安全技术】Ipsec <wbr>数据包处理流程简介


 

IPSEC数据处理流程

 理解上述SADSPD的定义,组成之后,我们再来看IPSEC的数据处理流程。

对于输出的数据包的处理过程:

【互联网运维--安全技术】Ipsec <wbr>数据包处理流程简介

1) ipsec处理模块取出一个IP包,交给策略模块处理;

2) 根据selector查询策略数据库输出SPD,根据action判断是否应用或丢弃,或者bypass不做任何处理;

3) 如果能查找到对应的sp记录,则进一步查询输出SAD(根据SP中的SA指针查询对应的sa)  

 IF 没有SA
    则启用IKE模块动态建立SA
   IF SA
    则进入进一步判断SA生命期、状态的判断等等,如果失效回到上一步重新协商sa,如果有效则进入下一步4

4) 得到SA后,交给ipsec处理模块进行ipsec处理生成ipsec包交给路由模块转发。如果同时使用了ahesp则会查询得到两个sa,会先处理esp,例如利用esp的加密算法,加密密钥,加密初始向量等进行esp处理,其次才是ah处理。

5) IPSec处理完毕

【互联网运维--安全技术】Ipsec <wbr>数据包处理流程简介

 

处理流程说明:
  1) 模块接收一个IP包;

  2) 如果IP包下一协议proto=UDP并且协议端口号=500,此时表示iskamp,绕过不处理,传给上层协议;

 3) 判断下一协议proto是否ahesp,如果不是,则表示是普通报文,则根据其地址查输入SPD,如果有对应策略不管action是丢弃还是apply ispec,都对该数据包进行丢弃(如果是apply ipsec,意味着本来该数据包应该是被ipsec处理的,但是下一协议字段既不是ah也不是esp,表示该包并未正确的被ipsec处理,则丢弃),如果没有策略则绕过不做任何处理

  4) 查三元组(源ip地址,协议ah/esp,spi)的得指针said

 5) 根据指针said查询SAD
  if SA为空
  〔查询策略;(根据selector,查找相应的SPD,取SPD中的action)处理过程同上面第3步描述
     if丢弃 则丢包;if应用 丢则包;if无策略 则不处理〕
  if SA期满 则丢包;
  if SA状态异常 则丢包,并且通过ike模块产生异常消息;

  6) 检查序列号seq,抗重播捡查;

 7) 根据下一个协议为ahesp,分别送交IPSEC处理模块进行验证解密,并剥去ah头或esp头和尾;如果ahesp同时被使用,则先处理ah,再处理esp,和输出端的处理正好相反

 8) 如果采用的是隧道模式则移走外部IP头;

 9) 对这个处理后的新的IP包进行策略检查(如果没有策略则宣告失效),这一步的根本目的是为了验证对该ip数据包进行ipsec的处理策略是不是和实现定义好的策略是不是完全一致,如果没有找到相应的策略,则丢弃该包;

 10) 检查新的内部IP头的“nextproto”字段,如果仍为IPSec包,转4)继续处理

  11) 如果IP头的目的地址不是自己,则交由路由模块进行转发出处理。

12)如果IP头的目的地址是自己,则交给上层tcp/udp处理

三 最后附上相关的RFC文档图(便于大家查询)

【互联网运维--安全技术】Ipsec <wbr>数据包处理流程简介
  四  linux下的ipsec源代码

  http://lxr.free-electrons.com/source/net/xfrm/


0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有