HCIE-IPSec专题(2020.07.31,第2专题)

加密学原理

  1. 信息安全的目标:数据私密性、数据完整性、发送源认证、不可否认性
    1. 私密性:保证机密信息在传输、存储和使用过程中不被未授权的第三方进行窃听,或窃听者无法了解信息的真正含义
    2. 完整性:确保收到的数据和对方所发出的信息完全一样,防止数据在传输或存储过程中被非法篡改
    3. 源认证:对信息的真实来源进行判断,确认信息真实的发送者和接收者,并能对伪造来源的信息予以鉴别
    4. 不可否认性:防止通信双方中的某一方事后否认其行为,包括:发送者不能否认信息的发送、接收方不能否认信息的接受
  2. 加密算法分类
    1. 对称式密钥算法:相同的密钥进行加解密,例如DES、3DES、AES、RC4。密钥长度一般为40~256bit。特点:速度非常快;使用简单的数据操作,很容易实现硬件加速;用于大块数据的加密;密钥管理是严重的问题
      1. DES:数据加密标准;广泛使用的对称密钥算法;被IBM开发于1975年;固定长度为56bit;算法非常好,并没有任何漏洞,仅仅因为密钥长度太短,易受到暴力破解攻击。DES块加密的两种模式:电子密码本,加密块链接(思科IPSec VPN只支持这种模式)
      2. 3DES:密钥长度放大3倍,长度168bit;暴力破解几乎不能实现;基于一个很好的算法DES
      3. AES:高级加密标准,又称Rijndael加密算法,AES在软件及硬件上都能快速的加解密,变长密钥和块长度,广泛应用于对无线和语音的加密
      4. RC4:流加密算法,软件运行效率非常高,广泛用于SSL加密
    2. 非对称式密钥算法:不同的密钥进行加解密,例如RSA、DH、ECC。公共密钥系统,密钥长度一般在512~2048bit,因为和对称密钥算法的数据理论有本质的不同,所以密钥长度没有可比性。特点:与对称密钥算法相比非常慢,基于已有的数据难题,能够实现简单的密钥管理,只能加密很小的数据,两大用途为签名和密钥交换
      1. RSA:公共密钥加密系统,基于大素数因式分解的数学难题,不可能从公钥推导出私钥,一个密钥加密,另一个密钥解密,这些密钥能够长时间的保障安全性。仅仅用于如下两种服务:加密密钥,实现密钥交换;加密散列,完成数字签名,实现源认证和不可否认性
  3. 哈希算法
    1. 四大特点:计算结果固定长度、雪崩效应、单向运算、冲突避免
    2. 主流的散列算法有MD5和SHA-1。通过散列函数计算得到的结果叫做散列值(数据指纹)
    3. 哈希算法的主要用途:认证、使用数字签名保障数据的完整性。哈希算法解决数据完整性问题,HMAC(哈希消息认证码)解决了完整性基础之上的源认证,特别主要保护HAMC的预共享密钥。
  4. 数字签名和数字证书
    数字签名能够帮我们实现两个功能:数据完整性验证;源认证
    数字证书技术,用于解决谁是公钥持有者的问题

总结:
数据的私密性:对称加密;数据的完整性:哈希;数据来源的认证:HMAC;数据收发的不可否认性:数据指纹/数字证书
思科设备数据处理流程

IPSec基本理论

IPSec框架

IPSec框架

组成

ESP(负载安全封装)协议

  1. IP协议号50,能够为数据提供私密性、完整性和源认证,同时可抵御防重放攻击(反复发送相同的报文,接收方解密消耗系统资源而导致的DOS攻击),不对原始IP头部进行安全防护。
  2. ESP包结构
    ESP包结构
    • SPI:安全参数索引,是确认单方向IPSec SA的标识
    • SA:安全关联,可以理解为定义了需要加密的数据的处理方式。SA是SADB的一个条目,它包含双方关于IKE和IPSec已经协商完毕的安全信息。以下两种类型的SA都由IKE协议协商产生:
      • IKE or ISAKMP SA:双向的;决定了IKE协议处理相关细节
      • IPSec SA:单向的;与封装协议相关;决定了具体加密流量的处理方式
    • SADB:安全关联数据库
    • Sequence number:用来标识一个数据包。接收方通过序列号来防止重放攻击,接收方收到序列号为x的ESP包,如果再次收到序列号为x的报文则视为重放攻击
    • IV字段:和CBC块加密方式有关,每个数据包需要使用CBC加密的数据生成一个随机值,用于对数据进行扰乱,该随机值即为IV字段
    • Next Header:如果是隧道模式,下一个头部一定是IP
    • Authentication:ESP对ESP头部到ESP尾部所有数据都进行验证,即做HMAC的散列计算,得到的值会放到认证数据部分

认证头(AH)协议

  1. IP协议号51,数据不能加密(第一个问题
  2. AH包结构
    AH包结构
  3. AH保护的IP头部字段:
    AH保护的IP头部字段
    因为IP地址被认为是需要被认证的,所以如果IPSec VPN使用AH封装,就不能穿越NAT(第二个问题

Internet密钥交换(IKE)协议

IKE负责建立和维护IKE SAs和IPSec SAs。功能主要体现在如下几个方面:

  • 对双方进行认证
  • 交换公共密钥,产生密钥资源,管理密钥
  • 协商协议参数(封装、加密、认证等)

IKE的三个组成部分

IKE是一个混合协议:

  • SKEME:实现公钥加密认证的机制。定义如何通过公共密钥技术(DH算法)实现密钥交换
  • Oakley:基于到达两个对等体间的加密密钥的机制。提供了IPSec对各种技术的支持,例如对新的加密与散列技术
  • ISAKMP:定义了消息交换的体系结构,包括两个IPSec对等体间分组形式和状态转换(定义封装格式和协商包交换的方式

IKE和ISAKMP的区别

配置IPSec VPN的时候主要配置的是ISAKMP,所以常常认为IKE和ISAKMP是相同的。由于SKEME的存在,IKE能够决定密钥交换的方式,但ISAKMP只能够为密钥交换交换信息,但是不能决定密钥交换如何实现。

IKE的3个模式和两个阶段

IKE的3个模式和两个阶段
主模式(第一阶段)

主模式
信息被封装在UDP包中,目的端口为UDP/500
6个报文:

  1. 发起方提供加密和验证算法
  2. 响应方回应接收的提案
  3. 发起方的DH公共值和随机数
  4. 响应方的DH公共值和随机数
  5. 发起方的签名、个人信息、密钥
  6. 响应方的签名、个人信息、密钥
    1-2协商示意图
    DH算法示意图
    总结
  7. 相互认证
    1. 1-2个包协商的认证、加密和验证方式都是为5-6包认证服务的
    2. 3-4个包DH交换计算出来的密钥也是为加密和验证(HMAC)5-6包而提前准备的
  8. 建立IKE/ISAKMP SA(双向)
快速模式(第二阶段)

快速模式
3个报文:

  1. HASH值、SA提案、IPSec转换集、密钥材料和感兴趣流
  2. 相应方的HASH值、接受的SA提案、响应方的SPI、密钥
  3. HASH用于确认隧道建立
    总结
  4. 协商IPSec策略(处理感兴趣流)
  5. 建立IPSec SA
    1. 单向
    2. 协议相关

工作模式

通信点:收发数据节点
加解密点:负责加解密的节点

传输模式

传输模式只加密IP负载,适合于通信点和加解密点位于相同的节点上,即不加密也能正常通信的情况下使用。

隧道模式(lan to lan)

适合于通信点和加解密点位于不同的节点上,即双发无法通信,经过IPSec隧道之后可以通信了。
隧道模式示意图
隧道模式实例分析

IPSec的两个数据库

为了实现IPSec的互操作性,IPSec模型描述了两个数据库

  1. SPD 安全策略数据库。决定了什么流量将接受IPSec处理
  2. SADB 安全关联数据库。维护每一个SA(安全关联)包含的参数,本质为ACL。
    在SADB里面的每一个条目决定了一个特定SA的参数,当一个IPSec SA被创建,SADB更新所有关于这个SA的参数。
    当一个inbound IPSec数据包抵达,SADB基于外层IP头部的目的地址、SPI和IPSec封装协议(ESP/AH)检索数据库以获得相应的SA,然后用这个SA的相关参数处理这个inbound IPSec数据包。
    对于outbound IPSec数据包处理的相关参数,是由SPD相关联的SA来获取的。
    包含9大部分:Sequence number、Sequence number overflow、Anti-replay window、SA lifetime、Modes、AH authentication algorithm、ESP authentication algorithm、ESP encryption algorithm、Path MTU
    SPD和SADB示意图
    SPD和SADB示意图

使用SVTI实现站点间通信

SVTI:静态虚拟隧道接口。
相比加密GRE隧道流量,节省了GRE头部所占的MTU。

GRE over IPSec 与SVTI的区别

模式 使用何种方式 原理 优点
GRE over IPSec 传输模式 GRE先创建隧道,然后IPSec保护创建的隧道 可以运行动态路由协议
SVTI 使用IPSec ipv4隧道模式 直接使用IPSec来创建一个VTI隧道接口 可以运行动态路由协议,比GRE over IPSec少4字节的GRE头部

VPN触发过程(包处理流程)

  1. 数据包进入VPN设备,检查远端通信点的路由,路由引导流量出适当的接口
  2. 包在出接口过程中撞击上MAP
  3. 流量匹配上MAP的ACL(感兴趣流),触发加密
  4. 发起和PEER的IKE协商,VPN设备检查去往PEER(远端加密点)的路由
    包处理流程

动态VPN(DS VPN,动态智能)

特点

  1. 相比较传统的静态L2L VPN,最显著的特点就是资源按需消耗
  2. 静态隧道+动态隧道的方式,实现全互联的连通性的架构
  3. 分支站点Spoke可以使用动态地址,甚至支持经过NAT
  4. 部署完成后,增加新的分支站点Spoke,不需要动中心Hub
  5. 分支站点的配置几乎也很相似,能够非常快速的部署新的办公环境
  6. 分支站点之间动态的触发隧道,站点之间通信流量无需穿越Hub
  7. 站点之间流量使用IPSec加固
  8. 零丢包
  9. 支持动态路由协议OSPF、BGP、EIGRP
  10. 支持Hub-Spoke之间的组播流量
  11. 支持运行在MPLS之上
  12. 支持虚拟路由转发VRF (i-VRF、F-VRF)
  13. 拥有自愈能力
  14. 支持高可用性(主备)、弹性设计(负载)
    DMVPN

应用场景(部署方案)

  1. 一个Hub
    一个Hub
  2. 主备Hub
    主备Hub
  3. 双Hub
    双Hub
  4. 层次化设计
    层次化设计

组成

  1. 多点GRE隧道mGRE:站点间连通性。mGRE的IP协议号与GRE一样都是47
  2. 下一跳解析NHRP:注册、解析、路由优化
  3. 动态路由协议:路由传递、下一跳优化
  4. IPSec:流量加固

DMVPN历史发展

  1. 第一阶段:星型拓扑设计Hub-to-Spoke
    DMVPN第一阶段的星型拓扑设计是DMVPN技术的最原始阶段,除了中心站点为mGRE隧道,所有分支站点均为普通的点对点GRE隧道。分支站点间的流量都必须经过中心站点进行转发。第一阶段星型拓扑DMVPN的优势在于,增加分支站点并不会增加中心站点的配置量,并且分支站点支持动态获取IP地址。
  2. 第二阶段:虚拟网拓扑设计Spoke-to-Spoke
    在DMVPN第二阶段的虚拟网状拓扑设计中,所有站点配置mGRE隧道。中心站点与分支站点间维护一个永恒隧道,分支站点与分支站点间按需建立隧道,形成虚拟网状拓扑,真正实现DMVPN的高扩展性。
  3. 第三阶段:层次化(树状)设计Hierarchical (Tree-Based) Design
    DMVPN第三阶段和第二阶段基本一致,所有站点都使用mGRE。 第三阶段主要对大规模的DMVPN实施优化调整,整体呈现树状拓扑。中心站点和分支之间只需要维持一条VPN隧道即可,Spoke和Spoke之间通讯是按需建立隧道,可以实现虚拟全互连的效果,真正的实现了DMVPN的高扩展性。Spoke-to-Spoke的流量无需通过中心站点进行转发,通过动态建立的隧道,可以使通讯双方直接通讯,相对于第一阶段的DMVPN的优势在于减少了中心性能的消耗,保证了中心的带宽。

第二阶段 vs 第三阶段 NHRP的工作方式有所不同

二阶段,主要由动态路由协议负责路由下一跳优化
三阶段,主要由NHRP负责下一跳优化,支持路由汇总
隧道处理方法比较表

实验

实验拓扑如下:
实验拓扑
预配置:

# R2
sys
sys R2
int g0/0/0
ip addr 192.168.1.254 24
int g0/0/1
ip addr 202.100.1.1 24
# R3
sys
sys R3
int lo 0
ip addr 1.2.3.4 32
int g0/0/0
ip addr 202.100.1.254 24
int g0/0/1
ip addr 61.128.1.254 24
# R4
sys
sys R4
int g0/0/0
ip addr 10.1.1.254 24
int g0/0/1
ip addr 61.128.1.1 24
# PC1
192.168.1.1/24  GW:192.168.1.254
# PC2
10.1.1.1/24  GW:10.1.1.254
# 配置路由
# R2
ip route-static 61.128.1.0 24 202.100.1.254
# ip route-static 10.1.1.0 24 202.100.1.254
# R4
ip route-static 202.100.1.0 24 61.128.1.254
# ip route-static 192.168.1.0 24 61.128.1.254

实验一:使用传输模式加密隧道内流量(IPSec LAN to LAN VPN的部署)

回顾GRE:

  • IP协议号47
  • 报文格式:IP:GRE:IP:ip payload
  • 有明确的源和目的,流量直接封装进单播,包括动态路由协议的组播报文交互,但没有任何安全机制
    GRE over IPSec,加密点和通信点是同一设备(IPSec看的是最外层IP头部),推荐使用传输模式
    实验内容:
  • 使能OSPF并确保PC1和PC2可以通信
  • 在VRP上部署基于GRE的L2L VPN
    • 准备部署通过ipsec保护VPN流量的方案。首要问题,即定义好选择器
      • 方案一:在物理出接口下、使用传输模式、加密所有GRE封装的报文
      • 方案二:在隧道下、使用传输模式、加密所有负载
    • 步骤:
      • 定义IKE提案
      • 定义IKE对等体以及预共享密钥
      • 定义ipsec提案
      • 定义ipsec和ike的策略集
      • 调用
# 配置GRE隧道
# R2
int tunnel 0/0/0
tunnel-protocol gre
source g0/0/1
destination 61.128.1.1
ip addr 12.1.1.1 30
# R4
int tunnel 0/0/0
tunnel-protocol gre
source g0/0/1
destination 202.100.1.1
ip addr 12.1.1.2 30

#---------------------------------------

# 打通VPN通道(即PC1可以访问PC2) 
# R2
ospf 1
a 0
int g0/0/0
ospf en 1 a 0
int t0/0/0
ospf en 1 a 0
# R4
ospf 1
a 0
int g0/0/0
ospf en 1 a 0
int t0/0/0
ospf en 1 a 0

#---------------------------------------

# 在VRP上部署基于GRE的L2L VPN
# R2
#1.  定义感兴趣流
acl name GRE 3333   
rule permit gre
#2. 定义IKE提案,此处使用默认策略(仅创建)
ike proposal 10  
q   # 查看默认策略:dis ike proposal
#3. 定义对等体以及调用IKE提案
ike peer 2424 v1  # 使用IKEv1
pre-shared-key simple qytang666
ike-proposal 10
remote-address 61.128.1.1  # 【注意:此处通信两端设置时不相同,其他地方都一样(第6步调用的接口也有可能不同)】
q
# 4. 定义IPSec提案
ipsec proposal QYT
esp authentication-algorithm sha1
esp encryption-algorithm 3des
encapsulation-mode transport    # 选择传输模式(默认是隧道模式)
q
# 5. 定义IPSec整合策略
ipsec policy L2L 10 isakmp
security acl 3333    # 调用感兴趣流
ike-peer 2424   # 调用IKE提案
proposal QYT  # 调用IPSec提案
q
# 6. 调用
int g0/0/1
ipsec policy L2L

# R4
acl name GRE 3333
rule permit gre
ike proposal 10
q
ike peer 2424 v1
pre-shared-key simple qytang666
ike-proposal 10
remote-address 202.100.1.1
q
ipsec proposal QYT
esp authentication-algorithm sha1
esp encryption-algorithm 3des
encapsulation-mode transport 
q
ipsec policy L2L 10 isakmp
security acl 3333
ike-peer 2424
proposal QYT
q
int g0/0/1
ipsec policy L2L

#---------------------------------------

# 验证:R2/4
dis ike peer  # IKE对等体
dis ike proposal  # IKE策略
dis ike sa  # SA
dis ike statistics v1  # IKEv1统计信息
dis ipsec sa
dis ipsec sa brief
dis ipsec int brief
dis ipsec proposal
dis ipsec statistics esp

实验二:新的GRE over IPSec配置(无需定义感兴趣流,可扩展性比较强)

# -------------------------------完整配置
# 定义IKE提案
# ike proposal 1
# 定义IKE对等体策略及调用方案
# ike peer QYT v1  
# pre-shared-key simple qytang666
# ike-proposal 1
# 定义IPSec提案
# ipsec proposal QYT
# encapsulation-mode transport 
# 定义IPSec profile
# ipsec profile QYT
# ike-peer QYT
# proposal QYT
# 调用
# int t0/0/0
# shutdown
# ipsec profile QYT


# -------------------------------承接上个实验配置
# 清除无用配置
# R2
int g0/0/1
undo ipsec policy
q
undo ipsec policy L2L 10
ike peer 2424 v1
undo remote-address
q
undo acl 3333
# R4
int g0/0/1
undo ipsec policy
q
undo ipsec policy L2L 10
ike peer 2424 v1
undo remote-address
q
undo acl 3333
# 使用新方案配置
# R2
ipsec profile L2L
ike-peer 2424
proposal QYT
int t0/0/0
ipsec profile L2L

# R4
ipsec profile L2L
ike-peer 2424
proposal QYT
int t0/0/0
ipsec profile L2L

实验三:使用SVTI实现站点间通信

配置本试验之前需要将之前两个实验的配置全部删除,但是预配置中的4条静态路由需要保留

# R2
# 1. 定义感兴趣流
acl name SVTI 3333
rule 10 permit ip source 192.168.1.0 0.0.0.255 destination 10.1.1.0 0.0.0.255
q
# 2. 定义IKE提案
ike proposal 10
q
# 3. 定义对等体以及调用IKE提案
ike peer 2424 v1
pre-shared-key simple qytang666
ike-proposal 10
remote-address 62.128.1.1
q
# 4. 定义IPSec提案
ipsec proposal QYT
esp authentication-algorithm sha1
esp encryption-algorithm 3des
encapsulation-mode tunnel
q
# 5. 定义IPSec整合策略
ipsec policy L2L 10 isakmp
security acl 3333
ike-peer 2424
proposal QYT
q
# 6. 调用
int g0/0/1
ipsec policy L2L

# R4
acl name SVTI 3333
rule 10 permit ip source 10.1.1.0 0.0.0.255 destination 192.168.1.0 0.0.0.255
ike proposal 10
q
ike peer 2424 v1
pre-shared-key simple qytang666
ike-proposal 10
remote-address 202.100.1.1
q
ipsec proposal QYT
esp authentication-algorithm sha1
esp encryption-algorithm 3des
encapsulation-mode tunnel
q
ipsec policy L2L 10 isakmp
security acl 3333
ike-peer 2424
proposal QYT
q
int g0/0/1
ipsec policy L2L

实验四:部署动态VPN

部署动态VPN
R1配置
配置步骤:

  1. 部署隧道接口 —— spoke-hub的永恒隧道mGRE
  2. NHRP
  3. 配置动态路由协议
  4. 使用ipsec加固

Normal(正常)模式 (Hub-Spoke模式)

# 1. 基础网络配置(已经预配置,此处省略)

# 2. 定义mGRE
# Hub(R1)
int tunnel 0/0/0
tunnel-protocol gre p2mp  # 隧道模式
source g0/0/0   # 隧道源地址
ip addr 172.16.1.1 24 # 隧道地址
# S1(R2)
int tunnel 0/0/0
tunnel-protocol gre p2mp
source g0/0/0
ip addr 172.16.1.2 24
# S2(R3)
int tunnel 0/0/0
tunnel-protocol gre p2mp
source g0/0/0
ip addr 172.16.1.3 24

# 3. 定义NHRP
# S1
int tunnel 0/0/0
nhrp entry 172.16.1.1 61.128.1.1 register  # spoke注册,注册关键字很重要(单播映射)
# S2
int tunnel 0/0/0
nhrp entry 172.16.1.1 61.128.1.1 register

# 4. 配置动态路由协议
# Hub
int tunnel 0/0/0
nhrp entry multicast dynamic  # hub(组播)
ospf network-type broadcast
ospf dr-priority 255
ospf enable 1 area 0
int lo 0
ospf en 1 a 0
ospf 1
a 0
q
# S1
int tunnel 0/0/0
ospf network-type broadcast
ospf dr-priority 0
ospf enable 1 area 0
int lo 0
ospf en 1 a 0
ospf 1
a 0
q
# S2
int tunnel 0/0/0
ospf network-type broadcast
ospf dr-priority 0
ospf enable 1 area 0
int lo 0
ospf en 1 a 0
ospf 1
a 0
q

# 5. ipsec(可选配)
# Hub
ike proposal 1
ike peer DSVPN v1
pre-shared-key simple qytang666
ike-proposal 1
ipsec proposal QYT  
encapsulation-mode transport
q                
ipsec profile DSVPN
ike-peer DSVPN
proposal QYT
q
inter tunnel 0/0/0
shutdown        #  【此处注意:先关闭全部Spoke,再关闭Hub】
ipsec profile DSVPN
undo shutown    # 【此处注意:先启动Hub,再逐个启动Spoke】
# S1
ike proposal 1
ike peer DSVPN v1
pre-shared-key simple qytang666
ike-proposal 1
ipsec proposal QYT  
encapsulation-mode transport
q                
ipsec profile DSVPN
ike-peer DSVPN
proposal QYT
q
inter tunnel 0/0/0
shutdown 
ipsec profile DSVPN
undo shutown
# S2
ike proposal 1
ike peer DSVPN v1
pre-shared-key simple qytang666
ike-proposal 1
ipsec proposal QYT  
encapsulation-mode transport
q                
ipsec profile DSVPN
ike-peer DSVPN
proposal QYT
q
inter tunnel 0/0/0
shutdown 
ipsec profile DSVPN
undo shutown

短路(shortcut)模式(层次化(树状)设计)

大型DSVPN使用shortcut方式

# Hub/S1/S2
int t0/0/0
ospf network-type p2mp  # 此时Spoke所有路由的下一跳均为Hub

# Hub
nhrp redirect
# S1/S2
nhrp shortcut    # 此时使用nhrp进行优化,动态触发路由,Spoke之间数据传递第一个包会经过Hub转发,之后的数据是Spoke之间直通