IPSEC VPN
IPSEC是为IP网络提供安全性的协议和服务的集合,是一种协议簇,一个基于网络层,应用密码学的安全信息协议组。一开始TCP/IP 没有考虑到信息的安全传输。IPSEC协议簇诞生的意义就是保证TCP/IP的安全传输。
伪头部校验:TCP再校验的时候会包含TCP数据部分、原始数据部分还会包括IP头部里面12字节(源IP和目标IP、协议字段、8位保留字段、长度字段)的校验。其中TCP必须,UDP选用。
IPSEC协议簇是针对IPV6设计的,在IPV6的产品中,IPSEC是强制使用,保证其数据传输的安全性;但是,也可以使用在IPV4中,作为一个可选项来使用
IPSEC提供的安全服务
安全信息要素:机密性、完整性、可用性,这三点被称为CIA的黄金三角,新添加可控性和不可否认性
-
机密性 --- 数据加密
-
完整性 --- 防篡改
-
可用性
-
数据源鉴别:身份认证
-
预共享密钥 --- PSK --- 相当于两边对了一个暗号,这个暗号需要事先确定好。
-
数字证书 --- 遵循PKI体系 --- 相当于一个被公认让你的身份证。
-
-
不可否认性 --- 数字签名
-
-
访问控制
-
有限的流量保护 --- 在IPSEC中可以抓取感兴趣流,即可以设定哪些流量需要进入到IPSEC通道中,进行保密传输,哪些不需要进入通道。
-
注意
-
IPESC通道,不一定是隧道。隧道是VPN技术的核心技术。IPSEC本身是一个安全体系,它的作用并不一定是用来构建VPN隧道的。他也可以单纯的保证数据的安全传输。指的是要不要保护传输的数据;同理,GRE和GRE VPN也是同样道理,GRE是一种封装技术,而GRE VPN是通过利用GRE技术形成的一种VPN技术;并且MPLS VPN 和MPLS,MPLS它是一种标签转发技术,依靠标签转发。而不依靠路由转发。本身也是一种封装转发技术,MPLS VPN就是利用这个封装转发技术,来建立的一种VPN
-
-
-
重传攻击(重放攻击)
用户登录服务器的加密数据包被截取,其他人通过重新发送这个数据包给服务器,从而绕过登录,进入服务器
预防方法:
-
数据包+时间戳
-
数据包+序列号
重传攻击保护 --- 抗重放 --- IPSEC通过启用序列号的方法来进行防重放攻击。 --- 相当于启用一个一次性的数字,不会再次生效。
IPSEC协议簇
安全协议
-
工作方式:即两种不同的封装方式。
-
传输模式
-
特点:没有创建隧道,主机和主机之间,不需要跨越隧道针对数据的保护,一般应用在私网内部。
-
主要应用场景:经常用于主机和主机之间端到端通信的数据保护。因为没有创建隧道,所以,不能穿越公网,一般用于私网内部。
-
封装方式 --- 不改变原有的IP包头,在原始的数据包头后面出入IPSEC的包头,将原来数据封装成为被保护的数据。主要针对IP层及以上的数据进行保护,具体的保护方法和范围需要由选用的安全协议来决定。
-
-
隧道模式
-
主要应用场景:因为可以跨公网创建隧道,所以,经常用于私网和私网之间通过公网进行通信,建立安全的VPN隧道。
-
封装方式 --- 增加新的IP头部,之后是IPSEC的头部,再之后是原始的数据包封装。
-
-
-
安全协议
-
AH(Authentication Header),鉴别头,协议号是51
-
AH提供的安全服务。注意:AH协议无法提供加解密的服务。
-
数据完整性保障 --- AH的主要工作就是保证数据的完整性的。
-
数据源认证 --- 身份认证
-
抗重放攻击
-
-
AH头部
-
下一头部:上层协议使用类型
-
安全参数索引(SPI):用来标识唯一的SA(安全联盟)的,SA相当于建立安全会话,用于参数协商。即IPSEC SA注意,这个SA也是分方向的,如果需要构建这个安全通道,需要构建两条方向相反的SA才行。不同的SA通道需要通过SPI进行标识,相当于SA的一个ID号。
-
序列号:用来防重放,并且不允许重复
-
AH认证部分= 原始IP头部和数据。将其放在AH头部中的认证数据中。
-
-
AH保护范围
-
传输模式
-
隧道模式
-
-
注意
-
AH在进行完整性校验时,因为,会包含IP头部,而IP头部中的部分数据比如TTL,TOS这些参数,在传递的过程中会发生变化,所以,AH在进行校验时将不包含这次参数。
-
因为AH在进行完整性校验的时候,包含有IP地址信息,但是,NAT技术会修改IP地址信息,所以,AH协议无法通过NAT环境,否则将导致校验失败。
-
-
补充
-
GRE协议号是47
-
TCP协议号6
-
UDP协议号17
-
-
-
ESP(IPSec Encapsulating Security Payload) --- 封装安全载荷协议
-
ESP提供的安全服务
-
数据完整性保障
-
数据源认证 --- 身份认证
-
抗重放攻击
-
ESP可以提供数据的加解密服务,并且,加解密是可选的。
-
-
ESP的头部
-
注意:ESP尾部主要目的是进行数据的填充。因为数据进行加密主要使用的对称加密算法,而其中分组加密需要针对固定长度的分组进行加密,如果最后分组的长度不足,则需要填充。满足加密的条件。还有就是下一头部因为包含数据信息,所以,也放在尾部进行保护,因为负载部分和尾部部分是会进行加密的。
-
加密部分=数据部分+尾部部分
-
下一头部:上层协议使用类型。之所以加密是因为会暴露信息上层协议信息,即泄露数据。
-
-
ESP的保护范围
-
加密范围:除了IP头部内容和ESP头部的内容外,剩余所有网络层以上的数据都会进行加密。
-
认证范围:认证范围广,不包含最外层的IP头部,包含ESP头部和数据部分以及ESP尾部,都进行认证生成摘要值,放在最后面的ESP认证里。
-
传输模式
-
红色区域便是加密区,TCP和载荷数据以及ESP尾,黄色区域是验证区包括:ESP和TCP,载荷数据和ESP尾。
-
-
隧道模式
-
红色区域是加密区域,整个数据包加ESP尾, 黄色区域是验证区域,这些区域内的数据是不能被修改的。
-
此时原始IP头部加密是因为转发依靠新的IP头部转发。
-
-
-
-
AH和ESP对比
-
AH和ESP结合使用
-
传输模式
-
隧道模式
-
结论:只要有AH协议参与的封装都无法通过NAT环境
-
-
IKE
IPSEC SA --- 注意,这个SA也是分方向的,如果需要构建这个安全通道,需要构建两条方向相反的SA才行。
手工建立IPSec SA
手工建立IPSec SA的一直生效
-
先通过ACL列表抓取感兴趣数据流。
-
配置IPSec的安全提议,即配置安全参数
-
transform --- 选取安全协议封装,AH/ESP
-
esp encryption(加密)-algorithm(算法) 定义做完整性校验,如MD5,SHA-1,SHA-2
-
ah encryption(加密)-algorithm(算法)
-
encapsulation(封装)-mode 确定封装模式,即传输模式或隧道模式
-
-
配置IPSec安全策略
-
针对流量做哪些处理、定义哪些参数。
-
可以创建点到点,也可以创建点到多点。
-
设置安全表示SPI。
-
配置预共享密钥。
-
两端都要配置。
-
-
调用IPSec安全策略
动态建立IPSec SA
IKE(互联网密钥交换) ,主要用来完成IPSec中需要的密钥相关参数的协商工作。可以动态建立IPSec SA。
有两个版本IKE V1和IKE V2
IKE有多个协议构成:SKEME、OAKLEY、ISAKMP
-
ISAKMP(互联网安全联盟密钥管理协议)
-
IKE的协议本体 :主要用来完成IPSec中需要的密钥相关参数的协商工作。可以动态建立IPSec SA
-
它本身是应用层协议,传输层使用到UDP协议,端口号是500,并且要求源端口和目标端口号都为500。
-
-
SKEME、OAKLEY 可以理解为IKE协商过程中使用到的资源库
第一阶段
主要目的是为了获得建立IPSec SA时使用的密钥,以及身份认证。并且身份认证是建立安全隧道的前提。
IKE SA (ISAKMP AS) ---这个SA是双向逻辑,不区分源和目标;而IPSec SA 是单向逻辑,通信双方都要建立。
第一阶段的过程
主模式
默认使用IP地址作为身份标识,并且需要通过6个数据包经行交互,安全性更高。
PSK(预共享密钥)和身份标识两者的含义不同,PSK是双方商量的是一样的,主模式用IP地址作为身份标识,它还要作为预共享密钥的识别标志。因为预共享密钥和身份标识有一种对应关系,目的是用来区分选取的预共享密钥,并且用于之后生成密钥,最后再第五第六个数据包解密得出IP地址与数据包传输用的IP对比中得到验证,即身份认证通过。
-
第一二个数据包 :用来SA交换,即安全参数的交换。
-
CI --- cookie值:用作身份标识,每个数据包中都会携带,并且在IKEV2中,变成了SPI。
-
SA --- 里面携带的是需要协商的安全参数
-
加密算法
-
AES等
-
-
哈希算法
-
MD5等
-
-
身份认证方式
-
PSK
-
证书
-
-
DH组x
-
(x,的数字越大,越难被破解;一般不选择DH1,因为简单)
-
-
SA存活期
-
(默认84600s,一天时间)
-
-
-
注意
-
手工建立的SA,一经建立,则永久有效;但是IKE建立的SA,需要配置生存周期,周期时间到了之后,将重新建立SA。SA两端的数值不要求完全相同,如果时间不同,则按照最小的周期时间执行。
-
第二个数据包主要确认安全参数,如果安全参数都可以对得上,则将继续完成后面的协商。如果参数没有对上,则将回复一个负载拒绝报文,用于结束IKE SA的建立。
-
-
-
第三四个数据包:DH密钥算法交换,用来计算对称密钥。
-
NI,Nr --- 代表的是随机数
-
X,Y --- 代表DH算法中需要公开的参数。并且这里为了加强安全性,DH算法会生成四种密钥
-
PRF一种哈希算法,将预共享密钥和随机数去经行计算,生成种子密钥。预共享密钥没有传递,而是加入到算法中,如果双方预共享密钥相同,最后得出的密钥结果就是一样的,就相当身份认真了。
-
种子密钥 --- 剩余三种密钥都需要加入种子密钥运算得出,并且,在种子密钥计算中会携带预共享密钥
-
SKEYID_e --- 加密密钥,用于第一个阶段中5,6个数据包和第二阶段数据包加密使用
-
g^ir --- 代表的就是DH算法中计算出来的Z;
-
CKY-I/CKY-R --- 数据包中携带的cookie值。
-
-
SKEYID_a --- 验证密钥 --- 用于第二阶段Hash时使用的密钥,即HMAC算法(结合密钥的Hash算法),安全性比不加入密钥的Hash算法更高。
-
SKEYID_d --- 推导密钥 --- 用于计算最终密钥(最终加密数据的密钥)的素材。
-
终加密数据的密钥,第二阶段用的密钥。推到密钥和第二阶段一起算出加密数据的密钥
-
-
-
-
第五六个数据包
-
ID --- 身份信息 ---在主模式下,默认使用IP地址作为身份信息;
-
Hash ---- 针对之前SA信息再经行Hash运算,对比结果。这里的Hash运算会加入验证密钥一起进行,更加安全。
-
野蛮模式
注意:在野蛮模式中,可以自定义身份标识,主要是因为身份信息不需要加密。并且前两个数据包都无法加密。所以,野蛮模式安全性比较低。仅第三个数据包会进行加密。但是,野蛮模式适用于NAT环境以及IP地址不固定的环境下使用。
两种模式对比
第二阶段
基于已经建立的安全通道,来协商建立IPSec SA的安全参数。完成后,则标志这IPSec SA建立完成。
快速模式
与第一阶段用于也是UDP 500端口。
协商的安全参数
-
加密算法 --- 正式传输数据时使用的加密算法(加密算法协商完成后,会计算密钥第一阶段计算出来的推导密钥会加入到该密钥的计算种);
-
Hash算法 --- 正式传输数据时经行完整性校验的算法;
-
安全协议 --- AH/ESP
-
封装模式 --- 传输模式/隧道模式
-
存活时间
PFS
PFS(密钥完美向前保密) --- 正常工作中,第二阶段的最终密钥是通过第一阶段的推导密钥计算出来的,但是,这样做不完全。推导密钥泄露可能导致最终密钥的泄露。所以,可以开启这个PFS技术(注意:要开启这个技术,需要两端都开启才行),之后,则将在第二阶段重新进行一次DH交换,计算最终的密钥,从而提高安全性。
VPN黑洞
VPN黑洞 ---数据传输阶段,IPSec VPN隧道建立之后,如果其中一端的设备异常重启,而另一端的IPSec VPN隧道还在有效期内,则它发送的数据将有去无回,从而形成VPN黑洞 。
解决方法 --- DPD死亡对等体检测(保活机制)
DPD死亡对等体检测,它类似于心跳检测机制,采用空闲计时器原理。两边同时开启一个固定时间的计时器。在计时期间数据将直接发过去,但是如果计时器超时,则在数据发送前,先发送一个DPD检测报文。如果收到对方的DPD应答报文,则将重置计时器。如果没有收到,并且连续五次都没有收到,则将拆掉安全通道 。
IPSec VPN配置
IKE的配置流程
-
抓取感兴趣流
-
创建ACL列表,要创建高级ACL列表,因为后面配置IPSec安全策略中调用的ACL列表只能是高级ACL列表。并且高级ACL列表可以指定源和目标,精确匹配到哪些流量要走VPN隧道,哪些流量不需要走隧道。如果是基础ACL列表,只要是到抓取人发的流量都走隧道,就有可能绕远。
-
[r1]acl 3000 --- 这里只能选择使用高级ACL列表,因为后面调用的时候,仅能调用高级的 [r1-acl-adv-3000]rule permit ip
-
-
配置IKE安全提议
-
[r1]ike proposal 1 --- 创建IKE安全提议,数字1-99,用来区分不同的IKE安全提议。 [r1-ike-proposal-1] [r1-ike-proposal-1]encryption-algorithm aes-cbc-128 --- 定义加密算法,缺省是DES算法 [r1-ike-proposal-1]authentication-algorithm md5 --- 定义校验算法,缺省是SHA1 [r1-ike-proposal-1]authentication-method pre-share --- 定义认证方式,缺省是预共享密钥 [r1-ike-proposal-1]dh group2 --- 定义DH组,缺省DH组1 [r1-ike-proposal-1]sa duration ? --- 定义SA的老化时间INTEGER<60-604800> Value of time(in seconds), default is 86400 [r1-ike-proposal-1]sa duration 86400 --- 建议:老化时间修改的时候,要大于600S,避免频繁更新带来的资源消耗。
-
-
配置IKE对等体
-
[r1]ike peer aa v1 --- 需要声明对等体的名称(自定义),第一次进入时,需要写版本号。 [r1-ike-peer-aa] [r1-ike-peer-aa]ike-proposal 1 --- 关联IKE安全提议 [r1-ike-peer-aa]exchange-mode ? --- 选择一阶段的模式aggressive Aggressive mode --- 野蛮模式main Main mode --- 主模式 [r1-ike-peer-aa]exchange-mode main --- 这里缺省选择的是主模式 [r1-ike-peer-aa]pre-shared-key cipher 123456 --- 定义预共享密钥的具体值,注意,两边必须一样 [r1-ike-peer-aa]remote-address 23.0.0.2 --- 三位一体 1,邻居对等体的建邻地址,即指明远端的IP地址;2,参与查找预共享密钥,根据IP地址,查找对应的预共享密钥,并且计算出密钥,对比身份标识,验证对端身份。;3,作为身份标识验证对端身份。
-
-
配置IPSec的安全提议
-
[r1]ipsec proposal aa --- 需要定义一个提议的名称[r1-ipsec-proposal-aa][r1-ipsec-proposal-aa]transform esp --- 定义安全协议 --- 缺省esp[r1-ipsec-proposal-aa]esp encryption-algorithm aes-128 --- 定义数据加密算法,缺省为des[r1-ipsec-proposal-aa]esp authentication-algorithm md5 --- 定义数据验证算法,缺省为md5[r1-ipsec-proposal-aa]encapsulation-mode tunnel --- 选择封装模式 ,缺省为隧道模式。
-
-
配置IPSec的安全策略
-
[r1]ipsec policy aa 1 isakmp --- 需要定义策略的名称和编号,并且需要选择手工模式还是IKE的方式。[r1-ipsec-policy-isakmp-aa-1]security acl ? --- 关联ACL列表INTEGER<3000-3999> Apply advanced ACL[r1-ipsec-policy-isakmp-aa-1]security acl 3000[r1-ipsec-policy-isakmp-aa-1]ike-peer aa --- 关联IKE对等体[r1-ipsec-policy-isakmp-aa-1]proposal aa --- 关联ip
-
-
接口调用
-
[r1-GigabitEthernet0/0/0]ipsec policy aa
-
-
其他
-
[r1]display ipsec sa --- 查看IPSec SA[r1]display ike sa --- 查看IKE SA
-
IPSec协议簇补充
两个数据库
-
SPD --- 安全策略数据库
-
SAD --- 安全关联数据库
解释域DOI
-
可以理解为操作空间,将标准,规则都规范起来,统一在解释域中操作。
IKE V2版本
IKEV1的缺点
-
协商速度慢
-
如果第一阶段使用主模式 --- 6 + 3 = 9 条消息完成IPSEC SA的协商;
-
如果第一阶段使用野蛮模式 --- 3 + 3 = 6条消息完成IPSEC SA的协商。
-
KEV2针对协商速度进行了优化
-
在IKEV2中,第一阶段协商IKE SA仅需要两个数据包就可以完成;而第二个阶段,在协商IPSEC SA时,也仅需要两个数据包就可以完成 --- 2 + 2 = 4
-
-
-
IKEV1不支持远程用户接入
-
如果IKEV1想要接入远程用户,可以结合l2tp来构建VPN隧道,只能借助l2tp,通过ppp协议完成远程用户的认证。
-
而IKEV2增加EAP的认证方式来完成身份认证,则可以实现远程用户的接入。防火墙上,一般V1和V2同时开启,发起协商的时候,一般使用IKEV2,接受协商的时候,同时支持V1和V2。
-
IPSEC VPN的应用场景
IPSec 不支持动态路由协议
IPsec在协议设计时定位便是一个点对点的协议,这个特点可以通过Ipsec SA看出:IPsecSA通过三元组来唯一标识(目的IP,SPI, 协议号),目的IP都是单播地址,因此一个SA只能对应一个VPN节点,总而言之:ipsec不支持保护组播报文和广播报文。因为ipsec只能跑单播,动态路由使用组播。
GRE虽然同样是点对点协议,却可以封装组播报文和广播报文,但是不具备机密性和源认证等特点;IPsec协议虽然具有机密性和完整性保护的优势,但是无法封装组播报文和广播报文,因此结合两个协议的优势,GRE over IPSec应运而生,这样既可以封装单播、组播、广播报文,还可以加密数据流。
IPSec VPN应用场景
-
IPSec VPN网关部署
-
VPN设备安置在内网和公网的边界位置,这种方式最为简单,就是数据来到出口后,判断是否需要走VPN隧道,匹配上的流量则通过VPN隧道安全的传输到对端私网中。(两边的私网网段需要区分开,否则将导致地址冲突)网关部署的问题:不太安全,因为边界设备将承载很多攻击行为,而VPN设备只是保证业务数据安全的设备。
-
解决方案:
-
使用防火墙在边界充当VPN设备(但是,一台设备需要承担太多的功能,可能导致性能不足)
-
VPN设备下沉到内网中 --- VPN的单臂部署(NAT下的VPN部署场景)
-
-
-
IPSec VPN单臂部署(NAT场景下的VPN部署)
-
IKE协商中的问题
-
我们企业一般会采用NAPT的方式来进行NAT转换。但是,在IKE协商中,要求源目端口号必须时UDP 500,否则可能导致协商失败。所以,在NAPT的环境下,则可能更改端口号,导致协商失败。
-
解决方案:NAT - T
-
-
身份认证的问题:主模式无法通过NAT环境
-
解决方案:使用野蛮模式。
-
-
数据传输阶段的问题
-
AH在进行完整性校验的时候,会包含IP地址信息,所以,NAT如果转换了IP地址,则将导致校验失败。所以,在NAT环境下,无法使用AH协议。
-
解决办法:使用ESP协议。但是,使用ESP协议还需要分情况来看
-
如果ESP选择传输模式
-
问题:如果ESP选择传输模式
-
四层封装的时候,里面存在伪头部校验。所谓伪头部就是传输层的协议在进行封装的时候,也需要进行完整性校验,但是,这个完整性校验的时候,还需要包含三层IP头部中的部分数据一起进行校验。这些数据中,就包含了IP地址的信息。在正常的NAT中环境,数据进行NAT转换(转换IP地址或者端口号)数据包中传输层的伪头部校验也会重新计算,但是,在ESP选择传输模式的封装下,因为此时,传输层的内容已经被加密了,所以,NAT转换后也无法修改校验和,所以,导致对方在接受的时候,会出现校验和不匹配的问题,导致通信中断。所以,ESP在传输模式也时无法通过NAT环境了。
-
解决办法:选用ESP隧道模式。
-
在这种环境下,因为添加了新的IP头部,并且,NAT修改的也是新IP头部。这个头部的内容没有进行完整性校验,所以,可以被修改。并且,四层在进行伪头部校验时使用的数据是原始IP头部中的内容,新的IP头部内容变更,也无法影响到伪头部校验的果。所以,ESP隧道模式的封装可以通过NAT环境
-
- ESP和AS协议是否支持NAT转换
-
-
-
-
-
NAT-T ---- NAT穿越技术
-
注意
-
边界NAT设备,开启的是easy-ip或者NAPT技术需要修改端口号,但是由于数据被加密,不能成功修改端口号。NAT-T增加UDP头部。
-
源端口目标端口都可以是4500,但是源端口号可变,目标端口号不可变。
-
-
防火墙Web页面配置IPSec
-
配置页面在网络 --- IPSec --- 新建策略列表
-
新建IPSec策略
-
选择场景:点到点或者点到多点
-
虚拟系统配置
-
基本配置:策略名称、本段接口(数据发出接口)、本段地址(NAT环境接口配置的公网地址)、对端地址、认证方式(预共享密钥,RSA签名和RSA数字信封)、本端ID和对端ID(主模式就选IP地址;野蛮模式就按照要求选择;本端ID和对端ID的类型和值要保持一致)
-
-
待加密的数据流 --- 相当于手工配置的ACL列表
-
高级:IKE参数选取、IPSec参数选取。两端配置保持一致。
-
两端的安全协议放通 --- 指的是放通IKE的报文传输
-
此数据包是设备本身发出的,设备本身所在区域是Local,所以区域选取Local到untrush。并且加上IP限制范围。
-
放通UDP的500/4500
-
-
放通数据传输方面的安全策略
-
不选区域,选取IP地址,匹配详细。并且不加esp服务限制
-
因为PC2发送的数据包可以说HTTP或者FTP的协议,经过IPSec隧道经过esp服务封装,到对端防火墙(此图服务器也属于网关设备),如果数据包是找寻网关,就可以正常通信。但是如果找下层其他设备,由于到网关拆开了esp服务封装,但是由于之前放通的数据安全策略仅限制esp放通,所以此时无法正常通信,防火墙安全策略匹配到最后一条拒绝所有。
-
-
并且最后要确保本地到未知目标区域的esp流量放通。
-
和上一条不一样,本条作用是保证本地的esp数据可以通过。上一条只是保证选取的目标网段可以通过,并不是确保本地到目标区域可以通信。
-
-
此时仍然数据不通。
-
原因是:由于NAT和IPSec隧道是在同一个设备上,NAT和IPSec冲突,如果走NAT,就抓不到感兴趣流,就不能走隧道;走IPSec隧道就不能NAT转换,两者冲突。
-
在防火墙上,NAT是上游配置,而IPSEC隧道是下游配置。所以,NAT的转换会导致数据流量无法进入到IPSEC的隧道中。解决方案:不做NAT转换。
-
-
- 安全策略放通
- 服务器映射500/4500
- 模式的选择
- NAT-T是否开启,默认开启
- 流量引入隧道