IPsec VPN


  • MPLS VPN

    • 优点
      • 作为客户部署简单
      • 带宽和延迟得到保障
      • 跨地域连接也能保障稳定性
      • 灵活扩展
    • 缺点
      • 策略需要与运营商协商
      • 费用较为昂贵
  • IPsec VPN

    • 优点
      • 比较经济
      • 灵活扩展
      • 数据的加密安全
    • 缺点
      • 稳定性依赖于宽带服务商
      • 作为客户需要专业技术人员部署

VPN常见类别

  • 站点到站点VPN
    • 用于不同的站点之间的稳定连接
    • 常见的有:IPsec VPN、MPLS VPN
  • 远程访问VPN
    • 常见于企业出差人员,或者连锁门店建立的临时连接
    • 常见的有:SSL VPN

GRE

GRE是一项由Cisco公司开发的轻量级隧道协议,将各种网络协议(IP协议与非IP协议)封装到IP隧道类,并通过IP互联网络在路由器间创建一个虚拟的点对点隧道连接。

配置运营商网络

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

IPsec理论

基本原理介绍

IPSec是一项标准的安全技术,它是通过在数据包中插入一个预定义头部的方式,来保障网络层数据的安全。

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有如下两个保障:

  • 完整性
  • 源认证
  1. 管理员将密码配置在接口上
  2. 路由更新条目和密码放在一起,计算一个散列值
  3. 将更新条目和散列值都发送给对方
  1. 将收到的路由条目和密码放在一起计算出散列值2
  2. 将散列值2和更新中的散列值1进行比较
  3. 如果相等就接收更新,如果不一样,就丢弃

加密算法

把明文数据转换为密文数据,并且在拥有解密能力的情况下,可以将数据解密回来。

如果第三方截获数据,也无法获知内容。

加密算法可以分为如下两类:

  • 对称加密算法
  • 非对称加密算法

对称加密算法

加密和解密使用同样的密钥

优点:

  • 速度快
    • 加密和解密都可以秒完成
  • 安全
    • 在不知道密钥的情况下无法得知密文内容
    • 密钥在足够长的情况下,破解的代价很大
    • 没有绝对的安全,一般衡量加密安全性需要考虑到数据的价值,以下两种情况认为是安全的
      • 如果破解这个加密所需要花费的代价远远超过数据本身
      • 如果破解这个加密所需要花费的时间超过数据的时效性
  • 紧凑
    • 数据加密前后大小没有太大的差距

缺点:

  • 密钥容易在共享的时候被窃取
  • 随着参与者的增加,密钥数量急剧膨胀,密钥的管理和存储是个问题
  • 不支持数字签名和不可否认

主流对称加密算法

  • DES
  • 3DES
  • AES
  • RC4

非对称加密算法

  • 非对称加密算法往往会一次生成一对密钥,密钥分为公钥和私钥。

  • 公钥一般会公开,上传到公共服务器上,任何人都可以访问

  • 私钥一般不会出现在任何互联网上,只能私人保存
  • 公钥加密的数据只能私钥解开,私钥加密的数据公钥可以解开

数字签名

  • 将一些个人的信息使用私钥进行加密,然后附加在邮件或者网站等内容之上
  • 如果想验证这个邮件或者网站是不是合法的来源,直接使用对应的公钥进行解密,如果解得开,说明这个信息是合法的
  • 数字签名可以验证数据的合法来源,并且防止否认。

常见非对称加密算法

  • RSA
    • 常见于数字签名
    • 网站证书
  • DH
    • 常见于IPSec中交换密钥
  • ECC
    • 椭圆曲线算法

优点:

  • 安全
  • 私钥不担心泄漏,因为无需共享给任何人
  • 密钥数量和参与者数量相同
  • 在交换公钥之前不用预先建立信任关系,公钥直接上传PKI/CA,对称加密需要事先共享密钥。
  • 支持数字签名和不可否认

缺点:

  • 加密速度很慢
  • 密文会变长

对称加密算法比非对称加密算法快大约1500倍(参考自: http://vearne.cc/archives/164 )

所以在IPSec中,非对称加密算法一般是用来加密对称加密算法的密钥

封装协议

IPSec对数据需要重新的打包封装,也就是在IPsec理论讲到的IPsec头部以及后续内容封装方式。

ESP协议

ESP(Encapsulation Security Payload)的IP协议号为50,ESP能够为数据提供:

  • 私密性
  • 完整性
  • 源认证

是现在主流的IPsec封装协议

报文结构:

上面这个报文是不携带加密的干扰因素的报文结构,也就是不加密,如果ESP要加密,需要提供随机生成的初始化向量。

AH协议

AH协议由于没有提供数据加密功能,所以没有被广泛采用。

封装模式

封装模式的不同不影响加密,只是影响数据的连通性。

传输模式(Transport mode)

不伪装原始的IP报头,比如上面做的GRE隧道实验,就是将原始的IP头部隐藏了,传输模式不隐藏。

隧道模式(Tunnel mode)

伪装原始的IP报头,但是在现实的应用中,我们一般会使用其他的隧道技术来实现IP报头的包装,所以隧道模式不常用。

IKE(互联网密钥交换协议)

IKE是IPsec在建立安全连接的时候主要使用的协议,IKE主要完成如下任务:

  • 对建立IPsec的双方进行认证
  • 通过密钥交换,产生用于加密和HMAC的随机密钥
  • 协商协议参数
    • 加密协议
    • 散列函数
    • 封装协议
    • 封装模式
    • 密钥有效期

通过IKE之后,双方就建立了安全关联(SA),SA有两种类型:

  • IKE SA
    • 维护IKE协议运行安全
  • IPsec SA
    • 维护用户流量的安全

IKE协议是由下面三个协议组成:

由于ISAKMP是真正影响数据流量加密的协议,所以有时候会把IKE与ISAKMP这两个术语互换使用。

IKE的两个阶段与三个模式

第一阶段协商的主要目的就是对建立IPsec的双方进行认证,以确保只有合法的对等体(peer)才能够建立IPsec VPN。第一阶段得到的结果就是IKE SA。

第二阶段协商的主要目的就是根据需要加密的实际流量,来协商保护这些流量的策略,协商结果就是IPsec SA。

主模式 1-2包交换

1-2包交换的主要目的就是确认收到的ISAKMP数据包时候源自合法的对等体。

IKE策略包含如下5个内容:

  • 加密策略
  • 散列函数
  • DH组
  • 认证方式
  • 密钥有效期

这5个策略不是为了最终加密用户数据用的,而是为了保障接下来协商过程的安全而提供的。

双方可以设置多个不同的策略,只要有一个策略可以完美对应上,就可以进行。

crypto isakmp policy 10
 encr 3des
 hash md5
 authentication pre-share
 group 2
 lifetime 1800

主模式 3-4包交换

由于上面两个包已经协商应该使用什么协议,在上面的策略中其他都确定,但是这个预共享的密码并没有提供。

为了安全,这个密码一般是由DH算法产生的,并且通过DH与对方碰撞,让对方猜出密码是什么,让中途窃听的猜不出来。

Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法

在g和p都很大的情况下,已知a求A会很快得到结果,但是已知A求a几乎无法完成。这个就是单向函数的特点:一个方向的运算很快很容易,另一个方向几乎不能完成。

通过上图的计算,最终Alice和Bob都得到了K作为对称加密的密码,而如果第三方中途窃取g,p,B是无法算出K的。

主模式 5-6包交换

本次交换用于验证密码的正确,并且确认双方的流量源目的地址。

第一阶段总结

第一阶段主要任务就是相互认证,第一阶段完成,不仅表示收发双方认证通过,而且还会建议一个双向的ISAKMP/IKE安全关联,这个安全关联维护了处理IKE流量的相关策略。

快速模式 1-3包交换

快速模式1-3包交换是为了协商数据流量的安全策略,安全策略包含如下内容:

  • 感兴趣流量(需要加密的流量)
  • 加密策略
  • 散列函数
  • 封装协议
  • 封装模式
  • 密钥有效期
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


文章作者: AaronXu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AaronXu !
评论
  目录