MPLS VPN
- 优点
- 作为客户部署简单
- 带宽和延迟得到保障
- 跨地域连接也能保障稳定性
- 灵活扩展
- 缺点
- 策略需要与运营商协商
- 费用较为昂贵
- 优点
IPsec VPN
- 优点
- 比较经济
- 灵活扩展
- 数据的加密安全
- 缺点
- 稳定性依赖于宽带服务商
- 作为客户需要专业技术人员部署
- 优点
VPN常见类别
- 站点到站点VPN
- 用于不同的站点之间的稳定连接
- 常见的有:IPsec VPN、MPLS VPN
- 远程访问VPN
- 常见于企业出差人员,或者连锁门店建立的临时连接
- 常见的有:SSL VPN
GRE
GRE是一项由Cisco公司开发的轻量级隧道协议,将各种网络协议(IP协议与非IP协议)封装到IP隧道类,并通过IP互联网络在路由器间创建一个虚拟的点对点隧道连接。
![TIM图片20200502093342](/2020/05/02/ipsec-vpn/TIM%E5%9B%BE%E7%89%8720200502093342.png)
![image-20200502093412267](/2020/05/02/ipsec-vpn/image-20200502093412267.png)
配置运营商网络
R2
interface Loopback0
ip address 2.2.2.2 255.255.255.255
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.12.2 255.255.255.0
!
interface Ethernet0/1
ip address 192.168.23.2 255.255.255.0
ip ospf 1 area 0
router ospf 1
redistribute connected subnets
========================
R3
interface Loopback0
ip address 3.3.3.3 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.23.3 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/1
ip address 192.168.34.3 255.255.255.0
ip ospf 1 area 0
=========================
R4
interface Loopback0
ip address 4.4.4.4 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.34.4 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/1
ip address 192.168.45.4 255.255.255.0
ip ospf 1 area 0
=========================
R5
interface Loopback0
ip address 5.5.5.5 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.45.5 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/1
ip address 192.168.56.5 255.255.255.0
router ospf 1
redistribute connected subnets
配置客户网络
R1
interface Loopback0
ip address 1.1.1.1 255.255.255.0
ip ospf 1 area 0
!
interface Tunnel0
ip address 172.16.16.1 255.255.255.0
ip ospf 1 area 0
tunnel source Ethernet0/0
tunnel destination 192.168.56.6
!
interface Ethernet0/0
ip address 192.168.12.1 255.255.255.0
==================
R6
interface Loopback0
ip address 6.6.6.6 255.255.255.0
ip ospf 1 area 0
!
interface Tunnel0
ip address 172.16.16.6 255.255.255.0
ip ospf 1 area 0
tunnel source Ethernet0/0
tunnel destination 192.168.12.1
!
interface Ethernet0/0
ip address 192.168.56.6 255.255.255.0
检查R1和R6的邻居状态,以及连通性
R1#sh ip ospf nei
Neighbor ID Pri State Dead Time Address Interface
6.6.6.6 0 FULL/ - 00:00:31 172.16.16.6 Tunnel0
R1#sh ip route ospf
6.0.0.0/32 is subnetted, 1 subnets
O 6.6.6.6 [110/1001] via 172.16.16.6, 00:02:20, Tunnel0
R1#ping 6.6.6.6
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
抓包,发现隧道是做到了,但是没有IPsec(加密),可以看到在两个IPv4报头中间有一层GRE,但是GRE内部的数据全部都能看到,比如telnet输入密码,第一个字母是c
![image-20200502095104954](/2020/05/02/ipsec-vpn/image-20200502095104954.png)
IPsec理论
基本原理介绍
IPSec是一项标准的安全技术,它是通过在数据包中插入一个预定义头部的方式,来保障网络层数据的安全。
![image-20200502100703452](/2020/05/02/ipsec-vpn/image-20200502100703452.png)
IPSec提供三大防护
- 私密性(Confidentiality)
- 对数据进行加密
- 即使第三方截获数据,也不能恢复为明文
- 完整性(Integrity)
- 确保数据传输过程中不会被篡改(增删改)
- 源认证(Authenticity)
- 确保是合法的源发送了此数据
IPSec框架
传统的一些安全技术,比如https、wep、wpa等,往往会采用某种固定的加密和散列函数。如果某天这个加密算法爆出严重漏洞,那么使用这个算法的安全技术也就要遭到淘汰。
IPSec没有定义具体的加密和散列函数,只是提供了一个框架性结构,IPSec会话所使用到的具体的算法都是协商得到的,一旦某个算法有漏洞,可以重新协商。
一般使用IPSec都是尽量使用最新最安全的算法,那么IPSec安全性几乎是做到与时俱进。
IPSec框架举例:
- 散列函数
- MD5
- SHA-1
- 加密算法
- DES
- 3DES
- AES
- 封装协议
- AH
- ESP
- 封装模式
- 传输模式
- 隧道模式
- 密钥有效期
- 3600秒
- 1800秒
- 等等
- 等等
散列函数
散列函数也叫做Hash函数,主流的算法有md5和sha1,一般可以用散列函数计算一串数据的散列值,散列值和这串数据对应,就像你的指纹对应你的人,所以散列值一般称为数据指纹。
散列函数有以下4个特点:
- 固定大小
- 无论数据有多大,最终计算的散列值大小是固定的
- 雪崩效应
- 即使是一个很大的数据,你修改了微不足道的一小部分,都会导致散列值完全不一样
- 单向
- 只可能从原始数据计算得到散列值,不可能从散列值恢复哪怕一个bit的原始数据
- 冲突避免
- 几乎不能够找到另外一个数据和当前数据的散列值完全相同
- 散列值可以确保数据的唯一性
HMAC
在计算散列值的过程中,把key混入计算过程中。
在传输数据的过程中并不携带密码,也无法推算出密码,所以无法得知密码。
如果对数据进行修改,那么接收方可以通过计算发现数据不对。
HMAC有如下两个保障:
- 完整性
- 源认证
![image-20200502105708598](/2020/05/02/ipsec-vpn/image-20200502105708598.png)
- 管理员将密码配置在接口上
- 路由更新条目和密码放在一起,计算一个散列值
- 将更新条目和散列值都发送给对方
![image-20200502105920811](/2020/05/02/ipsec-vpn/image-20200502105920811.png)
- 将收到的路由条目和密码放在一起计算出散列值2
- 将散列值2和更新中的散列值1进行比较
- 如果相等就接收更新,如果不一样,就丢弃
加密算法
把明文数据转换为密文数据,并且在拥有解密能力的情况下,可以将数据解密回来。
如果第三方截获数据,也无法获知内容。
加密算法可以分为如下两类:
- 对称加密算法
- 非对称加密算法
对称加密算法
![image-20200502110612017](/2020/05/02/ipsec-vpn/image-20200502110612017.png)
加密和解密使用同样的密钥
![image-20200502110700893](/2020/05/02/ipsec-vpn/image-20200502110700893.png)
优点:
- 速度快
- 加密和解密都可以秒完成
- 安全
- 在不知道密钥的情况下无法得知密文内容
- 密钥在足够长的情况下,破解的代价很大
- 没有绝对的安全,一般衡量加密安全性需要考虑到数据的价值,以下两种情况认为是安全的
- 如果破解这个加密所需要花费的代价远远超过数据本身
- 如果破解这个加密所需要花费的时间超过数据的时效性
- 紧凑
- 数据加密前后大小没有太大的差距
缺点:
- 密钥容易在共享的时候被窃取
- 随着参与者的增加,密钥数量急剧膨胀,密钥的管理和存储是个问题
- 不支持数字签名和不可否认
主流对称加密算法
- DES
- 3DES
- AES
- RC4
非对称加密算法
![image-20200502111844313](/2020/05/02/ipsec-vpn/image-20200502111844313.png)
非对称加密算法往往会一次生成一对密钥,密钥分为公钥和私钥。
公钥一般会公开,上传到公共服务器上,任何人都可以访问
私钥一般不会出现在任何互联网上,只能私人保存
公钥加密的数据只能私钥解开,私钥加密的数据只能公钥解开
数字签名
- 将一些个人的信息使用私钥进行加密,然后附加在邮件或者网站等内容之上
- 如果想验证这个邮件或者网站是不是合法的来源,直接使用对应的公钥进行解密,如果解得开,说明这个信息是合法的
- 数字签名可以验证数据的合法来源,并且防止否认。
常见非对称加密算法
- RSA
- 常见于数字签名
- 网站证书
- DH
- 常见于IPSec中交换密钥
- ECC
- 椭圆曲线算法
优点:
- 安全
- 私钥不担心泄漏,因为无需共享给任何人
- 密钥数量和参与者数量相同
- 在交换公钥之前不用预先建立信任关系,公钥直接上传PKI/CA,对称加密需要事先共享密钥。
- 支持数字签名和不可否认
缺点:
- 加密速度很慢
- 密文会变长
对称加密算法比非对称加密算法快大约1500倍(参考自: http://vearne.cc/archives/164 )
所以在IPSec中,非对称加密算法一般是用来加密对称加密算法的密钥
![image-20200502113619079](/2020/05/02/ipsec-vpn/image-20200502113619079.png)
![image-20200502113704337](/2020/05/02/ipsec-vpn/image-20200502113704337.png)
封装协议
IPSec对数据需要重新的打包封装,也就是在IPsec理论讲到的IPsec头部以及后续内容封装方式。
ESP协议
ESP(Encapsulation Security Payload)的IP协议号为50,ESP能够为数据提供:
- 私密性
- 完整性
- 源认证
是现在主流的IPsec封装协议
报文结构:
![image-20200502133354448](/2020/05/02/ipsec-vpn/image-20200502133354448.png)
上面这个报文是不携带加密的干扰因素的报文结构,也就是不加密,如果ESP要加密,需要提供随机生成的初始化向量。
![image-20200502134258973](/2020/05/02/ipsec-vpn/image-20200502134258973.png)
AH协议
AH协议由于没有提供数据加密功能,所以没有被广泛采用。
![image-20200502134353405](/2020/05/02/ipsec-vpn/image-20200502134353405.png)
封装模式
封装模式的不同不影响加密,只是影响数据的连通性。
传输模式(Transport mode)
不伪装原始的IP报头,比如上面做的GRE隧道实验,就是将原始的IP头部隐藏了,传输模式不隐藏。
![image-20200502134623965](/2020/05/02/ipsec-vpn/image-20200502134623965.png)
隧道模式(Tunnel mode)
伪装原始的IP报头,但是在现实的应用中,我们一般会使用其他的隧道技术来实现IP报头的包装,所以隧道模式不常用。
![image-20200502134651462](/2020/05/02/ipsec-vpn/image-20200502134651462.png)
IKE(互联网密钥交换协议)
IKE是IPsec在建立安全连接的时候主要使用的协议,IKE主要完成如下任务:
- 对建立IPsec的双方进行认证
- 通过密钥交换,产生用于加密和HMAC的随机密钥
- 协商协议参数
- 加密协议
- 散列函数
- 封装协议
- 封装模式
- 密钥有效期
通过IKE之后,双方就建立了安全关联(SA),SA有两种类型:
- IKE SA
- 维护IKE协议运行安全
- IPsec SA
- 维护用户流量的安全
IKE协议是由下面三个协议组成:
![image-20200502135400632](/2020/05/02/ipsec-vpn/image-20200502135400632.png)
由于ISAKMP是真正影响数据流量加密的协议,所以有时候会把IKE与ISAKMP这两个术语互换使用。
IKE的两个阶段与三个模式
![image-20200502135616215](/2020/05/02/ipsec-vpn/image-20200502135616215.png)
第一阶段协商的主要目的就是对建立IPsec的双方进行认证,以确保只有合法的对等体(peer)才能够建立IPsec VPN。第一阶段得到的结果就是IKE SA。
第二阶段协商的主要目的就是根据需要加密的实际流量,来协商保护这些流量的策略,协商结果就是IPsec SA。
主模式 1-2包交换
![image-20200502140327551](/2020/05/02/ipsec-vpn/image-20200502140327551.png)
1-2包交换的主要目的就是确认收到的ISAKMP数据包时候源自合法的对等体。
IKE策略包含如下5个内容:
- 加密策略
- 散列函数
- DH组
- 认证方式
- 密钥有效期
这5个策略不是为了最终加密用户数据用的,而是为了保障接下来协商过程的安全而提供的。
![image-20200502140600765](/2020/05/02/ipsec-vpn/image-20200502140600765.png)
双方可以设置多个不同的策略,只要有一个策略可以完美对应上,就可以进行。
crypto isakmp policy 10
encr 3des
hash md5
authentication pre-share
group 2
lifetime 1800
主模式 3-4包交换
![image-20200502141453325](/2020/05/02/ipsec-vpn/image-20200502141453325.png)
由于上面两个包已经协商应该使用什么协议,在上面的策略中其他都确定,但是这个预共享的密码并没有提供。
为了安全,这个密码一般是由DH算法产生的,并且通过DH与对方碰撞,让对方猜出密码是什么,让中途窃听的猜不出来。
Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法
![image-20200502141826875](/2020/05/02/ipsec-vpn/image-20200502141826875.png)
在g和p都很大的情况下,已知a求A会很快得到结果,但是已知A求a几乎无法完成。这个就是单向函数的特点:一个方向的运算很快很容易,另一个方向几乎不能完成。
通过上图的计算,最终Alice和Bob都得到了K作为对称加密的密码,而如果第三方中途窃取g,p,B是无法算出K的。
主模式 5-6包交换
![image-20200502142708910](/2020/05/02/ipsec-vpn/image-20200502142708910.png)
本次交换用于验证密码的正确,并且确认双方的流量源目的地址。
第一阶段总结
第一阶段主要任务就是相互认证,第一阶段完成,不仅表示收发双方认证通过,而且还会建议一个双向的ISAKMP/IKE安全关联,这个安全关联维护了处理IKE流量的相关策略。
快速模式 1-3包交换
![image-20200502144142862](/2020/05/02/ipsec-vpn/image-20200502144142862.png)
快速模式1-3包交换是为了协商数据流量的安全策略,安全策略包含如下内容:
- 感兴趣流量(需要加密的流量)
- 加密策略
- 散列函数
- 封装协议
- 封装模式
- 密钥有效期
![image-20200502144458791](/2020/05/02/ipsec-vpn/image-20200502144458791.png)
crypto isakmp key cisco address 0.0.0.0
crypto ipsec transform-set cisco esp-aes esp-md5-hmac
mode transport
crypto ipsec profile cisco
set transform-set cisco
set pfs group1
interface Tunnel0
tunnel protection ipsec profile cisco
在GRE隧道上调用IPsec进行保护,就完成了IPsec Over GRE
R1#ping 6.6.6.6
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 5/5/6 ms
查看第一阶段的建立状态
R1#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst src state conn-id status
192.168.56.6 192.168.12.1 QM_IDLE 1002 ACTIVE
192.168.12.1 192.168.56.6 QM_IDLE 1001 ACTIVE
IPv6 Crypto ISAKMP SA
查看第二阶段的建立状态
R1#sh crypto ipsec sa
interface: Tunnel0
Crypto map tag: Tunnel0-head-0, local addr 192.168.12.1
protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.12.1/255.255.255.255/47/0)
remote ident (addr/mask/prot/port): (192.168.56.6/255.255.255.255/47/0)
current_peer 192.168.56.6 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 64, #pkts encrypt: 64, #pkts digest: 64
#pkts decaps: 59, #pkts decrypt: 59, #pkts verify: 59
#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.: 192.168.12.1, remote crypto endpt.: 192.168.56.6
plaintext mtu 1458, path mtu 1500, ip mtu 1500, ip mtu idb Ethernet0/0
current outbound spi: 0xC976B99E(3380001182)
PFS (Y/N): Y, DH group: group1
inbound esp sas:
spi: 0x4FE3C503(1340327171)
transform: esp-aes esp-md5-hmac ,
in use settings ={Transport, }
conn id: 3, flow_id: SW:3, sibling_flags 80004000, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4343070/3389)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE(ACTIVE)
inbound ah sas:
inbound pcp sas:
outbound esp sas:
spi: 0xC976B99E(3380001182)
transform: esp-aes esp-md5-hmac ,
in use settings ={Transport, }
conn id: 4, flow_id: SW:4, sibling_flags 80004000, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4343069/3389)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE(ACTIVE)
outbound ah sas:
outbound pcp sas:
查看IPsec VPN的摘要
R1#show crypto engine connections active
Crypto Engine Connections
ID Type Algorithm Encrypt Decrypt LastSeqN IP-Address
3 IPsec AES+MD5 0 57 57 192.168.12.1
4 IPsec AES+MD5 62 0 0 192.168.12.1
1001 IKE MD5+3DES 0 0 0 192.168.12.1
1002 IKE MD5+3DES 0 0 0 192.168.12.1
IPsec VPN魔改
各个厂商都自己对IPsec VPN进行修改的操作:
Cisco有DMVPN
- 可以利用自家的GRE隧道建立点到多点的VPN拓扑
- 并且只用IPsec进行加密
深信服是easyconnect