首页 >  深度 >  详情

IPsec 原理和应用简介(一篇搞定~)

2023-02-06 15:53:42来源:哔哩哔哩

IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,是一组基于网络层的,应用密码学的安全通信协议族,不具体指某个协议。它是 VPN(Virtual Private Network,虚拟专用网)中常用的一种技术。由于IP报文本身没有集成任何安全特性,IP 数据包在公用网络如 Internet 中传输可能会面临被伪造、窃取或篡改的风险。通信双方通过 IPsec 建立一条 IPsec 隧道,IP 数据包通过 IPsec 隧道进行加密传输,有效保证了数据在不安全的网络环境如 Internet 中传输的安全性。

IPsec的工作过程

IPsec 可以分为配置运行两个过程。配置过程可以手工进行也可以通过软件自动配置,比如 strongSwan,LibreSwan,OpenSwan,FreeSwan等;


【资料图】

IPsec工作时需要的数据:

安全策略(Security Policy,缩写SP),定义了什么样的数据要进行ipsec处理,相关的配置被存储到SPD(Security Policy Database)中。

安全关联(Security Association 缩写SA,有些文章翻译为"安全联盟"),是建立ipsec通信所需的相关参数。比如加密密钥、认证密钥等,保存在SAD(SA Database)中。

SP 描述了需要做什么;而 SA 描述了它应该如何实现。一对SA和SP负责一个方向的数据处理,双向都需要IPsec就需要两对SA和SP。建立SA,手工配置又复杂又不安全,生产上应该没人会用。利用软件自动配置是首选,软件配置是通过 Internet Key Exchange 协议(有IKEv1 和 IKEv2两个版本) 自动协商。IKE是一个复合协议,协议建立在Internet安全联盟和密钥管理协议ISAKMP定义的框架上,是基于UDP(User Datagram Protocol)的500 端口的应用层协议,在NAT环境下会切换为4500端口。IKE的精髓在于它永远不在不安全的网络上传送密钥,而是通过一些数据的交换,通信双方最终计算出共享的密钥,并且即使第三方截获了双方用于计算密钥的所有交换数据,也无法计算出真正的密钥。其中的核心技术就是DH(Diffie Hellman)交换技术。

DH方法针对的是以下困难的局面:

Alice 和 Bob 想协商一个密钥,用于对称加密。但是他们之间的通信渠道是不安全的。所有经过此渠道的信息均会被敌对方Eve看到。为了防止密钥泄露,Diffie 与 Hellman提出以下密钥交换协议:

有两个全局公开的参数,一个素数p和一个整数 g ,g 是 p 的一个原根。

1. Alice 和 Bob 先对 p 和 g 达成一致,而且公开出来。Eve 也就知道它们的值了。

2. Alice 取一个私密的整数a, 不让任何人知道, 发给 Bob 计算结果:A=ga mod p. Eve 也看到了A的值。

3.类似,Bob 取一私密的整数 b , 不让任何人知道, 发给Alice计算结果B=gb mod p. 同样 Eve 也会看见传递的B是什么。

4. Alice 拥有的信息为g、p、a、B 计算出 K=Ba mod p=(gb)a mod p=gab mod p.

5. Bob 拥有的信息为g、p、b、A 也能计算出 K=Ab mod p=(ga)b mod p=gab mod p.

6. Alice 和 Bob 现在就拥有了一个共用的密钥K.

7.虽然Eve也看见了p、g、A、B  但是鉴于计算离散对数的困难性,他无法知道a和b 的具体值,所以Eve就无从知晓密钥K是什么了。

IKE有三个组件:(了解一下不细聊)SKEME,Oakley ,ISAKMP。

SKEME:实现公钥加密认证的机制

Oakley:基于到达两个对等体间的加密密钥的机制

ISAKMP:在两个实体间进行分组格式及状态转换的消息交换的体系结构。

IKE协商分两个阶段:第一阶段,用来协商自己用的连接信息,被称为 IKE SA(或 ISAKMP SA ),期间需要完成身份验证和密钥信息交换。身份验证的方法Public Key Authentication

Pre-Shared-Key Authenticiation (PSK)

Extensible Authentication Protocol (EAP) 用户名密码

eXtended Authentication (XAuth)

这个阶段有主模式(Main Mode)和野蛮模式(Aggressive Mode)两种协商方法。感兴趣的可以自行搜索或参考文后的扩展链接了解。第二阶段,是在第一阶段建立的 IKE SA 的保护下来确立 IPsec SA,使用快速模式。根据配置的 AH/ESP 安全协议等参数协商出 IPsec SA。协商出IPSec 需要使用的认证算法和加密算法及相关密钥(1)认证算法 IPSec可以使用三种认证算法MD5(Message Digest 5):MD5 通过输入任意长度的消息,产生 128bit 的消息摘要。SHA-1(Secure Hash Algorithm):SHA-1 通过输入长度小于 2 的 64 次方比特的消息,产生 160bit 的消息摘要。SHA-2:SHA-2 算法相对于 SHA-1 加密数据位数有所上升,安全性能要远远高于SHA-1(2)加密算法加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。IPSec使用以下三种加密算法:DES:使用 56bit 的密钥对一个 64bit 的明文块进行加密。3DES:使用三个 56bit 的 DES 密钥(共 168bit 密钥)对明文进行加密。AES:使用 128bit、192bit 或 256bit 密钥长度的 AES 算法对明文进行加密。

【文章福利】小编推荐自己的Linux内核技术交流群:【749907784】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)     

IPsec运行过程

工作模式和封装协议

工作模式有隧道模式(Tunnel mode)和传输模式(Transport mode)。

封装协议有 AH (Authentication Header头部验证) 和 ESP (Encapsulating Security Payload安全载荷封装)两种,协议号分别为51、50。IPSEC 使用 ESP 来支持加密,使用 AH来保护报文的完整性。二者可以单独使用, 也可以一起使用。

AH 认证头协议:鉴别头 AH:(不提供保密性,只对整个IP数据包提供保护)无连接数据完整性:通过哈希函数产生的校验来保证数据源认证:通过计算验证码时加入一个共享密钥来实现抗重放服务:AH报头中的随机序列号可以防止重放攻击

ESP 封装安全载荷协议:除提供 AH 认证头协议的所有功能之外,还有数据保密和有限的数据流保护。ESP 协议允许对 IP 报文净荷进行加密和认证、只加密或者只认证,ESP 没有对 IP头的内容进行保护。保密服务通过使用密码算法加密 IP 数据包的相关部分来实现。数据流保密由隧道模式下的保密服务提供。ESP 通常使用 DES、3DES、AES 等加密算法实现数据加密,使用 MD5 或 SHA1 来实现数据完整性认证。IPsec的数据封包方式注:下边的图只是示意图,AH 头,ESP 头等还有其他细节结构,并未体现出来,详情请自行搜索。AH 协议在两种模式下的封装:

ESP 协议在两种模式下的封装:

兴趣流量的识别和封装,由内核空间网络栈的 xfrm (读作transfrom)框架提供支持,处于Netfilter的处理路径上:

上图是知名的 netfilter 框架处理过程图的一部分,可以清楚的看到:input 的数据在 xfrm lookup 处,发现是需要解码的数据,解码后重新进入网络栈处理。

output 的数据经过 xfrm lookup 处,发现是需要编码的数据,编码后重新进入网络栈发出。

下边这个图看的可能更清晰些:

查看 xfrm 的状态,策略,监控可以使用ip命令:

关于 IPsec 做 VPN:

传输模式,只是对原始IP包的数据部分进行处理,目的IP并没有变化。传输模式只为高层协议提供安全服务,提供端到端的数据保护,本身并不能做VPN。但是

常用的VPN比如 L2TP over IPsec, 即在 IPsec 的传输模式+ESP协议下,去跑 L2TP VPN:(由外到内的数据封装)

IP/UDP(4500)/ESP/UDP(1701)/L2TP/PPP/IP/TCP/HTTP

其他协议(比如GRE等)跑到传输模式的ESP加密的模式上,用ESP做加密,然后用其他协议做功能,也是常见的用法。

隧道模式,是对原有的整个 IP 包进行处理,外层又封装了一层IP头。可以做 VPN用,但因为之前 IPsec 隧道模式认证和分配IP的协议标准化不太好,所以也不常用,现在不知是否可以直接使用了。

关于 IPsec 的 NAT 穿透

注:NAT 有很多类型,这里指的是 Port Address Translation (PAT)型的NAT,是和端口相关的 NAT ,一般家庭网络都是这种 NAT。

AH 主要用于保护消息的完整性,其验证范围包含IP报文头,而 NAT 修改 IP 报文头会导致 AH 检查失败,因此使用 AH 保护的 IPSec 隧道是不能穿越 NAT 网关的。

ESP协议保护的报文不存在该问题,因为 ESP 保护的部分不包含IP报文头(对隧道方式而言是外层IP报文头)。

因为 AH/ESP 是 IP 层有协议号的协议,和 TCP、UDP 是同级协议,本身没有端口号,在标准的 PAT-NAT下也无法工作。

但是,还记得之前 IKE 协商时如果发现 NAT 环境会切换到 UDP 的 4500 端口么。IKE 用完了 UDP 的4500端口,后边 IPsec 真正工作时也会把自己封到 UDP-4500 端口的数据中,以支持 NAT 。这依靠 IPsec 的 NAT-Traversal,简称 NAT-T,NAT-Discovery ,简称 NAT-D 机制来实现的。

最终得到结论,只有ESP协议 配合UDP4500端口封装才能支持NAT环境。

关于本机的NAT配置对IPsec的影响

由下图可知,NAT处理是在IPsec之前的,如果NAT改变了数据的IP地址,IPsec有可能就识别不到相关数据流了,所以在网关上配有NAT以支持内网机器联网的同时,又要通过IPsec与远程网络打通时,一定要注意NAT的配置,不要对内网打通的流量做NAT。

配置示例

可以参考下边这个链接,通过strongSwan在Ubuntu系统上做个配置示例,

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04

这个示例配通后,本机的请求会被IPsec封装,传输到远端,在远端做NAT以使用远程服务器的IP访问网络。配置过程中注意服务器本机的防火墙配置。

应用情景

下图来自 strongSwan文档,可以用来解释好几种应用情景

左边10.1.0.0/16网络,代表一个办公区的内网,网关是moon。

右边10.2.0.0/16网络,代表另一个办公区,网关是sun。

中间192.168.0.0/24网络代表公网,画的是直连,但我们应该理解成中间经过很多路由器和不同的网段。

下边carol和dave代表能联通公网的主机,比如我们家里的电脑。

下边winnetou代表公网上的一台服务器。

情景一,安全加密(Host-to-Host)

图中moon和sun之间,想安全通信不被别人拦截数据。他们之间就可以打通IPsec隧道(传输或隧道模式,兴趣流 192.168.0.1 - 192.168.0.2),对他们之间的通信做加密。被加密的数据,可以是L2TP,GRE等其他VPN或隧道协议,为其他协议提供安全支持和NAT穿越等服务。

情景二,远程访问(Host-to-Site)

比如图中carol在家里,想访问左边的办公区的网络中的所有设备。carol和办公区的网关moon之间打通 IPsec 隧道(隧道模式,兴趣流 192.168.0.100-10.1.0.0/16),carol之间就可以向目的网段的服务器地址比如10.1.0.10发送数据了。

情景三,内网互联(Site-to-Site)

比如右边办公区的bob想直接访问左办公区的alice,那就在moon和sun之间打通IPsec隧道(隧道模式,兴趣流10.1.0.0/16-10.2.0.0/16),他们相互通信的数据包会被自动传输到对端。

情景四,隐藏IP(Host-to-Site + SNAT)

比如carol不想用自己的IP上网,想用winnetou的IP,那就在他们之间打通IPsec隧道(隧道模式,一般会配置一个VIP作为默认网关,兴趣流VIP - 0.0.0.0/0), 在winnetou上开通数据转发功能,并对数据包做SNAT,发出前把源地址替换成自己的192.168.0.150。

原文作者:漫跑的小兔

关键词: 加密算法 传输模式 第一阶段

[ 相关文章 ]