一、IPsec
ipsec是iP security的缩写,即IP安全性协议,他是为IP网络提供安全性服务的一个协议的集合,是一种开放标准的框架结构,工作在OSI七层的网络层,它不是一个单独的协议,它可以不使用附加的任何安全行为就可以为用户提供任何高于网络层的TCP/IP应用程序和数据的安全。
1.1 主要提供如下的保护功能:
1) 加密用户数据,实现数据的私密性
2) 验证IP报文的完整性,使其在传输的路上不被非法篡改
3) 防止如重放攻击等行为
4) 即可以确保计算机到计算机的安全,也可以确保两个通信场点(IP子网到子网)的安全
5) 使用网络设备特点的安全性算法和秘钥交换的功能,以加强IP通信的安全性需求。
6) 它是一种VPN的实施方式。
ipsec不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构。该体系结构包括认证头协议(AH).封装安全负载协议(ESP),密钥管理协议(IKE)和用于网络认证及加密的一些算法等。ipsec规定了如何在对等体之间选择安全协议,确定安全算法和秘钥交换,向上提供了访问控制,数据源认证,数据加密等网络安全服务。
1.2 关于IPSEC的传输模式与隧道模式
ipsec的传输模式:一般为OSI传输层,以及更上层提供安全保障。传输模式一般用于主机到主机的IPsec,或者是远程拨号型VPN的ipsec,在传输模式中,原始的IP头部没有得到保护,因为ipsec的头部插在原始IP头部的后面,所以原始的IP头部将始终暴漏在外,而传输层以及更上层的数据可以被传输模式所保护。注意:当使用传输模式的ipsec在穿越非安全的网络时,除了原始的IP地址以外,在数据包中的其他部分都是安全的。
ipsec的隧道模式:它将包括原始IP头部在内的整个数据包都保护起来,它将产生一个新的隧道端点,然后使用这个隧道端点的地址来形成一个新的IP头部,在非安全网络中,只对这个新的IP头部可见,对原始IP头部和数据包都不可见。在这样的网络环境中,就会在路由器VPNA 和VPNB的外部接口产生一个隧道端点,而他们的接口地址正式这个隧道端点的地址。也是形成IPsec隧道模式中的新IP头部。隧道模式一般应用于连接场到场的ipsec的VPN.
1.3 理解VPN的机密性,完整性,认证
<请参考理解加密、认证、DH算法文档>
机密性是数据私密性。
3-1)加密方法:
DES<数据加密标准>:是一种应用很广泛的传统加密算法标准,一种对称式加密算法,DES使用一个56位的秘钥以及8位的奇偶校验位,产生最大64位的分组大小。
3DES<三重数据加密标准>:它相当于是对每个数据块执行三次标准的DES加密算法,产生出现3DES加密算法的原因是,现代化计算机的运算能力越来越强,标准的DES加密的密钥长度变得更容易暴力破解。3des的设计用来提供一种相对增加DES的秘钥长度来避免暴力破解的可能性,他不是一种新型的加密算法,而是对DES的加强与扩展,3DES使用3条56位的密钥对数据执行3次加密,它的应用比DES更安全。
AES<advanced encryption standard 高级加密标准>:它被设计用于替代传统的标准加密算法的标准,AES加密数据块和密钥长度可以是128位,192位,256位中的任意一个。他的安全机制高于DES,3DES.
3-2)数据完整性
它是用于确保被VPN传递的数据,在传输的过程中,没有被篡改,数据完整性本身并不提供数据机密性保障,数据完整性通常使用HASH算法来确保数据在传输过程中的安全性。
简单描述HASH的一个过程
把原始消息+共享安全秘钥放进HASH函数里面生成一个摘要值,然后把这个摘要值附加到原始的消息中,传送给目标,目标将收到的消息加上共享安全秘钥放进HASH函数里生成摘要值,如果生成的摘要值一样,说明数据在传输过程中没有被篡改过,验证就通过了。
首先,HASH是一个不可逆的算法,这就好比把一个完整的水杯摔到地上,虽然地上产生了很多碎片,但是你不可能根据这些碎片重新还原成原始的杯子。在思科的IOS系统中,常使用
3-3)两种HASH算法,HMAC-MD5和HMAC-SHA-1
HMAC-MD5 :使用128位共享安全秘钥。变长消息和128位共享安全秘钥组合在一起运行HMAC-MD5,它将输出一个128位的哈希值。该值被附加在原始消息的后面发往远端。
HASH-SHA-1:使用160位共享安全秘钥。变长消息和160位共享安全秘钥组合一起运行HMAC-SHA-1,它将输出一个160位哈希值。该值被附加在原始消息的后面发往远端,HAMC-SHA-1安全性高于HMAC-MD5.
3-4)数据源认证
是指验证VPN的数据发送源,它由VPN的每个端点来完成,以确保与其通信的对端身份,\值得注意的是数据源的验证是无法单独实现的,它必须依赖于数据完整性验证。**
1.4 IPsec的AH认证头部与ESP封装安全载荷
IPsec是一个标准开放式框架,可用它为IP及上层协议(UDP/TCP)提供安全保障;IPsec协议族通过两个协议提供安全性服务:验证头(AH)和封装安全载荷(ESP);ESP用来保障数据的私密性;AH用来保障数据的完整性;我们可以选择使用AH或者ESP,或者同时使用两者。
AH(Authentication Header):认证头部,它使用IP协议号51,它主要提供数据完整性验证,保护数据回放攻击。AH功能可以保证整个数据报文的完整性,当然那些易发生变化的字段(TTL)除外。AH在传输模式和隧道模式下对IP报文的保护情况如下图所示:无论ipsec处于传输模式或者是隧道模式,AH都可以保证整个数据报文的完整性。
需要注意:此时,前面在描述IPsec的传输模式中说道:因为IPsec的头部插在原始IP头部的后面,所以原始的IP头部始终暴漏在外面,没有得到保护,可是在上面的图中,又说:无论IPsec处于传输模式或者隧道模式,AH可以保证整个数据报文的完整性,这不是自相矛盾吗?注意,前面所提到的原始IP头部将始终暴漏在外,没有得到保护,是指的可见性(或者是私密性),而这里AH指的是数据完整性。
ESP(Encapsulate security payload)封装安全载荷,它使用IP协议号50 ,ESP提供数据机密性保障,另外也可以要求接收方主机使用防重放保护功能,通常ESP使用DES、3DES、AES完成数据加密。ESP可以独立使用,也可以与AH一起使用,但是同时使用ESP与AH并没有特别的优势,因为ESP具备IPSEC所提到的所有功能,包括认证。如果选择了ESP的认证和加密,加密将在认证之前进行,这样做的原因是它可以使接收方主机快速的检测并拒绝重放攻击或者虚假伪造的数据包,在数据解密之前,接收方主机可以对发来的数据包进行认证,这样可以降低被DOS攻击的危险。ESP在传输模式与隧道模式下对IP报文的保护情况如下:
IPSEC的AH是不具备加密功能的,只有ESP才具备。
1.5 关于IPSEC的安全关联
安全关联是IPsec保障数据安全最重要的概念之一,它表示两个IPsec对等体之间的安全策略的协定,它描述了对等方如何使用IPsec来保护网络流量。安全对等体两端的SA必须相同,才能完成协商。这和某单生意的合同,正常情况下,合同总是一式两份,而且两份合同必须相同。如图所示:注意IPsec的安全关联(SA)总是一种单向的行为,但往往通信是双向的过程,所以IPsec将会为一个完整的通信建立两个SA,一个用于通信的进入,一个用于通信的外出。配置IPsec传输集,就是配置IPsec安全关联(SA)的一种体现,当然安全关联还包括了定义感兴趣加密流量。关于IPsec传输集的配置如下:
IPsec传输集的配置:
1 | R1(config)#crypto ipsec transform-set vpnset ah-sha-hmacesp-aes |
1.6 理解internet key exchange(IKE)作用
IKE提高了IPsec的安全性和灵活性,让IPsec的协商更加智能化。说白了就是对IPsec SA实施了二重保护。
IKE提供了IPsec对等体的验证、协商密钥、保护了IPsec SA的协商,可以说是IPsec的第二重安全保障,关于IKE的作用如下:
消除了安全对等体两端把IPsec安全参数手工放入到加密表。
允许为IPsec安全关联(SA)指定一个生存期
允许在IPsec会话期间改变加密密钥
允许IPsec更简便的方式使用PKI架构,例如数字证书的使用
允许对等体的动态验证
1.7 理解IKE的传输集
IKE使用大量的独立的安全参数,来保障协商的安全,但它并不是试图去单独协商每个安全参数,而是将这些不同的安全参数组合成一个集合,这个集合叫IKE传输集,或者叫做IKE的安全策略,这与IPsec的安全关联一样,如果两个对等体设备之间没有相同的安全参数集,那么它的IKE协商将会失败,IKE的传输集有5个重要参数:
IKE的加密算法:常用的加密算法(DES、3DES、AES)
IKE的验证算法:常用的验证算法(MD5、SHA-1)
IKE的密钥:主要用于完成对等体身份验证,其中包括使用预共享密钥、RSA签名(数字证书),Nonce(一次性密码)。在初级IPsecVPN学习阶段,只要学会预共享密钥配置IKE即可。
Diffie-Hellman版本:它是创建VPN最重要的问题之一,交换密钥,它使用DH算法建立只有协商两端才知道的一个共享安全密钥。允许VPN的两端通过非安全的通道共享密钥。思科的设备支持3组Diffie-Hellman,分别是768比特素数的组1;1024比特素数的组2;1536比特素数的组5,素数最大,生成的密钥就越长,安全性越高,素数越大,密钥计算的时间越长。
IKE的生命周期:时间或者比特数。
1 | R1(config)#crypto isakmap policy 1 //指定IKE传输集策略1 |
1.8 简述IPsec的工作过程
第一步:首先是IPsec通信的发送方感知要加密的数据流量,如果满足所定义的加密数据流量的规划就进入IPsec的第二步,该过程将被IPsec配置中的ACL所定义;否则,将使用正常路由的方式来转发数据。
第二步:进入IKE第一阶段的协商,协商的内容包括三方面:第一个内容是交换IKE的基本安全策略集,这个内容被IPsec配置中的crypto isakmp policy 1(或者其他编号)所定义,这个策略编号只在本地有效,协商双方所定义的这个策略集编号不一定必须相同;第二个内容是创建与交换DH密钥,这个内容被IPsec配置中的group 1、2、5、7所定义,其目的是允许VPN的双方在不安全的通信通道上建立一个共享密钥;第三个内容是协商对等体身份验证,使用什么样的方式来验证对等体身份,可以使用PSK(预共享密钥)、RSA(签名)、RSA加密随机数。我们现阶段使用预共享密钥方式,这个内容被IPsec配置中的authentication pre-share所定义。上述的三个内容都属于IKE的第一阶段协商,核心目标是:为IKE第二阶段的协商奠定基础和保护第二阶段的协商。
第三步:进行IKE第二阶段的协商,在这个阶段中主要协商IPsec的安全参数,因为它只产生在IKE第一阶段成功协商完成之后,所以通常把IKE的第二阶段叫做“快速模式”。它在IPsec配置中被crypto IPsec transform-set所定义。
第四步:当完成上述步骤的协商后,就可以安全的发送数据了。IPsec将保护这些会话。
第五步:当需要被保护的数据收发完成后,IPsec完成隧道的终结。
二、IPsec VPN配置
实验拓扑
2.1 配置如下
2.1.1 北京路由器配置
基本路由配置
1 | BJ>en |
IPSec 一阶段配置
1 | BJ(config)#crypto isakmp policy 1 |
IPSec 二阶段配置
1 | BJ(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 |
2.1.2 上海路由器配置
基本路由配置
1 | SH>en |
IPSec 第一阶段配置
1 | SH(config)#crypto isakmp policy 1 |
IPSec 第二阶段配置
1 | SH(config)#access-list 100 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255 |
2.1.3 IPS配置
基本路由配置
1 | ISP>en |
2.2 配置完后验证
2.2.1 ping测试
注意:是在BJ的路由器上
1 | BJ#ping 192.168.2.1 source 192.168.1.1 repeat 10 |
Type escape sequence to abort.
Sending 10, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
.!
Mar 1 00:23:04.699: %CRYPTO-5-SESSION_STATUS: Crypto tunnel is UP . Peer *202.202.2.2:500 Id: 202.202.2.2!!!!!!!!
**Success rate is 90 percent (9/10), round-trip min/avg/max = 28/46/84 ms
2.2.2 显示ISAKMP协商策略的配置结果
1 | BJ#show crypto isakmp policy |
Global IKE policy
Protection suite of priority 1
encryption algorithm: AES - Advanced Encryption Standard (128 bit keys).
hash algorithm: Secure Hash Standard
authentication method: Pre-Shared Key
Diffie-Hellman group: #2 (1024 bit)
lifetime: 86400 seconds, no volume limit
Default protection suite
encryption algorithm: DES - Data Encryption Standard (56 bit keys).
hash algorithm: Secure Hash Standard
authentication method: Rivest-Shamir-Adleman Signature
Diffie-Hellman group: #1 (768 bit)
lifetime: 86400 seconds, no volume limit
2.2.3 查看管理连接SA的状态
1 | BJ#show crypto isakmp sa |
dst src state conn-id slot
202.202.2.2 202.202.1.1 QM_IDLE 1 0BJ#
2.2.4 显示IPSec交换集
1 | BJ#show crypto ipsec transform-set |
Transform set benet: { ah-sha-hmac }
will negotiate = { Tunnel, },
{ esp-aes }
will negotiate = { Tunnel, },BJ#
2.2.5 显示数据连接的生存周期
1 | BJ#show crypto ipsec security-association lifetime |
2.2.6 显示数据连接 BJ SA 的细节信息
两处带颜色的字符能对应,说明IPSec的遂道模式已经配置成功了
1 | BJ#show crypto ipsec sa |
interface: FastEthernet0/0
Crypto map tag: benet-map, local addr. 202.202.1.1protected vrf:
local ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (192.168.2.0/255.255.255.0/0/0)
current_peer: 202.202.2.2:500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9
#pkts decaps: 9, #pkts decrypt: 9, #pkts verify: 9
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 1, #recv errors 0 local crypto endpt.: 202.202.1.1, remote crypto endpt.: 202.202.2.2
path mtu 1500, media mtu 1500
current outbound spi: BAFA21F5 inbound esp sas:
spi: 0x39956AA5(966093477)
transform: esp-aes ,
in use settings ={Tunnel, }
slot: 0, conn id: 2002, flow_id: 1, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4586936/2993)
ike_cookies: 588301E9 AB02EAB0 2B4F077A 64861161
IV size: 16 bytes
replay detection support: Y inbound ah sas:
spi: 0xE7A9547E(3886634110)
transform: ah-sha-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 2000, flow_id: 1, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4586936/2990)
ike_cookies: 588301E9 AB02EAB0 2B4F077A 64861161
replay detection support: Y inbound pcp sas:
outbound esp sas:
spi: 0xBAFA21F5(3136954869)
transform: esp-aes ,
in use settings ={Tunnel, }
slot: 0, conn id: 2003, flow_id: 2, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4586938/2990)
ike_cookies: 588301E9 AB02EAB0 2B4F077A 64861161
IV size: 16 bytes
replay detection support: Y outbound ah sas:
spi: 0xF964999D(4184119709)
transform: ah-sha-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 2001, flow_id: 2, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4586938/2990)
ike_cookies: 588301E9 AB02EAB0 2B4F077A 64861161
replay detection support: Y outbound pcp sas:
BJ#
再查看SH SA的细节信息,两处带颜色的字符能对应
1 | SH#show crypto ipsec sa |
interface: FastEthernet0/0
Crypto map tag: benet-map, local addr. 202.202.2.2protected vrf:
local ident (addr/mask/prot/port): (192.168.2.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
current_peer: 202.202.1.1:500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9
#pkts decaps: 9, #pkts decrypt: 9, #pkts verify: 9
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0 local crypto endpt.: 202.202.2.2, remote crypto endpt.: 202.202.1.1
path mtu 1500, media mtu 1500
current outbound spi: 39956AA5 inbound esp sas:
spi: 0xBAFA21F5(3136954869)
transform: esp-aes ,
in use settings ={Tunnel, }
slot: 0, conn id: 2002, flow_id: 1, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4384446/2943)
ike_cookies: 2B4F077A 64861161 588301E9 AB02EAB0
IV size: 16 bytes
replay detection support: Y inbound ah sas:
spi: 0xF964999D(4184119709)
transform: ah-sha-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 2000, flow_id: 1, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4384446/2941)
ike_cookies: 2B4F077A 64861161 588301E9 AB02EAB0
replay detection support: Y inbound pcp sas:
outbound esp sas:
spi: 0x39956AA5(966093477)
transform: esp-aes ,
in use settings ={Tunnel, }
slot: 0, conn id: 2003, flow_id: 2, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4384448/2941)
ike_cookies: 2B4F077A 64861161 588301E9 AB02EAB0
IV size: 16 bytes
replay detection support: Y outbound ah sas:
spi: 0xE7A9547E(3886634110)
transform: ah-sha-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 2001, flow_id: 2, crypto map: benet-map
crypto engine type: Software, engine_id: 1
sa timing: remaining key lifetime (k/sec): (4384448/2940)
ike_cookies: 2B4F077A 64861161 588301E9 AB02EAB0
replay detection support: Y outbound pcp sas:
SH#
2.2.7 在ISP节点上抓包截图
运营商只能看到202.202.1.1到202.202.2.2通信过程,因为我们使用的是IPsec VPN隧道模式,原始的包被封装到了ESP中,事实上通信点是192.168.1.1到192.168.2.1