IPSec VPN 基本工作原理

2018 年 12 月 21 日 计算机与网络安全

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587


微信公众号:计算机与网络安全

ID:Computer-network

IPSec VPN是一项应用最广泛,也最为重要的一种VPN解决方案。它最大特点是安全性高,主要体现在两方面:一是IPSec VPN隧道是要经过一整套安全参数(SA)协商,并得到隧道两端共同认可后才能建立的,即VPN隧道本身也是受保护的;二是在IPSec VPN中传输的数据不仅要经过加密处理,还支持数据完整性验证和数据源身份认证功能(支持像预共享密钥、数字证书和数字信封等多种认证方式),进一步确保隧道端点所接收的数据是没有被非法篡改,而且来源是合法的。


IPSec是一个安全框架,不是一项单独的技术,所以它不仅可应用于单独的IPSec VPN的构建,还可为其他VPN隧道技术的应用提供安全保护。


Internet公网进行的数据传输中,绝大部分数据的内容都是采用明文方式进行的,如我们在QQ、微信中的聊天、平时所进行的数据传输等。这样就会存在很多潜在的危险,比如银行账户、密码,或者其他一些敏感的信息被一些别有用心的人非法窃取、篡改,最终可能导致用户的身份被冒充,银行账户被非法取现等。


如果在网络中部署IPSec,不仅可以保证数据的完整性和来源的合法性,还可以确保数据传输的机密性,保障了用户业务传输的安全,降低信息泄漏的风险。


IPSec VPN主要也是利用Internet构建VPN的,用户可以任意方式(如专线接入方式、PPPo E拨号接入方式,甚至传统的Modem、ISDN拨号方式)接入Internet,且不受地理因素的限制。所以,IPSec VPN不仅适用于移动办公员工、商业伙伴接入,也适用于企业分支机构之间站点到站点(Site-to-Site)的互连互通,如图1所示。

图1  IPSec VPN的应用

在出差员工、SOHO办公用户通过IPSec VPN访问公司总部网络的情形中,这些移动办公用户需要部署使用WindowsWindows 7/8/10系统中支持采用IKEv2动态协商)、Linux桌面操作系统中自带的IPSec VPN客户功能,或VPN Client等客户端软件。


一、IPSec的安全机制


IPSec是“IP Security”(IP安全)的简称,不是一个单独的协议,是一个框架性架构,是一系列为IP网络提供安全性的协议和服务的集合,如AH(Authentication Header,认证头)、ESP(Encapsulating Security Payload,封装安全载荷)安全协议,IKE(Internet Key Exchange,Internet密钥交换)协议、ISAKMP(Internet Security Association and Key Management Protocol,因特网安全与密钥管理协议),以及各种认证、加密算法等,它们之间的关系如图2所示。

图2  IPSec体系架构

AH和ESP是IPSec的两种安全协议,用于实现IPSec身份认证和数据加密方面的安全机制。身份认证机制可使IP通信的数据接收方能够确认数据发送方的真实身份和数据在传输过程中是否遭篡改;数据加密机制通过对数据进行加密运算来保证数据的机密性,以防数据在传输过程中被窃听。IPSec架构中的AH协议定义了认证的应用方法,提供数据源认证和完整性保证;ESP协议定义了加密和可选认证的应用方法,比AH协议可提供更全面的安全保证。


具体来说,AH协议提供数据源认证、数据完整性校验和防报文重放功能。它能保护通信数据免受篡改,但不能防止窃听(因为它不会对数据进行加密),适合用于传输非机密数据。AH的工作原理是在原始数据包中添加一个身份认证报文头,为数据提供完整性保护。AH可选择的认证算法有MD5(Message Digest,消息摘要)、SHA-1(Secure Hash Algorithm 1,安全哈希算法-1)、SM3等。


ESP协议提供数据加密、数据源认证、数据完整性校验和防报文重放功能,比AH协议功能更全面。ESP的工作原理是在原始数据包中添加一个ESP报文头,并在数据包后面追加一个ESP尾和可选的ESP认证数据。ESP可选的加密算法有DES(Data Encryption Standard,数据加密标准)、3DES(Triple DES,三倍DES)、AES(Advanced Encryption Standard,高级加密标准)、SM1等。同时,作为可选项,在ESP认证数据部分,还可选择MD5、SHA-1、SM3算法保证报文的完整性和真实性。


在进行IP通信时,可以根据实际安全需求选择使用其中的一种或同时使用这两种协议,但同时使用两种安全协议比较少见,因为AH和ESP的认证功能是重叠的,且在一个数据包同时增加两种协议头,会影响数据的有效传输率。


在实际的应用中,更多的是选择ESP协议,原因主要有两个:一是因为AH无法提供数据加密,所以数据传输的安全性较差,而ESP提供数据加密;二是因为AH协议的认证范围包括整个IP数据包,如果两端IPSec设备间存在NAT设备会导致数据包的IP报头中的IP地址发生改变,从而最终导致认证失败,无法实现NAT穿越;而ESP协议的认证范围是不包括最外层的IP报头的,所以即使IP报头部分的地址信息发生改变,也不会导致最终的认证失败,即可以实现NAT穿越,应用范围更广。


当然,因为IPSec在对数据进行封装时有两种不同的模式(传输模式和隧道模式), AH和ESP协议头在封装后的IP数据包的位置不完全相同。

二、IPSec的两种封装模式


IPSec有“隧道”和“传输”两种封装模式。数据封装是指将AH或ESP协议相关的字段插入到原始IP数据包中,以实现对报文的身份认证和加密,下面分别予以具体介绍。


1、隧道(Tunnel)模式


隧道模式下的安全协议用于保护整个IP数据包,即用户的整个IP数据包都被用来计算安全协议头,生成的安全协议头以及加密的用户数据(仅针对ESP封装)被封装在一个新的IP数据包中。也就是在隧道模式下,封装后的IP数据包有内、外两个IP报头,其中的内部IP报头为原IP报头(Raw IP Header),外部IP报头(New IP Header)是新增加的IP报头。新添加的IP报头中的源IP地址是本端IPSec设备应用IPSec安全策略的接口的IP地址,目的IP地址是对端IPSec设备应用IPSec安全策略的接口的IP地址,其目的就是在把用户发送的数据包从本端IPSec设备传输到对端IPSec设备,至于到达对端IPSec设备后数据包的转发是由IPSec设备所配置的内网路由表来完成,当然,此时路由转发的是在IPSec设备上解封装并且解密后的原始IP数据包。


在隧道封装模式中,AH报头或ESP报头插在原IP报头之前,并另外生成一个“新IP报头”放到AH报头或ESP报头之前。以TCP通信为例(其他协议报文同样支持),单独使用AH协议、ESP协议,或者同时使用AH和ESP协议时,重封装后的IP报文格式分别如图3的上、中、下所示。

图3  隧道模式下IP报文重封装的结构

图3中的AH报头包含了对整个新IP报文经过MD5/SHA/SM3等认证算法运算后的摘要消息,用于进行身份认证。ESP协议的认证信息是在“ESP认证数据”字段中,包括了“ESP报头”,以及经过加密的整个原IP报文和“ESP尾”这几个部分(不包括新IP报头)的数据经过MD5/SHA/SM3等算法运算后的摘要。但ESP协议仅对原IP报文和“ESP尾”通过DES/AES/3DES/SM1等加密算法运算进行加密。


从图3中可以看出,在隧道模式中,如果采用了AH协议,AH协议的认证范围是整个新生成的IP数据包(包括新生成的IP报头),只要发生了数据变化(包括协议所识别的最外层IP报头地址信息:最初是原IP报头,重封装后是新IP报头)则会导致认证失败,这也决定了采用AH协议时是不能实现NAT穿越的,因为如果有NAT设备的话,最外层IP报头的地址信息肯定会发生变化。而如果单独采用ESP协议,认证范围则不包括“新IP报头”和“ESP认证数据”这两个字段,而原IP报头信息不会发生变化,所以单独采用ESP作为安全协议时,是可以穿越NAT的。


采用ESP协议进行数据加密时的加密范围则包括“原IP报头、数据部分(包括传输层协议头和“数据”字段)、“ESP尾”这三个字段,使得“原IP报头”也受到保护,防止了恶意用户修改了原始报头地址信息。


隧道模式在两台主机点对点连接的情况下,因为原始IP报头放在了AH或ESP报头之后,隐藏了内网主机的私网IP地址(新生成的IP 报头源IP地址为网关的公网IP地址),可保护整个原始数据包传输的安全。隧道模式通常用于保护两个安全网关之间的数据,实现站点到站点(Site-to-Site)的安全连接,如图4所示。

图4  隧道模式下的典型应用

当在IPSec设备是由路由器或防火墙设备提供时,即数据包进行安全传输的起点或终点不为数据包的实际起点和终点时,则必须使用隧道模式,因为这时需要对原始IP数据包中的私网地址进行转换(通过重封装,添加新IP报头来实现,而不是NAT),否则不能在公网Internet中进行路由转发。此时的IPSec隧道就是在两端的IPSec设备之间。

2、传输(Transport)模式


传输模式下的安全协议主要用于保护上层协议(如传输层协议)报文,仅传输层数据被用来计算安全协议头,生成的安全协议头以及加密的用户数据(仅针对ESP封装)被放置在原IP报头后面。即在传输模式下,不对原IP报文进行重封装,只是把新添加的认证头当成原始IP报文的数据部分进行传输。


此时,AH报头或ESP报头被插入到IP报头之后,但在传输层协议头之前。也以TCP通信为例(其他协议报文同样支持),单独使用AH协议、ESP协议,或者同时使用AH和ESP协议时,重封装后的IP报文格式分别如图5的上、中、下所示。

图5  传输模式下IP报文重封装的结构

从图5中可以看出,在传输模式中,AH报头中也包括了对整个IP报文采用MD5/SHA/SM3等认证算法运算后的摘要;ESP协议的认证信息也是在“ESP认证数据”字段中,是对经过加密的“ESP报头”、IP报文的数据部分(包括传输层协议头和“数据”字段)和“ESP尾”这三部分的数据经过MD5/SHA/SM3等算法运算后的摘要,ESP协议仅对IP报文中的数据部分和“ESP尾”这两部分通过DES/AES/3DES/SM1等加密算法运算进行加密。所以,从认证或加密的范围来看,它与隧道模式是一样的,即采用AH协议时,认证的范围包括整个IP数据包:仅采用ESP协议时认证的范围是除“IP报头”“ESP认证数据”这两个字段之外的其他部分,而ESP对数据的加密范围仍仅包括IP报文的数据部分“ESP尾”这几个部分,因为这是由AH和ESP协议的特性决定的。


当要求点对点(或称“端到端”—End-to-End)的安全保障,即数据包进行安全传输的起点和终点为数据包的实际起点和终点时才可以使用传输模式(这种情形下也可以采用隧道模式),因为这时不用对用户发送的IP数据包进行重封装,只需要实现点对点的通信即可。所以,传输模式通常用于保护两台主机之间的数据通信,如图6所示,比较少用。这时两端主机需要分别配置为IPSec VPN客户端和IPSec VPN服务器,可分别使用WindowsLinux桌面/服务器操作系统来配置。

图6  传输模式下的典型应用

3、两种封装模式的比较


从前面的介绍可以看出,传输模式应用的比较少,仅适用于点对点的安全保护模式,站点到站点,或者点对站点的连接情形均不能采用传输模式。下面总体比较隧道模式和传输模式的主要特性。


从安全性来讲,隧道模式优于传输模式,因为隧道模式可以完全地对原始IP数据包进行认证和加密,隐藏客户机的私网IP地址,而传输模式中的数据加密是不包括原始IP报头的。


从性能来讲,因为隧道模式有一个额外的IP头,所以它将比传输模式占用更多带宽,有效传输率较低。


使用传输模式的充要条件:要保护的数据流必须完全在发起方、响应方IP地址范围内,如发起方IP地址为6.24.1.2,响应方IP地址为2.17.1.2,那么要保护的数据流仅可以是源6.24.1.2/32、目的是2.17.1.2/32,而不能是其他任意地址。当然这里IP地址后缀32仅代表必须与发起方,或响应方的地址精确匹配(类似于ACL中的通配符掩码),不代表所在的网络。


三、AH报头和ESP报头格式


1、AH报头格式


AH协议是位于网络层,其IP协议号是51,但位于IP协议之上,所以AH报文需要经过IP协议封装。AH报头格式如图7所示,各字段说明如下。

图7  AH报头格式

下一个头部:8位,标识AH报头之后第一个上层协议头的类型,传输模式下,是被保护的上层协议(TCP或UDP)或ESP协议的编号;隧道模式下,是IP协议或ESP协议的编号。当AH与ESP协议同时使用时,AH报文头的下一头部为ESP报文头。


载荷长度:8位,以4个字节为单位表示接受保护的整个数据的长度。


保留:16位,预留以后使用。


安全参数索引(Security Parameter Index,SPI):32位,用于唯一标识IPSec安全联盟。


序列号:32位,是一个从1开始,并以1进行递增的计数器值,表示通过安全联盟所发送的数据包序号,用于抗重放攻击。


认证数据:长度可变,但必须是32位的整数倍,否则要进行填充。包含对数据包通过相应的摘要算法计算的ICV(Integrity Check Value,完整性校验值),也称MAC (Message Authentication Code,消息验证码),是一个消息摘要,用于接收方进行完整性校验。可选择的认证算法有MD5(Message Digest)、SHA-1(Secure Hash Algorithm)、SHA-2、SM3。


2、ESP报头格式


ESP协议的IP协议号是50,与AH协议一样,也位于网络层的IP协议之上,所以ESP报文也需要经过IP协议封装。ESP除提供AH协议的功能之外,还提供对有效载荷的加密功能。


在IPv4报文中,ESP报头紧随在IPv4报头之后。在IPv6报文中,ESP报头的位置与是否存在扩展报头有关,如果有“目的地选项”扩展报头,则ESP报头必须在此扩展报头之前,如果有其他扩展报头,则ESP报头必须在这些扩展报头之后;如果没有扩展报头,IPv6报头的“下一个头”字段就会设为50,代表是ESP报头。


ESP的工作原理是在每一个数据包的标准IP报头后面添加一个ESP报文头,并在数据包后面追加一个ESP尾(ESP尾部和ESP认证数据),我们把这整个部分称之为ESP报头,格式如图8所示。

图8  ESP报头格式

安全参数索引:32位,用于唯一标识IPSec安全联盟。


序列号:32位,是一个从1开始,并以1进行递增的计数器值,表示通过通信的安全联盟所发送的数据包数,用于抗重放攻击。


负载数据:包含由下一头部字段所包括整个的可变长数据。


填充:0~255个字节,填充字段的长度与负载数据的长度和算法有关,用来确保所加密的数据块长度达到加密算法所需的字节要求,具体的填充方式要视所采用的加密算法而定。


填充长度:表示“填充”字段的长度(以字节为单位)。在使用了填充字节的加密数据块解密之后,接收方就可知道要删除多少个填充字节。为0时表示没有填充。


下一个头部:8位,标识ESP报文头后面的下一个负载协议类型。传输模式下,是被保护的上层协议(TCP或UDP)的编号;隧道模式下,是IP协议的编号。


认证数据:长度为32比特的整数倍,通常为96比特。包含完整性校验值(ICV),用于接收方进行完整性校验,可选择的认证算法与AH的相同。ESP的验证功能是可选的,如果启动了数据包验证,会在加密数据的尾部添加一个ICV数值。


表1给出AH协议和ESP协议在一些参数特性上的比较。

表1  AH协议与ESP协议的比较

四、IPSec隧道建立原理


IPSec隧道的建立,其实就是在隧道两端的设备上建立好SA(Security Association,安全联盟)。但SA的建立有两种方式:一种是手工方式,直接在两端的IPSec设备配置好具体的安全参数,包括对等体地址、封装模式、安全协议、认证方法、认证算法和加密算法,出/入方向SA的认证密钥和加密密钥、出/入方向SA的SPI(Security Parameter Index,安全参数索引)等,最终直接在两端设备间建立双向IPSec SA,建立IPSec隧道。


IPSec用于在协商发起方和响应方这两个端点之间提供安全的IP通信,通信的两个端点被称为IPSec对等体,可以是网关路由器,也可以是用户主机。IPSec为对等体间建立IPSec隧道来提供对数据流的安全保护。一对IPSec对等体间可以存在多条IPSec隧道,可以针对不同的数据流各选择一条隧道对其进行保护,例如有的数据流只需要认证,有的则需要同时认证和加密。


建立IPSec隧道的另一种方式是通过IKE协议来动态协商的,这时IPSec SA的建立不那么直接了,而是要先在隧道两端协商建立IKE SA(在此过程中会生成认证密钥和加密密钥,无需手工配置了),然后再在此基础上协商建立IPSec SA(此阶段还可生成新的直接用于用户数据加密的加密密钥),最终建立IPSec隧道。


无论哪种IPSec隧道建立方式,SA的建立是关键,在使用IPSec保护数据之前,必须先建立SA。SA是IPSec对等体间对某些要素的约定(即安全策略),例如,所使用的安全协议(AH、ESP或两者结合使用)、协议报文的封装模式(传输模式或隧道模式)、认证算法(HMAC-MD5或HMAC-SHA1等)、加密算法(DES、3DES或AES等)、共享密钥以及密钥的生存时间等。对等体间需要通过手工配置或IKE协议协商匹配的参数后才能建立SA。即对等体间只能在双方最终确定(可以直接通过手工方式配置确定,或者通过IKE协议协商确定)所采用SA后才能建立对等体关系。手工方式建立SA时,所需的全部信息都必须由我们网络管理人员手工配置,所建立的SA永不老化。IKE动态协商方式建立SA时,由IKE协议完成密钥的自动协商,所建立的SA具有生存时间。


SA是出于安全目的而创建的一个单向逻辑连接,所有经过同一SA的数据流都会得到相同的安全服务,如AH或ESP。正因如此,对等体之间的双向通信需要建立一对(即两个方向各一个)SA,即一对SA(两个)对应于一条IPSec隧道。如果两个对等体希望同时使用AH和ESP来进行安全通信,则每个对等体都会针对每一种协议来构建一个独立的SA,则在对等体间至少有2对(四个)SA。


IPSec建立的SA和隧道关系如图9所示,数据从对等体A发送到对等体B时,对等体A对原始数据包进行加密,加密数据包在IPSec隧道中传输,到达对等体B后,对等体B对加密数据包进行解密,还原成原始数据包。数据从对等体B发送到对等体A时,处理方式类似,但所用的SA不同。

图9  IPSec建立的SA和隧道示意

SA由一个三元组来做唯一标识,包括SPI、目的IP地址(对端对等体的IP地址)和使用的安全协议(AH或ESP)。其中,SPI是用于标识SA的一个32比特的数值,在AH或ESP报头中标识,可用于在接收端识别数据与SA的绑定关系。因为可以从接收到的数据的AH或ESP报头获知对应的SPI,然后看与本端配置的哪个入方向的SPI一致,以此可确定所接收的数据是采用哪个SA。在SPI的配置中,要求本端的出方向SA的SPI必须和对端的入方向的SPI一样,相反,本端的入方向SA的SPI也必须和对端的出方向SA的SPI一样。为保证SA的唯一性,出/入方向SA的SPI值不能设置成相同值,即不同的SA必须对应于不同的SPI。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】
登录查看更多
9

相关内容

VPN(Virtual Private Network)虚拟专用网络,通过一个公用网络建立一条安全、稳定隧道。主要采用隧道技术、加解密技术、密钥管理技术和使用者与设备身份认证技术。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
介绍WAF以及过滤机制
黑白之道
22+阅读 · 2019年2月5日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
IPSec | IKE密钥交换原理
计算机与网络安全
18+阅读 · 2018年12月23日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
【区块链】区块链是什么?20问:读懂区块链
产业智能官
8+阅读 · 2018年1月10日
Arxiv
4+阅读 · 2018年4月29日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
相关资讯
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
介绍WAF以及过滤机制
黑白之道
22+阅读 · 2019年2月5日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
IPSec | IKE密钥交换原理
计算机与网络安全
18+阅读 · 2018年12月23日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
【区块链】区块链是什么?20问:读懂区块链
产业智能官
8+阅读 · 2018年1月10日
Top
微信扫码咨询专知VIP会员