IPsec VPN-ASA&山石

一、多厂商对接IPsec VPN背景

IPsec VPN技术是IETF所提出的公有安全框架,因此网络和安全厂商都可以根据公开的标准实现IPsec VPN技术。客户通常出于安全架构设计或者成本方面考虑,可能会采用不同厂商的防火墙部署IPsec VPN,这就需要工程师了解并熟练操作不同厂商之间的防火墙,在此基础上进行IPsec VPN的部署。

二、案例拓扑图

1、简化拓扑图

拓扑图解释:某公司两地办公网络边界各部署了一台防火墙(Site-A是思科ASA,Site-B是山石SG6K),Site-A网络中存在两个VLAN(VLAN10和VLAN20),办公子网地址设计为192.168.1.0/24和192.168.2.0/24,Site-B网络中存在两个VLAN(VLAN30和VLAN40),子网地址设计为192.169.3.0/24和192.169.4.0/24。两地的核心交换机充当办公子网的网关,网关地址为254。现在需要在两地建立IPsec VPN,对Site-A网络中的VLAN 10网段流量和Site-B网络中的VLAN 30网段流量执行安全保护。

2、实验拓扑图

实验拓扑图描述了网元之间的物理连接方式。

三、案例设计

现在对案例进行设计,围绕设备信息、互联表、IP规划、IPsec参数规划、配置脚本等方面进行。

1、设备信息

2、互联表

3、IP规划

4、IPsec参数规划

5、配置脚本

根据设备信息、互联表、IP规划、IPsec参数规划编写设备配置脚本。

CiscoASA

config t
hostname CiscoASA

interface GigabitEthernet0/0
 description To-ISP-G0/0
 nameif Outside
 security-level 0
 ip address 7.8.9.2 255.255.255.252 

interface GigabitEthernet0/1
 description To-Site-A-Core-G0/0
 nameif Inside
 security-level 100
 ip address 10.0.1.1 255.255.255.252 

route Outside 0.0.0.0 0.0.0.0 7.8.9.1 1
route Inside 192.168.1.0 255.255.255.0 10.0.1.2 1
route Inside 192.168.2.0 255.255.255.0 10.0.1.2 1

#定义ISAKMP策略
crypto ikev1 policy 10
 authentication pre-share
 encryption aes-256
 hash sha
 group 14
 lifetime 86400

#建立隧道组
tunnel-group 7.8.10.2 type ipsec-l2l
tunnel-group 7.8.10.2 ipsec-attributes
 ikev1 pre-shared-key *****

#定义IPsec策略
crypto ipsec ikev1 transform-set VPN_TRANS esp-aes-256 esp-sha-hmac 

#定义感兴趣流
access-list VPN extended permit ip 192.168.1.0 255.255.255.0 192.169.3.0 255.255.255.0

#创建加密映射集
crypto map VPN_MAP 10 match address VPN
crypto map VPN_MAP 10 set peer 7.8.10.2 
crypto map VPN_MAP 10 set ikev1 transform-set VPN_TRANS
crypto map VPN_MAP interface Outside

#Outside接口启用IPsec
crypto ikev1 enable Outside

HillstoneSG6K

命令行配置

config
hostname HillstoneSG6K

interface ethernet0/1
  zone  "untrust"
  ip address 7.8.10.2 255.255.255.252
  manage ping
exit

interface ethernet0/2
  zone  "trust"
  ip address 20.0.1.1 255.255.255.252
  manage ssh
  manage ping
  manage https
exit

#配置路由
ip vrouter "trust-vr"
  snatrule id 1 from address-book "Any" to address-book "Any" service "Any" eif ethernet0/1 trans-to eif-ip mode dynamicport sticky 
  ip route 0.0.0.0/0 7.8.10.1
  ip route 192.169.3.0/24 20.0.1.2
  ip route 192.169.4.0/24 20.0.1.2
exit

#配置第一阶段提案
isakmp proposal "pre-share-sha-aes256-g14"
  encryption aes-256
  group 14
exit

#配置对等体
isakmp peer "CiscoASA"
  isakmp-proposal "pre-share-sha-aes256-g14"
  pre-share "$01011Nou$7MdQ7dOB+vGt5GrHwcSPtzJ7I8Y="
  peer 7.8.9.2
  dpd interval 10 retry 3 on-demand
  interface ethernet0/1
exit

#配置第二阶段提案
ipsec proposal "esp-sha-aes256"
  hash sha
  encryption aes-256
exit

#配置感兴趣流路由
ip vrouter "trust-vr"
  ip route 192.168.1.0/24 "tunnel1"
exit

#配置隧道绑定
tunnel ipsec "IPsec VPN" auto sa-index 1
  ipsec-proposal "esp-sha-aes256"
  auto-connect
  accept-all-proxy-id
  isakmp-peer "CiscoASA"
  id local 192.169.3.0/24 remote 192.168.1.0/24 service "Any"
exit

#配置隧道接口
interface tunnel1
  zone  "VPNHub"
  tunnel ipsec "IPsec VPN"
exit

图形化配置

1)配置接口

2)配置路由

3)配置阶段1提案

4)配置阶段2提案

5)配置VPN对等体

6)配置IPsec VPN

此步骤类似思科配置映射集。

7)配置隧道接口

8)配置感兴趣流路由

9)配置安全策略

安全策略方面思科和山石有着明显区别。思科针对VPN流量默认放行,而山石需要配置区域之间的放行策略,否则VPN流量会被拒绝。

Site-X-Core

Site-A-Core#
hostname Site-A-Core

interface GigabitEthernet0/0
 description To-CiscoASA-G0/1
 no switchport
 ip address 10.0.1.2 255.255.255.252
 negotiation auto
!
interface GigabitEthernet0/1
 description To-Site-A-VPN-E0
 switchport access vlan 10
 switchport mode access
 negotiation auto
!
interface GigabitEthernet0/2
 description To-Site-A-E0
 switchport access vlan 20
 switchport mode access
 negotiation auto
!
interface Vlan10
 ip address 192.168.1.254 255.255.255.0
!
interface Vlan20
 ip address 192.168.2.254 255.255.255.0

ip route 0.0.0.0 0.0.0.0 10.0.1.1

Site-B-Core#
hostname Site-B-Core

interface GigabitEthernet0/0
 description To-HillstoneSG6K-Ethernet0/2
 no switchport
 ip address 20.0.1.2 255.255.255.252
 negotiation auto
!
interface GigabitEthernet0/1
 description To-Site-B-VPN-E0
 switchport access vlan 30
 switchport mode access
 negotiation auto
!
interface GigabitEthernet0/2
 description To-Site-B-E0
 switchport access vlan 40
 switchport mode access
 negotiation auto

interface Vlan30
 ip address 192.169.3.254 255.255.255.0
!
interface Vlan40
 ip address 192.169.4.254 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 20.0.1.1

Terminal PC

Site-A-VPN#
sudo hostname Site-A-VPN
sudo ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
sudo route add -net 0.0.0.0/0 dev eth0

Site-A#
sudo hostname Site-A
sudo ifconfig eth0 192.168.2.1 netmask 255.255.255.0 up
sudo route add -net 0.0.0.0/0 dev eth0

Site-B-VPN#
sudo hostname Site-B-VPN
sudo ifconfig eth0 192.169.3.1 netmask 255.255.255.0 up
sudo route add -net 0.0.0.0/0 dev eth0

Site-B#
sudo hostname Site-B
sudo ifconfig eth0 192.169.4.1 netmask 255.255.255.0 up
sudo route add -net 0.0.0.0/0 dev eth0

四、案例配置说明及测试

1、阶段提案

思科和山石的阶段一提案所采用的验证算法加密算法DH组身份认证方式生存时间需要一致,此外阶段一的运行模式需要一致(默认思科阶段一采用主模式,山石在协商模式选择中需要指定为主模式),否则无法建立ISAKMP SA(即第一阶段无法建立)。提案名不需要一致,因为提案名是不会封装进信令数据包中的。

思科和山石的阶段二提案所采用的验证算法加密算法封装协议生存时间需要一致,否则无法建立IPsec SA(即第二阶段无法建立)。对等体两边都需要选择采用ESP作为封装协议。思科定义阶段二的提案策略叫做转换集(Transform set),转换集定义了传输数据包的验证算法和加密算法,提供了数据完整性、机密性、数据认证功能,Transform set会在快速模式下进行协商。山石定义阶段二的提案策略叫做隧道IPsec(Tunnel IPsec),隧道IPsec定义了对等体信息、封装模式、关联的P2提议、调用的感兴趣流(山石防火墙中叫做代理ID)等。

同时在IPsec VPN配置-高级配置中建议开启【自动连接】选项,【自动连接】表示山石防火墙会在60s内检查SA的状态,如果SA未建立则自动发起协商。

2、感兴趣流

思科防火墙中的感兴趣流通过Access-list直接定义,并在加密映射集中调用。山石防火墙中的感兴趣流在IPsec VPN配置-代理列表中填写(将代理ID选项设置为手工),本地IP/掩码填写源网络,远程IP/掩码填写目的网络,服务选择Any。

3、安全策略

有关于安全策略,思科防火墙有一条默认特性,通过show run all sysopt命令查看。sysopt connection permit-vpn表示默认对VPN流量放行,因此思科防火墙中无需编写ACL,即使编写了也不生效。山石防火墙则完全相反,对任何流量都需要设置安全策略,否则无法放行,因此山石防火墙策略中需要放行安全域为VPNHub到安全域为trust方向的流量,同时增加一条反向的策略(从安全域为trust到安全域为VPNHub方向的流量)。

思科防火墙默认VPN放行策略:

山石防火墙配置安全策略:

4、SA建立监控

山石防火墙阶段1 SA建立情况:

思科防火墙阶段1 SA建立情况:

山石防火墙阶段2 SA建立情况:

思科防火墙阶段2 SA建立情况:

CiscoASA# show crypto ipsec sa detail 
interface: Outside
    Crypto map tag: VPN_MAP, seq num: 10, local addr: 7.8.9.2

      access-list VPN extended permit ip 192.168.1.0 255.255.255.0 192.169.3.0 255.255.255.0 
      local ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
      remote ident (addr/mask/prot/port): (192.169.3.0/255.255.255.0/0/0)
      current_peer: 7.8.10.2


      #pkts encaps: 0, #pkts encrypt: 0, #pkts digest: 0
      #pkts decaps: 1737, #pkts decrypt: 1737, #pkts verify: 1737
      #pkts compressed: 0, #pkts decompressed: 0
      #pkts not compressed: 0, #pkts comp failed: 0, #pkts decomp failed: 0
      #pre-frag successes: 0, #pre-frag failures: 0, #fragments created: 0
      #PMTUs sent: 0, #PMTUs rcvd: 0, #decapsulated frgs needing reassembly: 0
      #TFC rcvd: 0, #TFC sent: 0
      #Valid ICMP Errors rcvd: 0, #Invalid ICMP Errors rcvd: 0
      #pkts no sa (send): 0, #pkts invalid sa (rcv): 0
      #pkts encaps failed (send): 0, #pkts decaps failed (rcv): 3474
      #pkts invalid prot (rcv): 0, #pkts verify failed: 1737
      #pkts invalid identity (rcv): 1737, #pkts invalid len (rcv): 1023864576
      #pkts invalid pad (rcv): 0,
      #pkts invalid ip version (send): 0, #pkts invalid ip version (rcv): 0
      #pkts invalid len (send): 0, #pkts invalid len (rcv): 0
      #pkts invalid ctx (send): 0, #pkts invalid ctx (rcv): 0
      #pkts invalid ifc (send): 0, #pkts invalid ifc (rcv): 0
      #pkts failed (send): 0, #pkts failed (rcv): 0
      #pkts replay rollover (send): 0, #pkts replay rollover (rcv): 0
      #pkts replay failed (rcv): 0
      #pkts min mtu frag failed (send): 0, #pkts bad frag offset (rcv): 0
      #pkts internal err (send): 0, #pkts internal err (rcv): 1737

      local crypto endpt.: 7.8.9.2/0, remote crypto endpt.: 7.8.10.2/0
      path mtu 1500, ipsec overhead 74(44), media mtu 1500
      PMTU time remaining (sec): 0, DF policy: copy-df
      ICMP error validation: disabled, TFC packets: disabled
      current outbound spi: 7C187631
      current inbound spi : 03301843

    inbound esp sas:
      spi: 0x03301843 (53483587)
         SA State: active
         transform: esp-aes-256 esp-sha-hmac no compression 
         in use settings ={L2L, Tunnel, IKEv1, }
         slot: 0, conn_id: 1, crypto-map: VPN_MAP
         sa timing: remaining key lifetime (kB/sec): (3914883/26021)
         IV size: 16 bytes
         replay detection support: Y
         Anti replay bitmap: 
          0xFFFFFFFF 0xFFFFFFFF
    outbound esp sas:
      spi: 0x7C187631 (2081977905)
         SA State: active
         transform: esp-aes-256 esp-sha-hmac no compression 
         in use settings ={L2L, Tunnel, IKEv1, }
         slot: 0, conn_id: 1, crypto-map: VPN_MAP
         sa timing: remaining key lifetime (kB/sec): (3915000/26020)
         IV size: 16 bytes
         replay detection support: Y
         Anti replay bitmap: 
          0x00000000 0x00000001

5、VPN测试

测试方案:

  • Site-B-VPN ping Site-A-VPN

  • Site-A ping Site-B-VPN

预期结果:

  • Site-B-VPN ping Site-A-VPN,正常通信,流量经过IPsec VPN。

  • Site-A ping Site-B-VPN,无法通信。

测试结果如下。

测试1结果:

查看山石防火墙策略命中情况:

测试2结果:

公网所捕获的数据报文: