前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开始“熟悉又陌生”的IPSec奇妙之旅

开始“熟悉又陌生”的IPSec奇妙之旅

作者头像
网络之路一天
发布2024-01-08 19:46:31
1920
发布2024-01-08 19:46:31
举报
文章被收录于专栏:网络之路网络之路

前言

IPSec算是比较复杂的协议之一了,标题写着“熟悉又陌生”,熟悉是IPSec这个技术应该听过很多次了,不管是在书中还是大佬聊天中说用IPSec可以实现这个需求,保护数据的安全,陌生则是并不知道IPSec具体是怎么工作的,为什么能够保证到数据的安全性,又在工作中应用这么广泛,所以这几篇也是最费心思了,博主的想法是把枯燥的固定算法等简单介绍,着重点在IPSec的整个框架以及在配置以及排错中用的上的知识点讲解。

IPSec的由来与组成

IPSec最早其实是为IPV6开发的,在IPV6里面IPSec是一个组成部分了,但是在IPV4的协议出现之初是根本没考到安全性这一点,随之internet的发展,开发、共享的信息带来了非常大的便利的同时,也出现了各种网络攻击,互联网存在不安全的因素,在这种情下,IPSec也开始支持IPV4,在internet建立安全稳定的专用线路。

IPSec(Internet Protocol Security)其实并不是一个单独协议,而是有多个协议组成的一个框架,这也是IPSec的复杂的地方,下面看看有哪些协议,并且实现了什么样的功能。

1、加密跟验证

还是这个拓扑,这里我们假设北京FW的192.168.10.1能够访问192.168.20.2)在IPSec里面有一个功能框架可以实现,在后面会介绍),那么如何来保障数据的不会被窃取(机密性),以及这份数据是不是完整的呢?

(1)加密

在IPSec里面会采用一个类似于武侠小说里面的易容术,在发送数据之前,它会先用加密算法跟密钥,将数据变成一个全新的内容,这个过程称为加密,当穿越internet,抵达对方后,使用相同的加密算法跟密钥,逆向将这个全新内容的数据包恢复成原来的内容,这个过程称为解密。这样保障了数据在传输过程中的机密性,因为就算窃取到了,也是一份跟原数据无关的内容。

为了方便理解,博主加入一个影视当中的例子,一个比较经典的港剧(陀枪师姐3),相信很多人看过,并且都算是一个童年阴影,里面有一个犯人叫鲍国平(翁文成),他在监狱利用《圣经》里面的章节的内容写信指挥郭锦安,其实这封信里面包含了下一个目标的内容,但是由于使用的都是《圣经》里面的正常语句,狱警发送之前会检查内容,根本就发现不了什么信息,而信到了郭晋安手里,它与跟鲍国平之间有一套专门的沟通机制,最终得到了下一个目标的信息,完成作案。

这个其实跟IPSec的加密解密过程是有些相似的,这里把拓扑跟这个影视的例子融入在来看看,鲍国平(拓扑中的BJ_FW)将目标(原始数据)通过外物《圣经》跟章节写诚信进行伪装(在IPsec里面则是利用加密算法跟密钥),在传输的过程中就算被狱警检查(在拓扑中则理解成穿越internet被人窃取)由于进行了伪装(加密),狱警也看不出来什么有用的内容,最终抵达郭锦安(CS_FW)手中,利用两人事先知道的规则通过信的内容得到目标人物(在IPSec里面则利用同样的密钥来解密),完成整个的作案(通信)。

在IPSc中使用相同密钥来加密跟解密,这种方式也叫做对称加密,主要的算法(1)DES (2)3DES (3)AES(有128位、192、256位),目前主流使用AES为主,des与3des由于年代久远了,安全性相对较低。

(2)验证

数据的机密性得到了解决,但是这个数据是不是真正的源发送过来的、数据是不是完整,这个加密功能无法解决,就有了验证的机制出现。

这个大家在实际中其实用的非常多

在下载游戏或者是镜像,特别是大文件的时候,往往在介绍里面除了说文件名、发布日期以及文件大小以外,还会出现一个MD5以及SHA1的内容,它的作用是什么呢,就是来验证这个下载内容是不是完整的,比如下载完毕后,使用MD5或者SHA1的工具把这个文件计算得到了一个值,这个值跟介绍里面的一样,那么说明数据是完整的,没有损坏或者发生改变。

同样,在IPSec里面,它会在加密后再次使用验证算法和验证密钥对这个加密后的数据进行处理,得到一个值,会附带在这个数据包里面一起发送给对方,在对方收到以后,使用相同的验证算法跟密钥进行计算,得到的结果是一样的话,说明这个数据包是完整的,没有被破坏,而且在IPSec里面,验证跟加密是配合使用的。

验证算法目前有MD5、SHA1、SHA2,在目前的组网中比较推荐使用SHA2。

2、安全协议与封装模式

这里就回到刚开始有一个假设说192.168.10.1能够访问192.168.20.2,怎么实现的呢?就是利用到了封装协议,它的作用其实类似于上一篇学的GRE,但是不一样的地方是它在封装的基础上面又提供了加密、认证等服务。

IPSec两种安全协议

(1)AH协议:只支持验证功能,不支持加密,AH会对数据包用验证算法跟密钥通过HASH计算出一个结果,附带在数据包一起发送给对方,对方也用同样的验证算法跟密钥得到结果与发过来的结果进行比较,来完成验证功能。AH几乎在项目中用不到,因为AH有一个致命的地方,这个在后面篇幅会提到。

(2)ESP协议:ESP跟AH不一样,它同时支持验证跟加密,这也是在实际中使用最多的协议。

IPSec两种封装模式(关键部分)

(1)隧道模式:这种模式跟GRE类似,在原始的IP头之前插入AH或者ESP的头部,然后生成一个新的IP头部。以上面拓扑为例,新IP头部源/目地址为隧道两段的公网地址来进行封装,所以它能够在网关之间通过internet建立IPSec隧道,即穿越了互联网,又保护了两个网关身后网络之间的通信,这个是目前主流的封装模式,也是后面会经常涉及到的。

这是在隧道模式下AH认证范围以及ESP的认证与加密范围,这里着重来看ESP,把这些信息带入到上面拓扑则变成。

加密的部分是原始头部开始到后面的范围,而认证则是在加密后的基础上面,把整个ESP头部开始到ESP的尾部都认证,然后放在ESP的认证数据里面。

(2)传输模式:这个对比隧道模式,则是不会生成新的IP头部,AH与ESP会插入到IP头部跟传输层协议的中间,适合在局域网内这样的场景下使用。

两种传输模式在实际运用中针对的场景不一样,隧道模式是目前用的最多的,通常用IPSec就是解决两个站点局域网之间通过internet构建安全的隧道使用,这种情况下通常是使用隧道模式,而传输模式则不会生成新的IP头部,自然就不能穿越internet,只适合在局域网环境。

3、SPD(安全策略数据库)

这个名词可能有点陌生,在思科、华为、H3C中这个叫做感兴趣流量或者受保护的数据流,实际上定义的就是哪些数据互访通过IPSec隧道保护,其余的流量按正常路径走。

4、安全联盟

当BJFW与CSFW成功建立了IPSEC隧道连接,这种连接称为安全联盟SA(Security Association),在思科 华为 华三里面更多叫做IPSec sa(这个是后面经常会查看的信息),这个SA里面包含的就是建立隧道双方采用的相同加密算法、加密密钥、验证算法、验证密钥、封装模式,相当于用相同的方式结成了盟友。

而IPSec SA它是一个单向的逻辑连接,为了每个方向都得到保护,IPSEC会在每个方向上都建立SA信息,比如图上面BJ的入方向对应CS的出方向SA,BJ的出方向对应CS的入方向SA。

对于刚了解IPSEC的来说,这个时候有点懵了,涉及的东西非常多了,SA的简单作用就是双方用相同的加密、认证算法、密钥、封装模式来完成数据包的加密解密,但是在IPSec里面SA是单向的,所以后续做实验的时候会发现有2个SA信息,它的作用是,比如192.168.10.1访问192.168.20.2从BJ_FW出去为outbound方向(用SA1 里面的加密认证封装等处理),抵达CSFW后,则是inbound方向用(SA2相关的信息进行解密),并且在IPSec SA里面由SPI(安全参数索引)、目的IP地址、安全协议(AH或者ESP)三个元素来确定一个唯一标识符。(作用在后续建立隧道后查看感受会跟加深刻)

体验手工方式IPSec隧道

上面IPSec的框架已经了解了几个核心部分了,是不是有点枯燥了,这里就来采用IPSec来建立隧道,完成192.168.10.1访问192.168.20.2。(以下实验只是体验下手工IPSec隧道,在实际中用的并不多,更多的是为了初步学习,更加理解)

重要说明

IPSec通常是建立在Internet上的隧道技术,而且是部署在防火墙的基础网络之上,所以在配置IPSEC之前,基础网络保证是通常的,涉及到以下

(1)BJFW到CSFW之间的公网路由可达,连通性正常

(2)BJFW与CSFW之间的安全策略要允许192.168.10.0与192.168.20.0互通

(3)更多安全策略与NAT相关的,在后续篇幅会详细讲解,这里先着重在IPSec隧道体验。

配置步骤

为了配置关系更加的清晰,先了解下IPSec手工方式建立的几个步骤

(1)定义保护的数据流,也就是感兴趣流量,比如拓扑中的BJ这边192.168.10.0/24到CS的192.168.20.0/24

(2)配置IPSec安全提议,双方设置相同的加密算法、验证算法、安全协议、封装模式,都在安全提议中定义。

(3)配置手工方式的IPSec安全策略,包括双方的公网地址、安全联盟标识符SPI、加密与验证的密钥。

(4)最终把IPSec调用在接口

实际配置

这里基本的组网配置说下,双方都配置了出口地址以及内网地址,出口写了默认路由,并且安全策略直接是全放(简化环境),没有配置NAT策略。

互联网

#

interfaceGigabitEthernet0/0/0

ip address 202.100.1.254 255.255.255.0

#

interfaceGigabitEthernet0/0/1

ip address 202.100.2.254 255.255.255.0

BJ_FW

interfaceGigabitEthernet1/0/0

undo shutdown

ip address 192.168.10.254 255.255.255.0

#

interfaceGigabitEthernet1/0/1

undo shutdown

ip address 202.100.1.1 255.255.255.0

service-manage ping permit

#

firewall zone trust

set priority 85

add interface GigabitEthernet0/0/0

add interface GigabitEthernet1/0/0

#

firewall zone untrust

set priority 5

add interface GigabitEthernet1/0/1

#

ip route-static 0.0.0.00.0.0.0 202.100.1.254

#

security-policy

default action permit

CS_FW

interfaceGigabitEthernet1/0/0

undo shutdown

ip address 192.168.20.254 255.255.255.0

#

interfaceGigabitEthernet1/0/1

undo shutdown

ip address 202.100.2.1 255.255.255.0

service-manage ping permit

#

firewall zone trust

set priority 85

add interface GigabitEthernet0/0/0

add interface GigabitEthernet1/0/0

#

firewall zone untrust

set priority 5

add interface GigabitEthernet1/0/1

#

ip route-static 0.0.0.00.0.0.0 202.100.2.254

#

security-policy

default action permit

两边的基本通信都正常了,下面开始按步骤配置手工IPSEC

这里就是手工配置IPSec的全部了,可能大家有一个疑问,就是为什么要写去往对方的内网网段走公网出去,这个路由的作用是让走对方的流量引入IPSEC策略调用的接口,那么触发封装,自然就会走IPSec隧道,而不是走的公网,但是博主这里又写了一个可选,这是因为在实际环境中,通常会配置默认路由,默认路由自然就包括了192.168.20.0/24走公网出去。

实际测试

测试是通了,那怎么验证它是不是走的IPSEC隧道呢,抓包看看。

抓包可以看到一个明显的区别,还记得上一篇抓GRE报文的时候,抓包软件解析的直接是内网的信息,因为没有加密,能够很准全的解析出来,但是在IPSec里面不一样,显示的是公网的地址,并且协议是ESP,那说明192.168.10.1访问192.168.20.2是通过IPSec隧道过去,被IPSEC的sa信息保护,所以既可以穿越公网,又保证了安全性,并且可以发现在抓包里面有一个202.100.1.1到202.100.2.1的(outbound)SPI,D431是十六进制(十进制为54321),而202.100.2.1到202.100.1.1的(outbound)SPI是3039(十进制是12345),这个跟我们上面配置的outbound是对应的。最终就是192.168.10.1访问192.168.20.2在采用了隧道模式的IPSec下进行封装,IPSec在最外层打上新的公网IP头部,然后后面加一个ESP头部,以及原始数据,最终通过加密与认证算法,封装在ESP里面,最终从公网发送出去抵达对端,对端在通过解密方式逆向把原始数据提取出来完成整个通信的过程。

可以发现ESP里面的内容都是乱码的,所以在公网上传输,就算被窃取,也是获取不到任何有用的信息。

再谈IPSEC SA

这一块在上面已经介绍过了,这里用更加直观的方式在来回顾下,对这个SA有一个更深入的了解。上面提到了一句话说在SA里面 SPI、目的地址、安全协议三个因素组成一个唯一标识,通过状态来看看。

这里可以发现 BJ的outbound ESP SA对应CS的InboundESP SA,同样,CS的Outbound对应BJ的Inbound,这个有什么作用呢?

比如还是上面那个图,当192.168.10.1访问192.168.20.2的数据抵达BJ防火墙后,防火墙查询路由表

发现去往192.168.20.0走202.100.1.254出去(这里再次强调下,通常情况下这静态路由是不需要写的,也有特殊情况,这个在案例篇会讲解到),防火墙把数据包引入G1/0/1。

由于G1/0/1有IPSEC的安全策略存在,所以会检查该流量是否需要走IPSEC隧道,检测的依据就是之前定义的ACL 3000

这个3000在SA信息里面也有,防火墙发现这个数据包需要走IPSec隧道,那么会查看IPSEC的sa信息

查到走这个信息,用outbound里面SA的信息进行加密,里面包含了封装协议、认证协议以及SPI(这里还有一个细节注意下,Outbound ESP下面显示的是SA encrypted)等于就是这个数据包加密、认证用什么样的算法以及安全协议都根据这个outbound sa里面定义的来进行处理,然后封装用什么模式呢?

在SA里面也标明了封装用tunnel模式,tunnel的源地址为202.100.1.1,目的地址为202.100.2.1,这就是新IP头部的信息。(在IP后面还有一个:0,这个只要是手动建立的则为0。)

数据包整体已经封装完成,打上了新的头部交给互联网,最终抵达CS_FW这边,防火墙收到以后,它发现是一个ESP的报文。(新IP头部的协议号里面会明确写后面的头部是什么)

CS_FW会检查收到数据包的接口是否有IPSEC安全策略,没有则丢弃,有的话则查看IPSEC sa数据库里面是否有对应的SA信息用于解密,这个时候有一个关键的参数就起到作用了,SPI,它能够快速的让防火墙查到对应的SA信息。

CS_FW通过BJ过来的SPI,发现本地数据口中存在相同的SPI(54321),这里在说一个SPI在ESP里面是不被加密的

最终CS_FW通过spi找到了对应的解密sa信息,得到了原始的数据,最终完成了整个通信的过程。

可以发现IPSEC sa里面的内容跟我们实际配置的IPSEC提议、安全策略都是息息相关的,并且在后续的数据包加解密过程中都起到很重要的作用,所以这里博主再次提起这个,希望能够加深印象。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络之路博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
弹性公网 IP
弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档