加密学原理
- 信息安全的目标:数据私密性、数据完整性、发送源认证、不可否认性
- 私密性:保证机密信息在传输、存储和使用过程中不被未授权的第三方进行窃听,或窃听者无法了解信息的真正含义
- 完整性:确保收到的数据和对方所发出的信息完全一样,防止数据在传输或存储过程中被非法篡改
- 源认证:对信息的真实来源进行判断,确认信息真实的发送者和接收者,并能对伪造来源的信息予以鉴别
- 不可否认性:防止通信双方中的某一方事后否认其行为,包括:发送者不能否认信息的发送、接收方不能否认信息的接受
- 加密算法分类
- 对称式密钥算法:相同的密钥进行加解密,例如DES、3DES、AES、RC4。密钥长度一般为40~256bit。特点:速度非常快;使用简单的数据操作,很容易实现硬件加速;用于大块数据的加密;密钥管理是严重的问题
- DES:数据加密标准;广泛使用的对称密钥算法;被IBM开发于1975年;固定长度为56bit;算法非常好,并没有任何漏洞,仅仅因为密钥长度太短,易受到暴力破解攻击。DES块加密的两种模式:电子密码本,加密块链接(思科IPSec VPN只支持这种模式)
- 3DES:密钥长度放大3倍,长度168bit;暴力破解几乎不能实现;基于一个很好的算法DES
- AES:高级加密标准,又称Rijndael加密算法,AES在软件及硬件上都能快速的加解密,变长密钥和块长度,广泛应用于对无线和语音的加密
- RC4:流加密算法,软件运行效率非常高,广泛用于SSL加密
- 非对称式密钥算法:不同的密钥进行加解密,例如RSA、DH、ECC。公共密钥系统,密钥长度一般在512~2048bit,因为和对称密钥算法的数据理论有本质的不同,所以密钥长度没有可比性。特点:与对称密钥算法相比非常慢,基于已有的数据难题,能够实现简单的密钥管理,只能加密很小的数据,两大用途为签名和密钥交换
- RSA:公共密钥加密系统,基于大素数因式分解的数学难题,不可能从公钥推导出私钥,一个密钥加密,另一个密钥解密,这些密钥能够长时间的保障安全性。仅仅用于如下两种服务:加密密钥,实现密钥交换;加密散列,完成数字签名,实现源认证和不可否认性
- 对称式密钥算法:相同的密钥进行加解密,例如DES、3DES、AES、RC4。密钥长度一般为40~256bit。特点:速度非常快;使用简单的数据操作,很容易实现硬件加速;用于大块数据的加密;密钥管理是严重的问题
- 哈希算法
- 四大特点:计算结果固定长度、雪崩效应、单向运算、冲突避免
- 主流的散列算法有MD5和SHA-1。通过散列函数计算得到的结果叫做散列值(数据指纹)
- 哈希算法的主要用途:认证、使用数字签名保障数据的完整性。哈希算法解决数据完整性问题,HMAC(哈希消息认证码)解决了完整性基础之上的源认证,特别主要保护HAMC的预共享密钥。
- 数字签名和数字证书
数字签名能够帮我们实现两个功能:数据完整性验证;源认证
数字证书技术,用于解决谁是公钥持有者的问题
总结:
数据的私密性:对称加密;数据的完整性:哈希;数据来源的认证:HMAC;数据收发的不可否认性:数据指纹/数字证书
IPSec基本理论
IPSec框架
组成
ESP(负载安全封装)协议
- IP协议号50,能够为数据提供私密性、完整性和源认证,同时可抵御防重放攻击(反复发送相同的报文,接收方解密消耗系统资源而导致的DOS攻击),不对原始IP头部进行安全防护。
- 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)协议
- IP协议号51,数据不能加密(第一个问题)
- AH包结构
- 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个模式和两个阶段
主模式(第一阶段)
信息被封装在UDP包中,目的端口为UDP/500
6个报文:
- 发起方提供加密和验证算法
- 响应方回应接收的提案
- 发起方的DH公共值和随机数
- 响应方的DH公共值和随机数
- 发起方的签名、个人信息、密钥
- 响应方的签名、个人信息、密钥
总结: - 相互认证
- 1-2个包协商的认证、加密和验证方式都是为5-6包认证服务的
- 3-4个包DH交换计算出来的密钥也是为加密和验证(HMAC)5-6包而提前准备的
- 建立IKE/ISAKMP SA(双向)
快速模式(第二阶段)
3个报文:
- HASH值、SA提案、IPSec转换集、密钥材料和感兴趣流
- 相应方的HASH值、接受的SA提案、响应方的SPI、密钥
- HASH用于确认隧道建立
总结: - 协商IPSec策略(处理感兴趣流)
- 建立IPSec SA
- 单向
- 协议相关
工作模式
通信点:收发数据节点
加解密点:负责加解密的节点
传输模式
传输模式只加密IP负载,适合于通信点和加解密点位于相同的节点上,即不加密也能正常通信的情况下使用。
隧道模式(lan to lan)
适合于通信点和加解密点位于不同的节点上,即双发无法通信,经过IPSec隧道之后可以通信了。
IPSec的两个数据库
为了实现IPSec的互操作性,IPSec模型描述了两个数据库
- SPD 安全策略数据库。决定了什么流量将接受IPSec处理
- 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示意图:
使用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触发过程(包处理流程)
- 数据包进入VPN设备,检查远端通信点的路由,路由引导流量出适当的接口
- 包在出接口过程中撞击上MAP
- 流量匹配上MAP的ACL(感兴趣流),触发加密
- 发起和PEER的IKE协商,VPN设备检查去往PEER(远端加密点)的路由
动态VPN(DS VPN,动态智能)
特点
- 相比较传统的静态L2L VPN,最显著的特点就是资源按需消耗
- 静态隧道+动态隧道的方式,实现全互联的连通性的架构
- 分支站点Spoke可以使用动态地址,甚至支持经过NAT
- 部署完成后,增加新的分支站点Spoke,不需要动中心Hub
- 分支站点的配置几乎也很相似,能够非常快速的部署新的办公环境
- 分支站点之间动态的触发隧道,站点之间通信流量无需穿越Hub
- 站点之间流量使用IPSec加固
- 零丢包
- 支持动态路由协议OSPF、BGP、EIGRP
- 支持Hub-Spoke之间的组播流量
- 支持运行在MPLS之上
- 支持虚拟路由转发VRF (i-VRF、F-VRF)
- 拥有自愈能力
- 支持高可用性(主备)、弹性设计(负载)
应用场景(部署方案)
- 一个Hub
- 主备Hub
- 双Hub
- 层次化设计
组成
- 多点GRE隧道mGRE:站点间连通性。mGRE的IP协议号与GRE一样都是47
- 下一跳解析NHRP:注册、解析、路由优化
- 动态路由协议:路由传递、下一跳优化
- IPSec:流量加固
DMVPN历史发展
- 第一阶段:星型拓扑设计Hub-to-Spoke
DMVPN第一阶段的星型拓扑设计是DMVPN技术的最原始阶段,除了中心站点为mGRE隧道,所有分支站点均为普通的点对点GRE隧道。分支站点间的流量都必须经过中心站点进行转发。第一阶段星型拓扑DMVPN的优势在于,增加分支站点并不会增加中心站点的配置量,并且分支站点支持动态获取IP地址。 - 第二阶段:虚拟网拓扑设计Spoke-to-Spoke
在DMVPN第二阶段的虚拟网状拓扑设计中,所有站点配置mGRE隧道。中心站点与分支站点间维护一个永恒隧道,分支站点与分支站点间按需建立隧道,形成虚拟网状拓扑,真正实现DMVPN的高扩展性。 - 第三阶段:层次化(树状)设计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的策略集
- 调用
- 准备部署通过ipsec保护VPN流量的方案。首要问题,即定义好选择器
# 配置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
配置步骤:
- 部署隧道接口 —— spoke-hub的永恒隧道mGRE
- NHRP
- 配置动态路由协议
- 使用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之间直通