IPSec VPN搭建及协议解析

一、IPSec协议简介

IPSecIETF制定的为保证在Internet上传送数据的安全保密性能的三层隧道加密协议。IPSec是应用于IP层上网络数据安全的一整套体系结构,他包括报文首部认证协议( Authentication Header, AH)封装安全载荷协议(Encapsulating Security Payload, ESP)互联网间密钥交换协议(Internet Key Exchange, IKE) 和一些用于网络认证及加密的算法等。IPSec协议本身定义了如何在IP数据包中增加字段来保证IP包的完整性、私有性和真实性,以及如何加密数据包。

IPSec有传输(transport)和隧道(tunnel)两种工作方式,其中,传输模式适用于主机之间建立IPSec安全传输,隧道模式更适合网关之间的通信,常用来实现虚拟专用网VPN

二、IPSec-VPN搭建

详细教程请参考:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md

Ubuntu 16.04为例,首先执行:

1
wget https://git.io/vpnsetup -O vpnsetup.sh

之后,在vpnsetup.sh文件中,设置YOUR_IPSEC_PSK, YOUR_USERNAME 和 YOUR_PASSWORD三个字段,如下图:

最后,通过命令 sudo sh vpnsetup.sh 启动服务器的 ipsec vpn服务。接下来,就是客户端的配置,以安卓手机为例:

选择对应的 VPN 添加类型,其中IPSec Xauth 类型也称 Cisco IPsec 模式,更加高效一些。填写好服务器地址、预共享密钥(PSK) 、用户名和密码后,即可使用该 VPN,如果服务器在香港或国外的话,即可实现翻墙的功能。

三、IPSec协议解析

IPSec主要包括两部分协议,分别是 ISAKMP 协议和 ESP协议,可使用wireshark采集以上两种协议的报文。

(1) ISAKMP协议

第一阶段,通信双方彼此间建立一个已通过身份认证和安全保护的通道,即建立一个ISAKMP SA。第一阶段有主模式(Main Mode)和野蛮模式(Aggressive Mode)两种IKE交换方法。

第二阶段,使用在第一阶段建立的安全隧道为IPsec协商安全服务,即为IPsec协商具体的SA,建立用于最终的IP数据安全传输的IPsec SA

第一阶段主模式交换过程:

对应的数据包为点我下载

  • 消息①和②用于策略交换(包为明文)

发起方发送一个或多个IKE安全提议,响应方查找最先匹配的IKE安全提议,并将这个IKE安全提议回应给发起方。匹配的原则为协商双方具有相同的加密算法、认证算法、认证方法和Diffie-Hellman组标识。

  • 消息③和④用于密钥信息交换(包为明文)

双方交换Diffie-Hellman公共值和nonce值,用于IKE SA的认证和加密密钥在这个阶段产生。

  • 消息⑤和⑥用于身份和认证信息交换(包为密文)

双方使用生成的密钥发送信息,双方进行身份认证和对整个主模式交换内容的认证。

第二阶段IPSEC SA协商:

上图中的 8、9、10 号包使用快速模式,进行IPSec SA的协商。

最后的 11、12、13、14号数据包为断开连接。

(2) ESP协议

因为 IPSec协议要求通信双方建立单工的安全联盟,所以两个SPI 分别标识了两个方向的通信报文。

四、IPSec穿越NAT

IPSec VPN中标准身份标识是IP地址,NAT处理过程中会改变IP地址,因此IPSec的身份确认机制必须能够适应IP地址变化。IPSec的身份确认最常见是通过IKE协议代劳,IKE支持的身份认证机制有两种:

  • 数字证书方式,通过CA数字证书体系确认身份,是最为安全、可靠的方式。

  • 身份标识+预共享密钥方式,通过发起方和响应方预先配置相同的密钥,完成双方对彼此身份的认证,这是最为常见的方式。在预共享秘密钥认证机制中,身份标识则可以分为几类:

    • 指定IP地址,使用IP地址作为身份标识,是IKE的默认方式,响应方只允许指定IP地址发起协商,安全性比较高。

    • 指定IP地址范围,这种方式依然使用IP地址作为身份标识,由于发起方必须要指定IP地址,否则无法发起协商,指定IP地址范围是响应方特性,如响应方可以指定2.0.0.0/8范围内的地址都可以发起协商,而不是只允许2.1.1.2发起协商,能够减少配置,但安全性略有下降。

    • 什么都不指定,也是使用IP地址作为身份标识,但允许任意IP地址发起协商,只要预共享密钥一致,双方就能够通过身份确认,这种方式虽然不是非常安全,但是可以简化配置,安全性再次下降;

    • 指定对端名字,发起方和响应方都预先配置好本端名字,使用该名字作为身份标识,与指定IP地址类似,通过指定对端名字方式,即使双方预共享密钥一致,只要对端名字不合法,立即中断协商,由于名字未与IP地址进行绑定,而且名字在网络中明文传递,故安全性不如指定IP地址方式高,但这种身份标识方式可以穿NAT

具体过程如下:

1、开启NAT穿越时,协商第一阶段的前两个消息会发送标识NAT穿越(NAT Traversal,简称NAT-T)能力的Vendor ID载荷。用于检查通信双方是否支持NAT-T

当双方都在各自的消息中包含了该载荷时,才会进行相关的NAT-T协商。

2、主模式消息3和消息4中发送NAT-D(NAT Discovery)载荷。NAT-D载荷用于探测两个要建立IPSec隧道的网关之间是否存在NAT网关以及NAT网关的位置。

通过协商双方向对端发送源和目的的IP地址与端口的Hash值,就可以检测到地址和端口在传输过程中是否发生变化。若果协商双方计算出来的Hash值与它收到的Hash值一样,则表示它们之间没有NAT。否则,则说明传输过程中对IP或端口进行了NAT转换。

第一个NAT-D载荷为对端IP和端口的Hash值,第二个NAT-D载荷为本端IP和端口的Hash值。

3、发现NAT网关后,后续ISAKMP消息的端口号转换为4500ISAKMP报文标识了“Non-ESP Marker”

4、在第二阶段会启用NAT穿越协商。在IKE中增加了两种IPSec报文封装模式:UDP封装隧道模式报文(UDP-Encapsulated-Tunnel)和UDP封装传输模式报文(UDP-Encapsulated-Transport)。通过为ESP报文封装UDP,当封装后的报文通过NAT设备时,NAT设备对该报文的外层IP头和增加的UDP头进行地址和端口号转换。UDP报文端口号修改为4500

五、IPSec协议流量特征分析

在上图 4.14 (a) 中,IPSec流量与原始流量几乎完全重合,这符合ESP协议的特性,即一一对应,一条ESP报文封装一条原始报文,然后进行转发。折线的重合说明IPSec不会对原始流量进行分片等操作,且自身不会产生大量与传输内容无关的流量,它在得到一条原始报文后,仅对其进行加密并加上IPSec头部,然后忠实地发送到目的地。

在上图 4.14 (b) 中,IPSec流量与原始流量基本重合,但是IPSec流量的字节数到达速率在每个峰值处均比原始流量高。这说明IPSec每条报文的大小都要大于原始报文,这符合IPSec协议的封装特征。加密与完整性保护会产生额外的数据开销,同时无论在隧道模式还是传输模式下,IPSec协议都会对报文进行重新封装,再加上额外的头部,使得讲IPSec处理后的报文数据量大于原始报文。

在上图 4.15 (a) 中,不论是IPSec流量还是原始流量,其报文大小分布都是U形,即报文大小多集中在0--200字节与1400--1500字节之间,尤其是1400--1500的部分,而200--1400字节的报文数量明显较少。U形分布原因有以下几点:1、有大量数据正在传输;2、网络状况理想,TCP链路极少堵塞,可以持续以较大的发送窗口传输数据;3、左边部分为大量的ACK报文与相关协议的控制报文,以及数据量较小的报文。然后再对比IPSec流量与原始流量,可以观察到其报文大小分布模式及其相似,原始流量相较IPSec流量整体左偏,说明原始流量的报文教IPSec流量较小,这和折线图的结论一致。

在上图 4.15 (b) 中,可以看到横坐标的报文到达时间间隔范围较大。这与流量采集的方法与环境相关,偶发性的网络阻塞,可能瞬间将报文到达时间间隔提升到千毫秒级。当然,还有很多原因会导致报文到达时间间隔发生异常,因此,报文到达时间间隔时间是一种很不稳定的特征。从图中还可以看到,大部分的到达间隔时间极小,且IPSec流量和原始流量的到达间隔时间分布及其相似。

-------------本文结束感谢您的阅读-------------
您的鼓励就是我创作的动力,求打赏买面包~~
0%