详解IPSec介绍( 十 )


NAT网关发现
当存在NAT设备时必须使用UDP传输,所以在IKEv2中的第一阶段协商中必须先探测是否存在NAT设备,也就是NAT探测 。
通过发送NAT-D载荷来实现NAT探测是目前比较流行的方法 。
在传统IKE中NAT-D载荷包括在主模式的第三个和第四个信息中以及野蛮模式的第二个和第三个信息中 。对于创建VPN连接的双方来说,发送的信息中一般要包括两个连续的NAT-D载荷,第一个是关于目的地址,第二个是关于源地址 。如果发送方不知道自己的确切地址(发送方有多个接口,应用程序并不知道数据包从哪个接口出去),则需要多个NAT-D载荷,从第二个载荷开始,每个载荷和发送方的一个地址相关 。对方接收到NAT-D载荷后重新根据收到的包的实际地址端口来计算hash值后进行比较,就可以知道是否有NAT设备以及哪一方在NAT设备之后了 。这种方法虽然能检测两个IKE对端之间NAT设备的存在,但存在着明显的缺陷 。因为在主模式和野蛮模式中,NAT-D载荷没有被认证,这意味着入侵者可以删除、改变、增加这些载荷,这将导致DoS攻击 。通过改变NAT-D载荷,攻击者可以使两方使用UDP封装的模式,而不是使用正常的模式,导致浪费带宽 。
为了解决上述缺陷,探测通信链路中是否存在NAT设备,可在协商双方增加两个Notify载荷,一个包括NAT_DETECTION_SOURCE_IP,标识发起方的IP地址;一个包括NAT_DETECTION_DESTINATION_IP,标识目的方的IP地址 。这两个载荷主要是为了探测通信双方是否存在NAT设备,并且确定哪一方处在NAT设备之后 。
这一过程在IKEv2协商的第一组交换中进行 。具体过程如下:
在IKEv2中,NAT_DETECTION_SOURCE_IP和NAT_DETECTION_DESTINATION_IP在Notify消息类型中的编号分别为:16388和16389 。载荷使用通用的ISAKMP载荷头,载荷的值是SPIs、IP地址、发送数据包的端口号的hash值(IKEv2规定使用SHA-1),hash值的计算如下:hash=SHA-1(SPIs|IP|Port) 。其中:

  • SPIs为HDR载荷中的安全索引参数 。
  • IP为数据包发出方或接收方的IP地址 。
  • Port为数据包发出方或接收方的端口号 。
当接受方收到数据包后,对数据包中的SPIs、IP地址、端口号进行hash运算,并与Notify载荷进行比较,如果不匹配,则说明通信链路中存在NAT设备:如果与NAT_DETECTION_SOURCE_IP不匹配,则说明发起端在NAT设备之后;如果与NAT_DETECTION_DESTINATION_IP不匹配,则说明接受端在NAT设备之后 。
NAT穿越的启用
在第一阶段协商完成之后,协商双方均已经明确是否存在NAT,以及NAT的位置 。至于是否启用NAT穿越,则由快速模式协商决定 。
NAT穿越的启用协商在快速模式的SA载荷中进行 。
NAT-keepalive
在NAT网关上NAT会话有一定的存活时间,因此,隧道建立后如果中间长时间没有报文穿越,就会导致NAT会话被删除,这样将导致无法通过隧道传输数据 。解决方法是在NAT会话超时前,发送一个NAT-keepalive给对端,维持NAT会话的存活 。
IPSec增强功能 
IPSec白名单IPSec网关支持通过证书属性访问控制策略来认证IKE对端的证书,通过配置此功能也能达到类似白名单的效果 。但是此方案存在以下不足:
  1. 配置工作量较大,管理不方便 。
  2. 没有提供对证书通用名称CN(Common Name)的精确匹配 。
IPSec白名单特性可以有效解决上述问题 。IPSec白名单可以由用户自己定义,然后导入设备,IPSec白名单提供对证书通用名称CN(Common Name)的精确匹配 。
IPSec白名单的具体实现过程是:在建立IPSec隧道之前进行IKE协商时,判断是否使能了白名单检验功能,如果使能,则检验接收到的对端证书的CN字段是否在IPSec网关的白名单列表内 。
  • 如果对端的证书的CN字段在IPSec网关的白名单列表里面,则验证通过,允许进行IKE协商并建立IPSec隧道 。
  • 如果对端的证书的CN字段不在IPSec网关的白名单列表里面,则验证失败,不允许进行IKE协商,最终IPSec隧道建立失败 。
通过这种方式,可以有效保证只有在数字证书白名单内的设备才能接入网络,提高了网络安全性 。
白名单文件一般是xml文件,其格式如下:
<SerialnumberList><Serialnumber>CN-on-Certificate_of-RBS-1</Serialnumber><Serialnumber>CN-on-Certificate_of-RBS-2</Serialnumber>…<Serialnumber>CN-on-Certificate_of-RBS-n</Serialnumber></SerialnumberList>其中<Serialnumber></Serialnumber>之间的字符串即为与IPSec网关对接设备的证书的CN字段 。
为了方便用户根据实际需要刷新白名单,IPSec白名单还支持如下功能:


推荐阅读