1. 程式人生 > >IPSec VPN原理和配置過程

IPSec VPN原理和配置過程

IPSec協議

IKE

Internet Key Exchage, 用於網際網路中金鑰的安全交換
又包括下面二個協議

ISAKMP

定義SA生成,建立等引數.

Oakley

利用Diffie-Hellman演算法管理金鑰交換.
DH協議保證了在不安全的環境中,金鑰可以被安全的交換

ESP

Encryption Security Payload, 用於加密淨荷
又包括以下加密協議
DES: IBM創造, 56位,已不安全.儘量少用
3DES: 對DES進行三次重複操作, 金鑰長度變為168位, 安全性高. 但存在固有缺陷
AES: 目前最安全的加密演算法, 相應的耗時也久一點.

AH

Authertication Header, 用於驗證資料完整性.
所使用的Hash演算法為
MD5:輸入長度可變,生成特徵字串128bit.
SHA-1:輸入長度可變, 生成特徵字串160bit,但IPSec只使用前96bit.
雖然SHA-1僅使用了96bit,但是安全性依然比MD5高, 同時計算速度也要慢一些.

ESP既可以加密資料,也可以通過Hash演算法計算資料完整性. 而AH僅能驗證完整性,不支援加密.
因而目前主要使用ESP.

IPSec模式

傳送模式

L2 | L3 | ESP頭 |淨荷 | ESP尾 | ESP認證

在ESP頭和ESP尾之間的部分將被加密, 也就是三層協議以上部分.
在ESP頭和ESP認證部分的資料將被驗證.

隧道模式

L2 | 新L3 | ESP頭 |L3 | 淨荷 | ESP尾 | ESP認證

此時生成一個新的L3頭, 原有的L3頭也將被加密.
與傳送模式相同,
在ESP頭和ESP尾之間的部分將被加密, 也就是二層協議以上部分.
在ESP頭和ESP認證部分的資料將被驗證.

VPN總是優先選擇隧道模式.

IPSec過程

IPSec可以分為以下5個階段

  • 指定興趣流量: 定義 需要保護的流量.
  • IKE階段1: 協商ISAKMP引數,生成雙向SA, 用於交換金鑰
  • IKE階段2: 協商IPSec引數, 生成二個單向SA資料通道.
  • 安全資料傳送: 資料通過單向SA通道進行安全傳送
  • IPSec隧道終結:

指定興趣流量

ACL 完成,定義需要經過IPSec加密的流量.由於這些都是在路由器上完成,對於使用者來說是一切透明的.因此不需要VPN客戶端或者新建連線.從使用者PC發出的所有流量都交給路由器,由路由器來實現普通流量與VPN流量的分離.

IKE階段1

VPN二端的路由器交換isamp引數, 稱為isakmp變換集.包括
IKE加密演算法: DES 3DES AES
IKE驗證演算法: MD5 SHA-1
IKE認證方式: 預共享金鑰 RSA簽名 臨時密碼
隧道週期: 時間(s) 流量(bit)
DH群: 2 5 7

只有路由器間有相同的isamp變換集, 才能形成IKE通道. 這個SA是雙向的.

IKE階段2

VPN二端的路由器交換ipsec引數, 稱為ipsec變換集.與isakmp變換集非常類似,包括
ipsec協議: ESP AH
ipsec加密演算法: DES 3DES AES
ipsec驗證演算法: MD5 SHA-1
ipsec模式: 隧道 傳送
ipsec生命期: 時間(s) 流量(bit)

與IKE階段1相同, 必須完全相同的ipsec變換集才能形成ipsec通道.此處會生成二個單向SA通道, 分別用於傳送和接收.

安全資料傳送

當ipsec隧道生成後,興趣流量就會經由ipsec隧道進行傳送.

IPSec隧道終結

分為二種情況:
自動 終結: 通常是ipsec生命期過期
手動終結: 由使用者手動刪除.

IPSec VPN配置

在R1的ethernet0/0和R3的ethernet0/1介面間建立IPSec隧道,加密PC1和PC2間的流量.
首先測試下PC1和PC2的連通性

VPCS 1 >ping 192.168.2.2
192.168.2.2 icmp_seq=1 time=16.126 ms
192.168.2.2 icmp_seq=2 time=49.369 ms
192.168.2.2 icmp_seq=3 time=48.297 ms
192.168.2.2 icmp_seq=4 time=16.966 ms
192.168.2.2 icmp_seq=5 time=50.147 ms

VPCS 2 >ping 10.1.2.2
10.1.2.2 icmp_seq=1 time=50.358 ms
10.1.2.2 icmp_seq=2 time=80.953 ms
10.1.2.2 icmp_seq=3 time=48.220 ms
10.1.2.2 icmp_seq=4 time=53.387 ms
10.1.2.2 icmp_seq=5 time=48.299 ms

與上面的過程相對應,也可將配置分為以下幾步
1.定義興趣流量
2.定義isakmp策略 (IKE階段1)
3.定義ipsec策略 (IKE階段2)
4.配置密碼對映
5.應用策略到介面

定義興趣流量

.

可以通過擴充套件ACL實現.

R1(config)#access-list 101 permit ip 10.1.2.0 0.0.0.255 192.168.2.0 0.0.0.255
R1(config)#access-list 101 permit icmp 10.1.2.0 0.0.0.255 192.168.2.0 0.0.0.255

R3(config)#access-list 101 permit ip 192.168.2.0 0.0.0.255 10.1.2.0 0.0.0.25
R3(config)#access-list 101 permit icmp 192.168.2.0 0.0.0.255 10.1.2.0 0.0.0.25

定義isakmp策略

R1(config)#crypto isakmp policy 55
R1(config-isakmp)#encryption 3des
R1(config-isakmp)#hash md5
R1(config-isakmp)#authentication pre-share
R1(config-isakmp)#lifetime 3600
R1(config-isakmp)#group 2
R1(config-isakmp)#exit
R1(config)#crypto isakmp key ccna address 192.168.1.2

R3(config)#crypto isakmp policy 66
R3(config-isakmp)#encryption 3des
R3(config-isakmp)#hash md5
R3(config-isakmp)#group 2
R3(config-isakmp)#lifetime 3600
R3(config-isakmp)#authentication pre-share
R3(config-isakmp)#exit
R3(config)#crypto isakmp key ccna address 10.1.1.1

定義ipsec策略

R1(config)#crypto ipsec transform-set vpn esp-3des esp-md5-hmac
R1(cfg-crypto-trans)#mode tunnel
R1(cfg-crypto-trans)#exit
R1(config)#crypto ipsec security-association lifetime seconds 6400

R3(config)#crypto ipsec transform-set vpn esp-3des esp-md5-hmac
R3(cfg-crypto-trans)#mode tunnel
R3(cfg-crypto-trans)#exit
R3(config)#crypto ipsec security-association lifetime seconds 6400

配置密碼對映

R1(config)#crypto map vpn1 15 ipsec-isakmp
R1(config-crypto-map)#match address 101
R1(config-crypto-map)#set peer 192.168.1.2
R1(config-crypto-map)#set transform-set vpn
R1(config-crypto-map)#exit

R3(config)#crypto map vpn2 44 ipsec-isakmp
R3(config-crypto-map)#match address 101
R3(config-crypto-map)#set peer 10.1.1.1
R3(config-crypto-map)#set transform-set vpn
R3(config-crypto-map)#exit

應用策略到介面

R1(config)#interface ethernet 0/0
R1(config-if)#crypto map vpn1
R1(config-if)#end
R1#
*Mar 1 00:17:23.519: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
*Mar 1 00:17:24.115: %SYS-5-CONFIG_I: Configured from console by console

R3(config)#interface ethernet 0/1
R3(config-if)#crypto map vpn2
R3(config-if)#end
R3#
*Mar 1 00:17:28.311: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
*Mar 1 00:17:29.467: %SYS-5-CONFIG_I: Configured from console by console

配置完畢,現在開始測試下

首先PC1 ping 下 PC2
VPCS 1 >ping 192.168.2.2
192.168.2.2 icmp_seq=1 timeout
192.168.2.2 icmp_seq=2 timeout
192.168.2.2 icmp_seq=3 time=107.683 ms
192.168.2.2 icmp_seq=4 time=46.449 ms
192.168.2.2 icmp_seq=5 time=16.452 ms

開始二個包丟失, 正是因為隧道還未開啟的緣故.
檢視下當前的isakmp sa連線狀態
R1#sh crypto isakmp sa
dst src state conn-id slot
192.168.1.2 10.1.1.1 QM_IDLE 1 0

可以看到連線已建立,vpn二端分別為10.1.1.1和192.168.1.2
檢視下當前的ipsec sa連線狀態

R1#sh crypto ipsec sa

interface: Ethernet0/0
Crypto map tag: vpn1, local addr. 10.1.1.1

protected vrf:
local ident (addr/mask/prot/port): (10.1.2.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: 192.168.1.2:500
PERMIT, flags={origin_is_acl,ipsec_sa_request_sent}
#pkts encaps: 8, #pkts encrypt: 8, #pkts digest 8
#pkts decaps: 8, #pkts decrypt: 8, #pkts verify 8
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 2, #recv errors 0

local crypto endpt.: 10.1.1.1, remote crypto endpt.: 192.168.1.2
path mtu 1500, ip mtu 1500, ip mtu idb Ethernet0/0
current outbound spi: 7D94C0D5

inbound esp sas:
spi: 0xC8FEB295(3372135061)
transform. esp-3des esp-md5-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 2000, flow_id: 1, crypto map: vpn1
sa timing: remaining key lifetime (k/sec): (4414350/6389)
IV size: 8 bytes
replay detection support: Y

inbound ah sas:

inbound pcp sas:

outbound esp sas:
spi: 0x7D94C0D5(2106900693)
transform. esp-3des esp-md5-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 2001, flow_id: 2, crypto map: vpn1
sa timing: remaining key lifetime (k/sec): (4414350/6387)
IV size: 8 bytes
replay detection support: Y

outbound ah sas:

outbound pcp sas:

protected vrf:
local ident (addr/mask/prot/port): (10.1.2.0/255.255.255.0/1/0)
remote ident (addr/mask/prot/port): (192.168.2.0/255.255.255.0/1/0)
current_peer: 192.168.1.2:500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 0, #pkts encrypt: 0, #pkts digest 0
#pkts decaps: 0, #pkts decrypt: 0, #pkts verify 0
#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.: 10.1.1.1, remote crypto endpt.: 192.168.1.2
path mtu 1500, ip mtu 1500, ip mtu idb Ethernet0/0
current outbound spi: 0

inbound esp sas:

inbound ah sas:

inbound pcp sas:

outbound esp sas:

outbound ah sas:

outbound pcp sas:

可以看到有資料包通過並被加密

再檢視下當前活動的IPSec連線

R1#sh crypto engine connections active

ID Interface IP-Address State Algorithm Encrypt Decrypt
1 Ethernet0/0 10.1.1.1 set HMAC_MD5+3DES_56_C 0 0
2000 Ethernet0/0 10.1.1.1 set HMAC_MD5+3DES_56_C 0 8
2001 Ethernet0/0 10.1.1.1 set HMAC_MD5+3DES_56_C 8 0