远程访问×××——Easy ×××

nEasy×××需要解决的问题

当两台路由器之间通信的流量出现匹配CryptoACL的流量时,就会发出建立IPSec ×××的连接。在L2L的IPSec ×××建立过程中,连接建立经历两个阶段。

1.阶段1——建立管理连接

协商采用何种方式建立管理连接

通过DH算法共享密钥信息

对等体彼此进行身份验证

2.阶段2——建立数据连接

定义对等体间保护何种流量

定义用来保护数据的安全协议

定义传输模式

按照上述过程建立连接对于远程访问×××而言就会存在一些问题。远程访问×××一般来说,一端是硬件设备,诸如路由器、防火墙等;另一端则是客户端设备,如台式机、笔记本电脑等。这时客户端一侧的安全性就会存在一定问题。大家可以试想一下,公司网关级的设备与PC的安全管理级别肯定是不同的,更何况很多员工可能需要从家里访问公司的资源,家里的电脑就会存在更多的安全隐患。而整个IPSec ×××加密传输的根本就是事先配置在设备上的预共享密钥,一旦密钥外泄,整个IPSec×××所做的努力全都付之东流。而IPSec只是考虑通过隧道传输提供一种安全的机制,并没有引入任何的用户名/密码的验证机制,所以当IPSec被应用于远程×××的时候,将在安全问题上存在很大的隐患。

另一个问题是,建立L2L IPSec ×××时,双方都有固定的IP地址,这样我们才有可能在配置Crypto Map的时候指定对方的Peer,才有可能配置Crypto ACL来定义哪些流量将触发连接的建立。但是对于远程访问×××而言,客户端一侧的IP是不可能固定的,因此,如果我们依然按照L2L的思路来建立连接是不可能的。

u在路由器上实现Easy ×××

n使用XAUTH做用户验证

1.XAUTH

IPSec协议最初的设计并未考虑用户验证的问题,所以IETF引入了一个RFC的草案——XAUTH。它是一个×××网关的增强特性,提供用户名和密码的方式来验证用户身份。由于这个过程是在两个连接建立之间完成的,所以被戏称为“阶段1.5”。谈到用户验证自然就会涉及用户名和密码的存储方式,通常情况下有两种方式:

存储在×××网关设备的内部数据库中。

存储在第三方设备上,例如一台AAA服务器。

虽然增加了用户名和密码的验证过程,但如果远程访问×××用户的PC或笔记本电脑丢失,***还是可以从本地获取到相关用户名和密码,这样就又回到最初的安全性问题上去了。所以研发人员提供了两种解决方案:

用户可以使用令牌卡,使得每次输入用户名/口令都是不同的(与令牌卡的内同相关)。

×××的管理员强制客户端不得本地存储用户名/口令,用户每次必须手动输入。

第一种方案相对第二种的安全性要略强一点,但是它在用户的易用性方面就不够好了,很多用户必须携带令牌卡,经过较长的时间才能成功登录到×××访问相关资源。而第二种方案虽然安全性方面略逊一筹,但它对于用户而言没有那么“麻烦”。这又是安全性和易用性的一次博弈,其实在网络环境中很难做到绝对的安全,对于设备厂商而言更多收到的是来自易用性方面的投诉,所以最终Cisco选择了第二种方案。安全性方面的努力更多的应该借助于对用户安全意识的培养,这当然也应是×××管理员的职责之一,所以对于网络的安全性管理往往包括网络环境管理和人员管理两个方面。

2.AAA的定义

AAA是Authentication(验证)、Authorization(授权)和Accounting(统计)的缩写,它提供了在网络设备上配置访问控制的基本框架。

(1)验证:用户是谁?

对用户的合法性进行验证,包括用户名、密码等信息的验证。

(2)授权:用户可以做什么?

在用户通过验证后,为用户指定其能够使用的服务等权限。

(3)统计:用户做过什么?

在用户验证、授权成功后,记录用户的操作等信息,以便用于记账、审计和报告。

实现AAA服务器主要使用RADIUS协议和TACACS+协议。

RADIUS(RemoteAuthentication Dial In User Service,远程验证拨入用户服务)是一个全开放的标准协议,厂商或用户可以灵活的修改RADIUS。只加密用户名和密码,以UDP方式传输数据。

TACACS+(TerminalAccess Controller Access Control System,终端访问控制器访问控制系统)是Cisco设计的私有协议。加密所有数据,以TCP方式传输数据。

3.AAA的配置

(1)在路由器上需要通过“aaa new-model”命令启用AAA。

Router(config)# aaa new-model

(2)为远程访问×××客户端进行认证。

Router(config)# aaa authentication loginauthentication_list_namemethod1 [method2……]

   aaaauthentication login命令用于指定客户端认证的方式,authentication_list_name只是该方式的名称,在配置远程×××的时候一般采用两种方式:local和group radius。

local是指本地认证方式,即在路由器上手动配置用户名和密码。

groupradius一般是通过一台AAA RADIUS服务器实现用户名和密码的验证,当客户端发送用户名和密码给路由器时,路由器会转给指定的RADIUS服务器进行验证。

(3)配置用户名和密码。

Router(config)# usernameusername { password | secret } password

如果之前的命令选择了本地验证的方式,就需要在路由器上配置用户名和密码。可以配置多个用户名和密码。以供路由器与多组客户端进行身份验证。如果选择了secret参数,路由器将自动加密用户的密钥。

(4)为远程访问×××客户端进行授权。

Router(config)# aaa authorization networkauthorization_list_namemethod1 [method2……]

   aaaauthorization network命令指定了AAA将授权客户端使用IPSec ×××隧道。authorization_list_name依然是该授权方式的名称,授权方式与认证类似。

(5)应用到静态Crypto Map。

Router(config)# crypto mapstatic_map_nameclient authentication list

authentication_list_name

Router(config)# crypto map static_map_name isakmpauthorization list

authorization_list_name

将认证和授权的过程应用到Crypto Map中,这样之前的用户名和密码验证就与远程访问×××关联起来。

n组策略

之前内同提及了一个关键问题,由于与×××网关建立连接的客户端可能会很多,所以Peer的IP地址就不会固定,CryptoACL也不会唯一。最好的解决办法就是让×××网关“推送”这些策略给客户端。但是很多情况下客户端的这些策略可能是相同的,因此在远程访问×××中引入了组的概念,将这些具有相同策略的客户端划分在一个组里,在×××网关上一次性的为一组客户端配置策略,这样在配置过程和管理过程中都将大大节省工作量。

1.地址池

根据之前所学内同,远程访问×××客户端之所以与×××网关很难建立连接,是因为客户端没有固定的IP地址(与×××网关建立连接的不只是一台PC)。在这种“动态”的情况下,最好的办法就是让×××网关像DHCP服务器一样为每个通过验证的客户端“推送”IP地址,由于客户端的IP地址是×××网关动态分配的,网关自然知道应该与哪个IP建立×××连接。

注:地址池里的地址范围不能跟公司内部的地址是同一网段。

2.DNA和网关

正像DHCP服务器,除了给客户端分配IP地址之外还会分配网关和DNS,×××网关也会给客户端推送网关和DNS。这样客户端主机就拥有了内网的IP、网关以及DNS等必备的地址资源,真正成为内网的一员。当客户端接收到这些策略后,它将只有内网的网关和DNS地址。

客户端通过×××隧道接入公司内网,就好像虚拟的与公司网络的其他主机成为同一局域网成员,原本在广域网被禁的一些协议就可以应用了,比如共享。

3.共享密钥

正如前面所讲的,在L2L的过程中,需要很据预共享密钥验算出用于加密、身份验证、完整性验证的密钥,支持后续×××连接的建立以及数据通信。在远程访问×××中×××网关需要与多组客户端“共享密钥”,因此在配置×××网关的时候需要为每组客户端设置不同的共享密钥。客户端的密钥并不是×××网关推送的,而需要用户通过客户端软件配置在主机上,而这个过程一般是由公司的×××管理员来操作实现的,那么这个密钥自然是保存在客户端主机本地,因此才会有上述讲解的“阶段1.5”的存在。

4.分离隧道

默认情况下,客户端与×××网关建立隧道后,只能访问内网授权资源。这是因为隧道会允许所有的流量,也就是说所有流量必须流经隧道到达公司内网,自然也就不允许任何流量访问外网。但对于用户而言,办公的同时访问Internet是在平常不过的需求了,所以需要针对远程访问×××配置ACL来分离隧道。

通过配置ACL,所有“permit”的流量都被加密传输,所有“deny”的流量都被明文传输,而加密的流量就是通过隧道访问公司内网的流量,明文的流量就是访问Internet的流量,将这个ACL应用到组策略中即可实现需求。

客户端通过认证后,ACL将随其他组策略一同被推送到客户端主机,此时主机的网关将变为公网网关,查看主机的路由表会发现有一条明细的路由指向×××网关,这条明细的路由就是×××客户端根据推送过来的ACL生成。

5.分离DNS

当客户端主机通过远程访问×××连接到公司内网,即使分离隧道后,客户端访问Internet的Web服务时,也需要使用公司内网的DNS解析(之前讲解过关于DNS的推送)。但这实际是一个不合理的过程,细想一下,客户端每次访问外网的某一个域名,都需要不远×××的去公司内部进行DNS解析,其实是没有必要的;但如果客户端访问的是公司内网的Web服务器就需要通过内网的DNS解析。若要实现访问不同的域名使用不同的DNS时,使用的最佳方案是分离DNS。

6.组策略的配置

(1)创建地址池

Router(config)# ip local poolpool_namefirst_ip_address last_ip_address

pool_name:地址池的名称。

first_ip_addresslast_ip_address:地址池的IP范围。

(2)创建用户组

Router(config)# crypto isakmp clientconfiguration group {group_name |

               default}

如果AAA的授权方式选择了本地授权方法,在路由器上就需要定义组从而实现组策略的授权。cryptoisakmp client configuration group命令用于创建用户组。group_name指这个组的名字,方便后续命令调用组。而default参数用于创建一个默认组,如果用户没有指定特定组,则默认使用default组,当选择default参数后,可以对默认组的参数进行修改。

(3)配置策略

创建组后将会进入子配置模式,该模式用于配置组策略。

Router(config-isakmp-group)# keypre_share_key

Router(config-isakmp-group)# pool pool_name

Router(config-isakmp-group)# dns 1st_DNS_server[2nd_DNS_server]

key命令用于配置预共享密钥,该组用户都要匹配这个密钥才能与×××网关建立管理连接。

pool命令用于应用之前配置的地址池。与key命令类似,地址池的应用也可以配置在全局模式,区别在于应用的范围。如果在全局模式,则所有连接的客户端都将被推送该地址池的IP;如果配置在组里,只有该组的客户端使用这个地址池的IP。

dns用于指定内网的DNS服务器IP,同时可以指定备份的DNS服务器IP。

Router(config)# ip access-list extendedACL_name

Router(config)# permit ip sourcesource-wildcard any


Router(config-isakmp-group)# aclACL_name_or_#

Router(config-isakmp-group)# split-dnsdomain_name

配置分离隧道的时候需要先配置ACL,这里需要强调一点,ACL是基于×××网关的角度编写的,也就是说这里的source指的是×××网关这一侧。当ACL被推送到客户端时,相对于客户端而言,source是建立×××连接后客户端被授权访问的内网资源。

   ACL配置完成后需要应用到组策略中,通过命令acl调用之前的名称或序号即可。split-dns命令用于分离dns,domain_name参数表示希望×××网关内部DNS解析的域名。

还有一个组策略的内容是save-password,意思是让客户端自动保存用户名和密码,这在之前的内容已经分析过了,让客户端保存用户名和密码会导致安全性的下降,所以Cisco产品默认情况下是要求手动输入用户名和密码的。

n动态Crypto Map

首先,让我们先回顾一下静态的Crypto Map,先从一个简单的实例入手吧。

Router(config)# crypto map benet-map 1ipsec-isakmp

Router(config-crypto-m)# match address 100

Router(config-crypto-m)# set peer 200.0.0.1

Router(config-crypto-m)# set transform-setbenet-set

本例中配置了对端的peer映射,指定了Crypto ACL,指定了传输集,当然,这些并不是所有Crypto Map的配置,但这些对于静态Crypto Map是必须的,否则映射将无法建立。这对于远程访问×××而言就变得很麻烦,因为我们无法在×××网关上实现指定对方的IP地址,这就导致上述三个要素中peer和Crypto ACL无法预先配置,而最终导致静态Crypto Map无法映射。

动态的Crypto Map简单的说就是无需上述必要配置的静态Crypto Map,这些配置将在IPSec参数协商时被动态填充。使用动态的Crypto Map必须采用ISAKMP/IKE发起协商,而且在实际远程访问×××的时候通常在×××网关上需要同时配置静态和动态的Crypto Map,因为只有一台具有静态配置的设备可以发起IPSec的隧道。也正因如此,动态的Crypto Map很少被用于L2L会话建立。

在实现远程访问×××的时候,一般会先配置transform-set,因为指定传输集与peer的IP地址无关,可以将传输集直接应用到动态Crypto Map;由于在接口上只能配置一个Crypto Map,且×××网关上必须有静态Crypto Map,所以需将动态Crypto Map应用到静态的Crypto Map中,再将静态Crypto Map应用到接口上。上述过程就是配置Crypto Map的一般思路。

1.创建动态Crypto Map

1)配置transform-set

Router(config)# crypto ipsec transform-setbenet-set esp-3des

esp-sha-hmac

Router(cfg-crypto-tran)# exit

2)创建动态Crypto Map

Router(config)# crypto dynamic-map dynamic_map_namesequence_#

Router(config-crypto-m)# set transform-setbenet-set

首先指定transform-set的名称和加密验证方式,该命令已在之前内容讲解过,这里直接应用esp-3des、esp-sha-hmac两种加密验证方式。之后通过crypto dynamic-map创建动态Crypto Map,与静态的Crypto Map类似,dynamic_map_name是指动态Crypto Map的命令,sequence_#是序号,用于定义优先级。在动态Crypto Map中定义transform-set。

2.应用动态Crypto Map

1)应用到静态Crypto Map

Router(config)# crypto map static_map_nameseq_# ipsec-isakmp dynamic dynamic_map_name

2)应用到接口

Router(config)# int f0/0

Router(config-if)# crypto mapstatic_map_name

配置静态Crypto Map的命令大家已经很熟练了,这里只是新增了参数dynamic,用于调用动态Crypto Map的名称。这里大家也许会有疑问,在静态Crypto Map下面没有配置任何具体的参数,例如peer和Crypto ACL。因为这里调用了动态的Crypto Map,这是静态Crypto Map存在的原因,之前我们已经配置了相关命令向客户端推送peer和ACL,当IPSec连接建立的时候,×××网关会自动根据推送的配置内容来匹配这些要素,只要客户端的密钥以及用户名和密码验证都正确。即使之前并没有配置分离隧道,Crypto ACL也会推送到客户端,只不过推送的内容是全部匹配的。

另一个关键的问题是seq_#,调用动态Crypto Map的序号一般配置得比较大,这样优先级就会比较低。原因是×××网关上可能会配置多种×××,例如远程访问×××和L2L ×××并存。但由于实际需求,这些×××使用的是同一个名称的Crypto Map(接口只能同时生效一个Crypto Map),这时就会遇到先匹配哪个Crypto Map的问题,这取决于序列号。由于L2L ×××需要指定具体的peer和CryptoACL,因此L2L的Crypto Map更加“明细”,优先级应该配置得更高一些。否则,所有的Map更加“明细”,优先级应该配置得更高一些。否则,所有的Map就会先匹配“不明细”的动态Crypto Map,而导致L2L ×××无法建立。

n实验案例

在路由器上实现Easy ×××

如图所示,一台笔记本电脑从外网通过远程×××连接到内网,R1路由器的内网IP地址是192.168.1.0/24网段,DNS是192.168.1.10,且有一台Web服务器供内网用户访问,域名为www.benet.com。×××网关预将192.168.10.200-210地址段的IP推送给客户端主机,而且客户端在访问内网资源的同时希望可以访问Internet。

spacer.gif

具体步骤:

1.R1的配置

R1(config)# int f0/0

R1(config-if)# ip address 192.168.1.2255.255.255.0

R1(config-if)# no sh

R1(config-if)# int f1/0

R1(config-if)# ip address 192.168.2.1255.255.255.0

R1(config-if)# no sh

R1(config)# ip route 0.0.0.0 0.0.0.0192.168.2.2


R1(config)# aaa new-model

R1(config)# aaa authentication loginbenet-authen local

R1(config)# aaa authorization networkbenet-author local

R1(config)# username benet password cisco

R1(config)# crypto isakmp policy 10

R1(config-isakmp)# encryption 3des

R1(config-isakmp)# hash sha

R1(config-isakmp)# authentioncationpre-share

R1(config-isakmp)# group 2

R1(config-isakmp)# exit

R1(config)# ip local pool benet-pool192.168.10.200 192.168.10.210

R1(config)# access-list 101 permit ip192.168.1.0 0.0.0.255  any

R1(config)# crypto isakmp clientconfiguration group test-group

R1(config-isakmp-group)# key benet-key

R1(config-isakmp-group)# pool benet-pool

R1(config-isakmp-group)# dns 192.168.1.10

R1(config-isakmp-group)# acl 101

R1(config-isakmp-group)# split-dnsbenet.com

R1(config-isakmp-group)# exit

R1(config)# crypto ipsec transform-setbenet-set esp-3des esp-sha-hmac

R1(cfg-crypto-tran)# exit

R1(config)# crypto dynamic-map benet-dymap1

R1(config-crypto-m)# set transform-setbenet-set

R1(config-crypto-m)# exit

R1(config)# crypto map benet-stamap 1000ipsec-isakmp dynamic

benet-dymap

R1(config)# crypto map benet-stamap clientauthentication list

benet-authen

R1(config)# crypto map benet-stamap isakmpauthorization list

benet-author

R1(config)# crypto map benet-stamap clientconfiguration address respond

//用于让客户端先发起连接

R1(config)# int f1/0

R1(config-if)# crypto map benet-stamap

2.ISP的配置

只需配置好IP地址

3.Web的配置

Web(config)# int f0/0

Web(config-if)# ip address 192.168.1.1255.255.255.0

Web(config-if)# no sh

Web(config)# ip route 0.0.0.0 0.0.0.0192.168.1.2

4.PC的配置

1)配置好IP地址和网关

spacer.gif

2)安装Cisco System ××× Client软件,双击以.msi为后缀的安装程序(注意:保证系统的分辨率必须是800×600)

spacer.gif

3)根据安装向导安装。安装成功后,重启系统。

spacer.gif

4)运行Cisco System ××× Client程序。

spacer.gif

5)单击”New”按钮新建×××连接。如图所示:

spacer.gif

6)如图所示,Connection Entry是×××连接的名称,因为客户端可能需要连接很多×××,×××名称可以用于客户端用户区分不同的连接;Description是这个×××连接的描述信息;Host后面填写的IP地址是指×××网关的IP,相当于为客户端指定对端的peer。中间部分填写的Name和Password并不是用户名和密码,这里一定要注意,而是策略组的组名和密钥key。最后单击“Save”按钮保存。

spacer.gif

   7)保存成后之后,就会看到有一行记录。如图所示:

spacer.gif

   8)然后单击“Connect”按钮或是双击那行记录,连接×××服务器,需要输入用户名和密码。如图所示:

spacer.gif

   9)连接成功后,可以看到PC客户端有两块网卡信息。如图所示:

spacer.gif

   10)验证结果:

   PC客户机能够访问公司内部的Web服务器。如图所示:

spacer.gif

   PC客户机也能够访问Internet。如图所示:

spacer.gif

在路由器上配置Easy ×××有几点注意:

1.密钥组不能使用密钥组1

2.不能使用AH安全协议

3.不能使用传输模式

4.只能使用NAT-T