ipsec点对点安全通信搭建

发布时间 2023-06-04 01:41:03作者: PIAOMIAO1

一、IPSec简介

IPSec全名IP Security,IPSec协议并不是指一个特定的协议,而是一系列提供完整性,安全性的协议和服务的集合,IPSec工作在网络层,提供了传输模式和隧道模式(本次实验使用隧道模式tunnel mode)两种工作模式,保证双端通信的完整性,若使用隧道模式还能保证其机密性。IPSec在IP层上创建一个安全的隧道,使两个异地的私有网络连接起来,或者使公网上的计算机可以访问远程的企业私有网络。

二、IPSec作用

  • 保证数据来源可靠
    在IPSec通信之前双方要先用IKE认证对方身份并协商密钥,只有IKE协商成功之后才能通信。由于第三方不可能知道验证和加密的算法以及相关密钥,因此无法冒充发送方,即使冒充,也会被接收方检测出来。

  • 保证数据完整性
    IPSec通过验证算法保证数据从发送方到接收方的传送过程中的任何数据篡改和丢失都可以被检测。

  • 保证数据机密性
    IPSec通过加密算法使只有真正的接收方才能获取真正的发送内容,而他人无法获知数据的真正内容

三、IPSec工作原理

1、安全联盟SA

定义: 安全联盟是要建立IPSec 隧道的通信双方对隧道参数的约定,包括隧道两端的IP地址、隧道采用的验证方式、验证算法、验证密钥、加密算法、共享密钥以及生命周期等一系列参数。

SA由三元组来唯一标识,这个三元组包括安全参数索引SPI(Security Parameter Index)、目的IP地址和使用的安全协议号(AHESP)。其中,SPI是为唯一标识SA而生成的一个32位比特的数值,它在AHESP头中传输。在手工配置SA时,需要手工指定SPI的取值。使用IKE协商产生SA时,SPI将随机生成。

SA是单向的逻辑连接,因此两个IPSec对等体之间的双向通信,最少需要建立两个SA来分别对两个方向的数据流进行安全保护。

2、通信模式

  • 传输模式(Transport Mode):是IPSec的默认模式,又称端到端(End-to-End)模式,它适用于两台主机之间进行IPSec通信。

    传输模式下只对IP负载进行保护,可能是TCP/UDP/ICMP协议,也可能是AH/ESP协议。传输模式只为上层协议提供安全保护,在此种模式下,参与通信的双方主机都必须安装IPSec协议,而且它不能隐藏主机的IP地址。启用IPSec传输模式后,IPSec会在传输层包的前面增加AH/ESP头部或同时增加两种头部,构成一个AH/ESP数据包,然后添加IP头部组成IP包。在接收方,首先处理的是IP,然后再做IPSec处理,最后再将载荷数据交给上层协议。

  • 隧道模式(Tunnel Mode):使用在两台网关之间,站点到站点(Site-to-Site)的通信。参与通信的两个网关实际是为了两个以其为边界的网络中的计算机提供安全通信的服务。隧道模式为整个IP包提供保护,为IP协议本身而不只是上层协议提供安全保护。通常情况下只要使用IPSec的双方有一方是安全网关,就必须使用隧道模式,隧道模式的一个优点是可以隐藏内部主机和服务器的IP地址。大部分VPN都使用隧道模式,因为它不仅对整个原始报文加密,还对通信的源地址和目的地址进行部分和全部加密,只需要在安全网关,而不需要在内部主机上安装VPN软件,期间所有加密和 解密以及协商操作均由前者负责完成。

3、通信过程

IPSec的工作是通过三个重要协议实现的,即IKEAHESP

​ (1) IKE

因特网密钥交换(Internet Key Exchange),是一种基于UDP的应用层协议,它主要用于SA协商和密钥交换,IKE协议目前有IKEv1和IKEv2两个版本,本次实验使用IKEv1版本。IKE是一种混合协议,由ISAKMP协议、Oakley协议和SKEME协议三个协议组成。

  • ISAKMP:在两个实体间进行分组格式及状态转换的消息交换的体系结构
  • Oakley:基于到达两个对等体间的加密密钥的机制
  • SKEME:实现公钥加密认证的机制

IKE协商有两个阶段,分别建立IKE SA和IPSec SA

协商阶段 建立SA 协商过程 作用
阶段一 IKE SA 主模式(Main mode)6个数据包 野蛮模式(Aggressive) 3个数据包 协商建立一个IKE SA
阶段二 IPSec SA 快速模式(Quick mode) 3个数据包 协商建立一对IPSec SA

IPSec SA是实现双方可靠通信的关键,可以通过手工方式创建,但是手工方式需要手动配置所有参数,包括加密,验证密钥等等,且生存周期是永久,需要手动维护,为此提出了IKE协商方式构建IPSec SA,首先创建一个IKE SA,并提供IKE SA验证方式以及少数的协商信息,即可通过DH算法自动生成加密,验证密钥,动态刷新以及密钥管理,安全性高,成本低。

IPSec有一般有三种身份认证方式预共享密钥数字证书数字信封

  • 本次实验使用预共享密钥的身份认证方式,在预共享密钥认证中,认证字作为一个输入来产生密钥,通信双方采用共享的密钥对报文进行Hash计算,判断双方的计算结果是否相同。如果相同,则认证通过;否则认证失败。

​ (2) AH(协议号51

字段 大小/位
下一个头 8
有效载荷长度 8
保留字段 16
安全参数索引(SPI) 32
序列号 32
验证数据(长度可变) 不定

IPSec的子协议头认证协议AH,为IP报文提供数据完整性验证和数据源身份认证,使用HMAC算法,将输入报文和双方事先已经共享的对称密钥结合然后应用Hash算法。采用协商好的hash算法和预共享密钥的双方才能产生相同的报文摘要。所有的IPSec必须实现两个算法:HMAC-MD5和HMAC-SHA1。

​ (3) ESP(协议号50

AH和ESP的区别有两个:

  • AH不提供加密服务:AH仅仅提供数据源的完整性验证,对于数据载荷不做加密处理,使用明文传输,而ESP对数据载荷以及原ip头(隧道模式对原IP头加密)进行加密,并添加新的ESP头,保证了完整性与机密性。
  • 验证的范围不同:ESP不验证IP报头,而AH同时验证部分报头,所以需要结合使用AH和ESP才能保证IP报头的机密性和完整性。AH为IP报头提供尽可能多的验证保护,验证失败的包将被丢弃,不交给上层协议解密,这种操作模式可以减少拒绝服务攻击成功的机会。

4、IKE SA协商模式

  • 主模式(主动模式):适用于两设备的公网IP是固定的静态IP地址,主模式在IKE协商的时候要经过三个阶段

    1. SA交换
    2. 密钥交换
    3. ID交换和验证
  • 野蛮模式:适用于公网IP是动态的,如外网线路使用ADSL拨号,其获得的公网IP不是固定的情况,也适用于存在NAT设备的情况下,即防火墙以旁路模式或桥模式放于内网,与分部设备建立VPN时需要穿过其他出口设备。协商分为两个阶段

    1. SA交换和密钥生成
    2. ID交换和验证

四、实验测试

实验环境

虚拟机环境 vmware workstation v16

两台双网卡的虚拟机(本次实验主要是分析验证IPSec工作原理,不涉及具体业务,没有服务器和客户端的区别,两台计算机是对等体)

  • ubuntu22.04 ipsec-server(内网地址192.168.100.128 公网(隧道)地址192.168.8.128
  • ubuntu22.04 ipsec-client(内网地址192.168.200.128 公网(隧道)地址192.168.8.133

网络拓扑

双网卡配置

VMnet10是ipsec-server的内网网段,VMnet11是ipsec-client的内网网段,VMnet8是两台主机之间的网段,提供NAT,模拟公网环境。

strongswan

实验使用strongswan实现ipsec的通信

安装strongswan

sudo apt install strongswan

ipsec-server配置

/etc/ipsec.conf

conn %default	//配置IKE参数
	ikelifetime=1440m
	keylife=60m
	rekeymargin=3m
	keyingtries=0
	keyexchange=ikev1				//使用IKEv1版本
	authby=secret

conn n2n
	left=192.168.8.128				//本地公网地址
	leftid=192.168.8.128
	leftsubnet=192.168.100.0/24		//本地内网网络地址
	right=192.168.8.133				//远端公网地址
	rightsubnet=192.168.200.0/24	//远端内网网络地址
	auto=start					  //主模式
	type=tunnel					  //隧道模式
	ike=3des-md5-modp1024		   //IKE使用3des-md5-modp1024加密套件
	esp=3des-md5				  //esp使用3des-md5加密套件

/etc/ipsec.secrets

//本地公网地址   远端公网地址    预共享密钥
192.168.8.128 192.168.8.133 : PSK myvpn123

ipsec-client配置

/etc/ipsec.conf

conn %default	//配置IKE参数
	ikelifetime=1440m
	keylife=60m
	rekeymargin=3m
	keyingtries=0
	keyexchange=ikev1				//使用IKEv1版本
	authby=secret

conn n2n
	left=192.168.8.133				//本地公网地址
	leftid=192.168.8.133
	leftsubnet=192.168.200.0/24		//本地内网网络地址
	right=192.168.8.128				//远端公网地址
	rightsubnet=192.168.100.0/24	//远端内网网络地址
	auto=start					  //主模式
	type=tunnel					  //隧道模式
	ike=3des-md5-modp1024		   //IKE使用3des-md5-modp1024加密套件
	esp=3des-md5				  //esp使用3des-md5加密套件

/etc/ipsec.secrets

//本地公网地址   远端公网地址    预共享密钥
192.168.8.133 192.168.8.128 : PSK myvpn123

两端重新启动ipsec服务,选择n2n规则

ipsec restart
ipsec up n2n

显示established successfully,表示已经协商完成,可以通过ipsec发送加密信息

协议分析

通过wireshark抓包分析协商过程

可以看到一共有9个ISAKMP数据包,前6个是以主模式协商IKE SA的数据包,后三个是以快速模式协商IPSec SA的数据包

第一个包

发起端协商SA,使用的是UDP协议,端口号是500,上层协议是ISAKMP,该协议提供的是一个框架,里面的负载Next payload类似模块,可以自由使用。可以看到发起端提供了自己的cookie值,以及SA的加密套件,加密套件主要是加密算法,哈希算法,认证算法,生存时间等。

Initator SPI	//发送者的SPI值,告知响应端使用什么密钥加密
Responder SPI 	//响应者的SPI值,第一个包为空
Version		    //IKE使用的版本IKEv1
Exchange type	//协商模式
Type Payload	//协商的套件,如预共享密钥认证,加密方式,数据校验方式,密钥周期等等

第二个包

响应端收到发送端发送的加密套件后,对比自己是否有相对应的加密套件,如果有就使用和发送端相同的加密套件加密数据,把自己的cookie值和选择好的加密套件发送给发送端;如果没有相同加密套件则IKE建立失败响应。

第二个包主要是响应端在检索完自己是否存在对应的加密套件后,返回自己生成的Responder SPI

第三个包

发送端生成随机数和DH公共值,包3的主要目的是向响应端发送自己的DH公共值和Nonce随机数。用于生成加密时所需要的KEY值。

Key Exchange Data	//DH公共值,又Diffie-Hellman算法计算得到,由于预共享密钥不能通过网络传输,需要生成一个DH公共值,在对端计算验证KEY是否相同

第四个包

响应端收到包3后,自己生成一个随机数,然后通过Diffie-Hellman算法计算出DH公共值,把随机数和DH公共值传输给发送端。

第五个包

发起方发起身份验证,报文中带有认证的数据(预共享密钥或者数字签名)。1和2协商了加密套件,3和4协商了加密密钥,5和6加密通信

这个包加密内容主要包括表示负载和散列负载,标识负载的主要内容是包含自己的IP地址或者是主机名称。散列负载主要的内容是通过散列计算,计算协商参数的hash值。

第六个包

响应端回应报文,同样发送认证的数据(预共享密钥或者数字签名),验证对方身份信息。包6的数据同样使用包1、包2协商的算法和包3、包4协商的key值加密数据,所以包6的认证数据是加密的。双方身份验证通过后,IKE协商结束。

接收方收到的时候进行确认,解密,之后通过ID找到正确的预共享密钥,进行相同的计算,得出散列的值,对比接收结果后响应给发送方,结束协商。

第七个包

发起方主要是进行IPSEC SA的协商,建立安全联盟,报文内容主要是协商用的封装方式以及后面的加密算法以及生存时间和感兴趣流等等

第八个包

响应方回包,同意包7发送的封装方式、加密算法、生存时间、感兴趣流等等,同时,也能起到确认收到对端消息的作用。

第九个包

发送确认报文。其中包含一个HASH,其作用是确认接收方的消息以及证明发送方处于主动状态(表示发送方的第一条消息不是伪造的)。

协商完毕后,使用ping命令双端通信会以ESP封装,加密传输

五、参考文章

(79条消息) IPSec主模式和野蛮模式的区别_主模式和野蛮模式区别_-WFlySky的博客-CSDN博客

(79条消息) IPSec基本原理_曹世宏的博客的博客-CSDN博客

(79条消息) IPSec之IKEv1协议详解_ike协议需要手动配置吗_曹世宏的博客的博客-CSDN博客

什么是IPsec?IPsec是如何工作的? - 华为 (huawei.com)

[IPSec协议抓包详解和IPSec NAT穿越报文解析 - 阿鹏2019 - 博客园 (cnblogs.com)](