Category Archives: 走向CCIE之路-Security

%CRYPTO-4-RECVD_PKT_MAC_ERR: decrypt: mac verify failed for

今天在某个设备上配了个IPSEC vpn隧道。在配置结束后遇到了个问题就是ezvpn客户端拨入之后如果跨设备访问丢包,并且偶尔在console上会出%CRYPTO-4-RECVD_PKT_MAC_ERR的错误。网上搜索了一下发现这个报错有可能和route-cache有关。

在应用crypto map的接口上敲上no ip route-cache解决了问题。

但是如果完全禁用route-cache由担心设备的cpu受不了,在接口上尝试了ip route-cache cef、ip route-cache flow两种方式,发现其实是cef方式的route-cache造成的丢包。

对cef的工作原理还不是很了解,只知道大概的原理。虽然仍然不太明白根本的原因是什么,但是解决了问题—我想在接口上使用ip route-cache flow的方式可能要比单纯的禁用route-cache好。

GRE over IPSec

IPSec隧道有个问题,只能传递单播的流量。如果想利用IPSec隧道传递组播和广播流量,那么只能采用在IPSec中封一层GRE隧道,让组播和广播流量在GRE中传递。

GRE over IPSec的配置方法和IPSec L2L没有什么特别大的区别,需要注意的是,定义感兴趣流时应为tunnel的source ip和destination ip,流量类型为GRE。

测试方法:
1.测试IPSec隧道是否建立成功。
2.在tunnel上互相ping,或者建立OSPF邻居以便检查组播流量是否成功传递。 

用路由器配置ezVPN client

crypto ipsec client ezvpn ez
 connect manual 手动连接
 group vpngroup key groupkey 组名vpngroup,组密码groupkey
 local-address FastEthernet0/1 使用fa0/1发起连接
 mode client 使用客户模式
 peer 10.0.1.1 ezvpn服务器10.0.1.1
interface Loopback0
 ip address 9.9.9.9 255.255.255.0
 crypto ipsec client ezvpn ez inside 使用咯opback口模拟内部用户
interface FastEthernet0/1
 ip address 10.0.1.2 255.255.255.0
 crypto ipsec client ezvpn ez标记使用fa0/1发起vpn连接(outside)

配置完成后手动建立vpn连接:

R1#cry ipsec client ezvpn connect  建立连接
R1#crypto ipsec client ezvpn connect
EZVPN(ez): IPSec connection terminated
R1#crypto ipsec client ezvpn xauth 输入认证的用户名密码
Username: cisco
Password:

R1#show crypto ipsec client ezvpn 检查建立好的连接
Easy VPN Remote Phase: 2

Tunnel name : ez
Inside interface list: Loopback0
Outside interface: FastEthernet0/1
Current State: IPSEC_ACTIVE
Last Event: SOCKET_UP
Address: 7.7.7.1
Mask: 255.255.255.255

 

在PIX 7.2上配置ezVPN server

1. 建立一个用户(vpn登录本地验证) username cisco password cisco

2.phase 1 制定ISAKMP策略
crypto isakmp enable outside 在outside接口上启用isakmp,默认isakmp是不启用的,这点与路由器不一样
crypto isakmp policy 10 建立isakmp策略
 authentication pre-share 预共享密钥验证
 encryption aes aes加密
 hash sha 使用sha1 hash校验
 group 2 使用DH group2
 lifetime 86400 有效期1天(默认)

3. "phase 1.5" 配置组
group-policy vpngroup internal 内部组策略
access-list sp extended permit ip 1.1.1.0 255.255.255.0 any建立一个用于标记流量分割的acl
group-policy vpngroup attributes 组策略
 vpn-tunnel-protocol IPSec 使用IPSec作为隧道协议
 split-tunnel-policy tunnelspecified 表示分割流量是acl明确标记出来的
 split-tunnel-network-list value sp acl名为sp的流量需要使用加密隧道传输
tunnel-group vpngroup type ipsec-ra 组vpngroup是ipsec remote access类型的
ip local pool localpool 192.168.1.1-192.168.1.100 建立一个地址池名为localpool
tunnel-group vpngroup general-attributes 针对该组的一般属性(地址、dns等)
 address-pool localpool 地址池使用名为localpool的
 default-group-policy vpngroup 该组使用的策略名叫做vpngroup
tunnel-group vpngroup ipsec-attributes 针对该组的ipsec属性
 pre-shared-key groupkey 共享密钥为"groupkey",配置好之后show run看到的共享密钥应该显示为"*"。

4.配置phase 2
crypto ipsec transform-set ts esp-3des esp-md5-hmac 建立一个转换集使用3des加密,md5验证
crypto dynamic-map dmap 10 set transform-set ts 建立一个动态map调用该转换集
crypto map cmap 1000 ipsec-isakmp dynamic dmap 建立一个静态map调用动态map dmap
crypto map cmap interface outside在接口上应用静态map cmap

 

配置路由器作为ezVPN服务器

配置路由器作为ezVPN服务器
1.启用AAA
aaa new-model 启用AAA
aaa authentication login vpnauth local 建立一个叫做vpnauth的认证组使用路由器本地用户名密码做登录认证
aaa authorization network vpnauthor local 建立一个叫做vpnauthor的授权组用来给vpn拨入用户分配地址使用
username cisco password cisco 建立一个本地用户cisco密码为cisco作为vpn用户

2.配置phase 1
crypto isakmp policy 10
 encr aes 使用AES加密
 authentication pre-share 使用预共享密钥
 group 2  使用DH group2

3.配置"phase 1.5" (xauth)
crypto isakmp xauth timeout 10 设置xauth认证超时时间10秒
crypto isakmp client configuration group vpngroup 建立一个ezvpn的组,组名为vpngroup
 key groupkey 组密码为groupkey
 pool localpool针对改组分配ip的地址池为localpool
 acl lo 针对该组的split tunnel acl
crypto isakmp profile isapro 建立一个isakmp profile,使用profile的好处是可以针对不同的组采用不同的认证和授权策略
   match identity group vpngroup 该profile对应的组为vpngroup
   client authentication list vpnauth 针对客户端使用vpnauth进行认证
   isakmp authorization list vpnauthor 针对客户端使用vpnauth进行授权(针对该配置是地址的分配)
   client configuration address respond 回应客户端发起的地址请求,针对新版的cisco vpn client通常都使用respond方式
   keepalive 10 retry 3 保持10秒,最多重试认证3次
ip local pool localpool 9.9.9.1 9.9.9.10建立一个本地地址池

4.配置phase 2
crypto ipsec transform-set ts esp-aes esp-sha-hmac建立转换集使用aes加密和sha hash验证
!
crypto dynamic-map dmap 10 建立动态map
 set transform-set ts 调用转换集ts
 set isakmp-profile isapro 调用isakmp-profile
 reverse-route 当客户端拨入后在路由器上注入客户端的静态主机路由
!
!         
crypto map cmap 1000 ipsec-isakmp dynamic dmap 建立一个静态map并且调用刚建立的动态map dmap
在vpn拨入请求可能进入的接口上调用crypto map cmap

5.使用VPN客户端连接
组名使用vpngroup,组密码使用groupkey。用户名使用cisco,密码使用cisco。

IPSEC VPN建立的步骤和对应的配置

IPSEC VPN建立分为2步:Phase 1 & Phase 2
phase 1主要作用是vpn客户端和vpn接入点互相认证,以便确认对方的身份;phase2主要作用是协商针对特定的流量采用什么样的加密传输策略以及传输数据的完整性校验策略。

phase 1分为3步(共6个数据包),举例说明:
(1)A–>B :我支持的针对认证的加密策略有AES,DES,3DES…hash方法有md5/sha,认证方法采用pre-sharekey,rsa加密,rs签名,Diffie-Hellman使用Group1,2,或5,认证有效时间为x秒等
   B–>A:你提出的针对认证策略第N项我同意接受使用
(2)A<–>B 执行Diffie-Hellman交换,产生公共密钥
(3)A<–>B 使用协商好的认证策略以及产生的会话密钥传输加密的pre-sharekey或者证书等,互相进行认证。

对应的Cisco Router配置举例如下:
R1(config)#crypto isakmp policy 10
R1(config-isakmp)# encr aes //使用AES加密
R1(config-isakmp)# authentication pre-share //使用预共享密钥验证
R1(config-isakmp)# group 2 //使用DH group2
R1(config-isakmp)#crypto isakmp key r1r2cisco address 172.30.2.2 //将密钥与对端进行绑定

phase 2分为2步(共3个数据包),举例说明:
(1)A–>B: 我支持的针对数据传输的策略有ah-md5-hmac,ah-sha-hmac,esp-3des,esp-md5-hmac,感兴趣的数据流为某个流,是否启用PFS等
   B–>A: 我们选用其中的某个策略来作为加密传输的策略
(2)A–>B: OK,开始用这个策略传输吧
R1(config-isakmp-peer)#crypto ipsec transform-set ts esp-3des esp-sha-hmac //定义传输数据和完整性验证的策略
R1(cfg-crypto-trans)#crypto map cmap 10 ipsec-isakmp
R1(config-crypto-map)# set peer 172.30.2.2 //对端ip
R1(config-crypto-map)# set transform-set ts //将transfor-set与ipsec策略进行绑定
R1(config-crypto-map)# set pfs group2 //启用完美向前
R1(config-crypto-map)# match address loop //匹配感兴趣流
R1(config)#ip access-list extended loop
R1(config-ext-nacl)# permit ip host 1.1.1.1 host 2.2.2.2 //定义感兴趣流的访问控制列表

以上都配置好之后对于网络设备还需进行下面配置:
1. 在流量送出的接口上应用crypto map
2. 将感兴趣流的目的地址加入到路由表中(不一定非要精确匹配,只要能覆盖即可),然后将流量引导到送出接口
有些情况可能会出现返回的流量从另外的接口进入的情况,流量进入的接口不一定非要有crypto map,但是如果在所有可能返回流量的接口上写上crypto map是有好处的:当流量被crypto map中的感兴趣流匹配后,如果发现是没有被加密的流量,则直接丢弃,这样可以从一定程度上防止spoofing。

IPSEC L2L VPN使用的都是标准的公开的协议,任何厂家的设备只要支持标准的IPSEC VPN都可以实现互通。对于cisco设备默认的ISAKMP SA有效期是86400秒(1天),IPSEC SA有效期是1小时。在不同厂家互联的时候有些时候可能会忽略到有效期的问题,如果有效期不一致则一样没法连通。

PIX/ASA的ACL与路由器上的ACL的对比

 

PIX/ASA

PIX

Router IOS

Router

ACL的格式

使用netmask

access-list test extended permit ip host 1.1.1.1 120.1.1.0 255.255.255.0

使用wildcard mask

access-list 100 permit ip host 1.1.1.1 120.1.1.0  0.255.255.255

应用ACL

在全局应用

access-group test in interface inside

在接口下应用

Access-group 100 in

作用范围

只对穿越的流量有效,并且只匹配无状态信息的数据包

所有到达该接口的流量都会先经过acl的检查,然后才会送到接口做进一步处理

配置icmp状态检测

PIX和ASA在7.x上默认是不检查穿越防火墙的icmp的状态的,这意味着从内向外做出的ping操作只能单向穿越防火墙,被ping设备回应的icmp echo-reply无法穿越防火墙——防火墙会认为这些数据包是来自安全级别低的外网的,不可以穿过。

默认情况下,PIX/ASA 7.x会监控下面这些协议的状态:
policy-map type inspect dns preset_dns_map
 parameters
  message-length maximum 512
policy-map global_policy
 class inspection_default
  inspect dns preset_dns_map
  inspect ftp
  inspect h323 h225
  inspect h323 ras
  inspect rsh
  inspect rtsp
  inspect esmtp
  inspect sqlnet
  inspect skinny
  inspect sunrpc
  inspect xdmcp
  inspect sip
  inspect netbios
  inspect tftp
!
service-policy global_policy global
在PIX/ASA不做任何安全配置的情况下,内网用户是可以正常发起向外的TCP请求,也可以正常使用FTP等需要反向穿越防火墙的协议的(inspect FTP)。使用下面的命令可以实现让内网用户可以收到正常ping到外网的echo-reply回应:
pixfirewall(config)# policy-map global_policy
pixfirewall(config-pmap)# class inspection_default
pixfirewall(config-pmap-c)# inspect icmp

PIX 7.x之后对BGP md5认证穿越如何支持

感谢PP提供的资料。 

由于PIX和ASA这样的防火墙为了防止TCP会话劫持通常都会对穿越防火墙的tcp会话序列号做主动的扰乱,而BGP会话如果启用了md5认证会把包头部分作为md5 hash计算的一部分,一旦PIX/ASA主动修改了tcp的序列号,那么作为md5 hash计算部分的包头显然也和以前的不一样了。
这时会在路由器上看到类似下面的信息:
%TCP-6-BADAUTH: Invalid MD5 digest from 源IP:源端口 to 目的IP:179

在6.x上的解决办法是针对启用BGP的路由器禁用TCP序列号扰乱功能:
static (inside,outside) a.b.c.d a.b.c.d netmask 255.255.255.255 norandomseq

在7.x上如果只做类似上面这样的配置是仍然有问题的:如果不做特殊配置,用作BGP md5认证的tcp option19会在穿越7.x版本的PIX/ASA防火墙时被直接"抹平"。为了支持带有md5认证的BGP还需要做出类似下面的配置,以便允许TCP option 19穿越防火墙:
class-map BGP-MD5-CLASSMAP
     match port tcp eq 179
  tcp-map BGP-MD5
     tcp-options range 19 19 allow    
  policy-map global_policy
   class BGP-MD5-CLASSMAP
    set connection advanced-options BGP-MD5 
service-policy global_policy global

更多资料可以参考下面的文档:
1. Sample Configurations of BGP Across a PIX Firewall
2. Guide for Cisco PIX 6.2 and 6.3 Users Upgrading to Cisco PIX Software Version 7.0