远程访问VPN-easy VPN

easy VPN需要解决的问题(回顾站点到站点的ipsec VPN)
当两台路由器之间通信的流量出现匹配crypto ACL流量时,就会触发建立ipsec VPN的连接。在L2L的ipsec VPN建立过程中,连接建立经历两个阶段。

1、阶段1:建立管理连接
1)协商采用何种方式建立管理连接
2)通过DH算法共享秘钥信息
3)对等体彼此进行身份验证

远程访问VPN-easy VPN

2、阶段2:建立数据连接
1)定义对等体间保护何种流量
2)定义用来保护数据的安全协议
3)定义传输模式

远程访问VPN-easy VPN

按照上述过程建立连接对于远程访问VPN而言就会存在一些问题。远程访问VPN一般来说,一端是硬件设备,如路由器、防火墙等;另一端则是客户端设备,如台式机、笔记本电脑等。这是客户端一侧的安全性就会存在一定问题。大家可以试想一下,公司网关级的设备与PC的安全管理级别肯定是不同的,更何况很多员工可能要从家里访问公司的资源,家用的电脑就会存在更多的安全隐患。而整个ipsec VPN加密传输的根本就是事先配置在设备上的预共享秘钥,一旦秘钥外泄,整个ipsec VPN所作的努力全都会付之东流。而ipsec只是考虑通过隧道传输提供一种安全的机制,并没有引入任何的用户名/密码的验证机制,所以当ipsec被应用于远程VPN的时候,将在安全问题上存在很大的隐患。
另一个问题是,建立L2L IPSEC VPN时,双方都有固定的ip地址,这样我们才有可能在配置crypto map的时候指定对方的peer,才有可能配置crypto ACL来定义哪些流量将触发链接的建立。但是对于远程访问VPN而言,客户端一侧的ip是不可能固定的,因此,如果我们依然按照L2L的思路来建立链接是不可能的。

路由器上实现easy VPN
1、使用XAUTH做用户验证
1)XAUTH
Ipsec协议最初的设计并未考虑用户验证的问题,所以IETF引入了一个RFC的草案--XAUTH。它是一个VPN网关的增强特性,提供用户名和密码的方式来验证用户身份。由于这个过程是在两个连接建立之间完成的,所以被戏称为“阶段1.5”。谈到用户验证自然就会涉及用户名和密码的存储方式,通常情况下有两种方式。
存储在VPN网关设备的内部数据库中。
存储在第三方设备上,如一台AAA服务器。
虽然增加了用户名和密码的验证过程,但如果远程访问的VPN用户的PC或笔记本电脑丢失,黑客还是可以从本地或得到相关用户名和密码,这样就又回到最初的安全性问题上去了。所以研发人员提供了两种解决方案。
用户可以使用令牌卡,使得每次输入用户名/口令都是不同的(与令牌卡的内容相关)。
VPN的管理员强制客户端不得本地存储用户名/口令,用户每次必须手动输入。
第一种方案相对第二种的安全性要略强一点,但是它在用户的易用性方面就不够好了,很多用户必须携带令牌卡,经过较长的时间才能成功登录到VPN访问相关资源。而第二种方案虽然安全性方面略逊一筹,但它对于用户而言没有那么麻烦,这又是安全性和易用性的一次博弈,其实在网络环境中很难做到绝对的安全,对于设备厂商而言更多收到的是来自易用性方面的投诉,所以cisco选择了第二种方案。安全性方面的努力更多地应该借助于对用户安全意识的培养。这当然也是VPN管理员的职责之一。所以对于网络的安全性管理往往包括网络环境管理和人员管理两个方面。
2)AAA的定义
AAA是authentication(验证)、authorization(授权)和accounting(统计)的缩写,它提供了在网络设备上配置访问控制的基本框架。
验证:用户是谁
对用户的合法性进行验证,包括用户名,密码等信息的验证。
授权:用户可以做什么?
在用户通过验证后,为用户指定其能够使用的服务器等等权限。
统计:用户做过什么?
在用于验证、授权成功后,记录用户的操作等信息,以便用于记账、审计和报告。

实现AAA服务器主要使用RADIUS协议和TACACS+协议。
RADIUS(remote authentication dial in user server,远程验证拨入用户服务)是一个开发的标准协议,厂商或用户可以灵活地修改RADIUS。只加密数据包中的密码。基于UDP协议。
TACACS+(terminal access controller access control system,终端访问控制器访问控制系统)是cisco设计的私有协议。对整个数据包加密。基于TCP协议。

3)AAA的配置
第一步:在路由器上需要通过aaa new-model命令启用AAA。
R1(config)#aaa new-model

第二步:为远程访问VPN客户端进行认证。
R1(config)#aaa authentication login vpn_authen local
Aaa authentication login命令用于指定客户端的认证的方式,authentication_list_name只是该方式的名称,在配置远程VPN的时候一般采用两种方法:local和group radius。

Local:是指本地认证方式,即在路由器上手动配置用户名和密码。
Group radius:一般是通过一台AAA RADIUS服务器实现用户名和密码的验证,当客户端发送用户名和密码给路由器时,路由器会转给指定的RADIUS服务器进行验证。

第三步:配置用户名和密码。
语法:Username username {password | secret} password
R1(config)#username cisco password cisco
如果指定了secret,路由器将自动加密用户的密码。

第四步:为远程访问VPN客户端进行授权。
语法:Aaa authentication network authentication_list_name method1 [method2......]
Aaa authentication network:指定AAA将授权客户端使用IPSEC VPN隧道。

R1(config)#aaa authorization network vpn_author local

5)应用到静态crypto map。
R1(config)#crypto map mymap client authentication list vpn_authen
R1(config)#crypto map mymap isakmp authorization list vpn_author
将认证和授权的过程应用到crypto map中,这样之前的用户名和密码验证就能与远程访问VPN关联起来。

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

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

远程访问VPN-easy VPN

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

远程访问VPN-easy VPN

3)共享秘钥
在L2L的过程中,需要根据预共享秘钥演算出用于加密,身份验证,完整性验证的秘钥,支持后续VPN连接的建立及数据通信。在远程访问VPN中VPN网关需要与多组客户端“共享秘钥”,因此在配置VPN网关的时候需要为每组客户端设置不同的共享秘钥。客户端的秘钥并不是VPN网关推送的,而需要用户通过客户端软件配置在主机上,而这个过程一般是由公司的VPN管理员操作实现的,那么这个秘钥自然是保存在客户端主机本地。

远程访问VPN-easy VPN

4)分离隧道
默认情况下,客户端与VPN网关建立隧道后,只能访问内网授权资源。这是因为隧道会允许所有的流量,也就是说所有流量必须经过隧道到达公司的内网,自然也就不允许任何流量访问外网。但对于用户而言,办公的同时访问internet是再平常不过的需求了,所以需要针对远程访问VPN配置ACL来分离隧道。
通过配置ACL,所有permit的流量都被加密传输,所有deny的流量都被明文传输,而加密的流量就是通过隧道访问公司内网的流量,明文的流量就是访问internet的流量,将这个ACL应用到组策略中即可实现需求。

远程访问VPN-easy VPN


远程访问VPN-easy VPN

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

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

远程访问VPN-easy VPN

当vpn网关上配置了分离dns后,客户端访问www.benet.com的时候就会使用内网dns解析,访问www.cisco.com的时候就会使用外网dns解析。

6)组策略的配置
第一步:创建地址池
Ip local pool pool_name first_ip_address last_ip_address
Pool_name:地址池的名称。
First_ip_address last_ip_address:地址池的ip范围。

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

第三步:配置策略
创建组后将会进入子配置模式,该模式用于配置组策略。
Key pre_share_key
Pool pool_name
Dns 1st_dns_server [2nd_dns_server]
Key命令用于配置预共享秘钥,该组用户都要配置这个秘钥才能与VPN网关建立管理连接。
Pool命令用于应用之前配置的地址池。与KEY命令类似,地址池的应用也可以配置在全局模式,区别在于应用的范围。如果在全局模式,那么所有连接的客户端都被推送该地址池的ip;如果配置在组里,那么只有该组的客户端使用这个地址池的IP。
Dns用于指定内网的dns服务器的ip,同时可以指定备份的dns服务器的ip。

Ip access-list extended acl_name
Permit ip source source-wildcard any
Acl acl_nameor#
Split-dns domain_name

配置分离隧道的时候要先配置acl,这里需要强调一点,acl是基于vpn网关的角度编写的,也就是说这里的source指的是VPN网关这一侧。当ACL被推送到客户端时,相对于客户端而言,source是建立vpn连接后客户端被授权访问的内网资源。
Acl配置完成后需要应用到组策略中,通过命令ACL调用之前的名称或序列号即可。Split-dns命令用于分离dns,domain_name参数表示希望VPN网关内部dns解析的域名。分离dns的命令如下:
Split-dns benet.com

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

上述给出的只是较为常见的组策略,除此之外还有很多内容,如果大家希望了解更过,可以到cisco的官方网站查看相关资料。

3、动态crypto map
首先,让我们回顾一下静态的crypto map,先从一个简单的实例入手吧。

远程访问VPN-easy VPN

上面的例子中配置了对端的peer映射,指定了crypto acl,指定了传输集,当然,这些并不是所有crypto map的配置,但这些对于静态crypto map是必须的,否则映射无法建立。这对于远程访问VPN而言就变得很麻烦,因为我们无法在VPN网关上实现指定对方的IP地址,这就导致上述三个要素中peer 和crypto acl无法预先配置,而最终导致静态crypto map无法映射。
动态的crypto map简单的说就是无需上述必要配置的静态crypto map,这些配置将在ipsec 参数协商时被动态填充。使用动态的crypto map必须采用isakmp/ike发起协商,而且在实现远程访问vpn的时候通常在vpn网关上需要同时配置静态和动态的crypto map,因为只有一台具有静态配置的设备可以发起ipsec隧道。也正因如此,动态的crypto map很少被用于L2L会话建立。

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

1)创建动态crypto map
第一步:配置transform-set
Cyrpto ipsec transform-set ydw-set esp-3des esp-sha-hmac

第二步:创建动态crypto map
Crypto dynamic-map dynamic_mapname sequence#
Set transform-set ydw-set

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

2)应用动态crypto map
第一步:应用到静态crypto map
Crypto map static_mapname seq# ipsec-isakmp dynamic dynamic_map_name

第二步:应用到接口
Int f0/0
Crypto map static_map_name

配置静态crypto map命令大家已经知道了,这里只是新增了参数dynamic,用于调用动态crypto map的名称。这里大家也许会有疑问,在静态crypto map下面没有配置任何具体的参数,如peer和crypto acl。因为这里调用了动态的crypto map,这是静态crypto map存在的原因,之前我们已经配置了相关命令向客户端推送peer和acl,当ipsec连接建立的时候,vpn网关会自动根据推送的配置内容来匹配这些要素,只要客户端的秘钥及用户名和密码验证都正确。即使之前没有配置分离隧道,crypto acl也会推送到客户端,只不过推送的内容是全部匹配的。
另一个关键的问题是seq_#,调用动态crypto map的序列号一般配置的比较大,这样优先级就会比较低。原因是vpn网关上可能配置多种vpn,如远程访问vpn和L2L vpn并存。但是由于实际需求,这些vpn使用的是同一个名称的crypto map(接口只能同时生效一个crypto map)。这是就会遇到先匹配那个crypto map的问题,这取决于序列号。由于L2L vpn需要指定具体的peer和crypto acl,因此L2L的crypto map更加“明细”,优先级应该配置的高一些。否则,所有的map就会先匹配“不明细”的动态crypto map,而导致L2L vpn无法建立。

案例一
1)配置R1的ip地址以及路由。

远程访问VPN-easy VPN

2)配置R2的ip地址:

远程访问VPN-easy VPN

3)配置内网以及internet客户端的地址和网关

远程访问VPN-easy VPN


远程访问VPN-easy VPN

4)内网客户端PING通网关,但不能ping通internet客户端。

远程访问VPN-easy VPN

PC2不能PING通PC1

远程访问VPN-easy VPN


远程访问VPN-easy VPN

5)在R1上配置远程访问VPN。
第一步:配置AAA和IKE

远程访问VPN-easy VPN

第二步:配置组策略

远程访问VPN-easy VPN

第三步:配置MAP并应用

远程访问VPN-easy VPN

6)在internet客户端PC2上安装easy vpn client。

远程访问VPN-easy VPN

重新启动电脑:

远程访问VPN-easy VPN

新建连接:

远程访问VPN-easy VPN

填写如下信息:

远程访问VPN-easy VPN

连接之后输入用户名和密码

远程访问VPN-easy VPN

7)在客户端上查看网络连接,多出一个vpn连接的网卡。

远程访问VPN-easy VPN

查看本地连接2的ip地址,就是地址池的第一个地址172.16.10.1。

远程访问VPN-easy VPN

8)使用internetPC2 ping PC1

远程访问VPN-easy VPN


远程访问VPN-easy VPN

9)在内网的PC1服务器上共享文件夹“市场资料”

远程访问VPN-easy VPN

在internetPC2使用私有地址访问内网共享文件夹

远程访问VPN-easy VPN

到此为止实验成功了,实现了在internet上可以使用私有地址访问公司内部文件服务器的文件。

在实际工作中,公司的网关往往会使用防火墙来实现,所以更过的情况是需要通过防火墙来实现远程访问VPN。学习VPN的时候,不能只会配置命令,应该更多地关心其原理及为什么如此配置,因为将来的实际工作环境是多变的,只有掌握了原理才能以不变应万变。

在防火墙上实现easy VPN
1、防火墙与路由器配置的区别
1)XAUTH的配置
防火墙上默认已经启用了AAA,而且通过本地认证,所以不像路由器配置AAA时那么复杂,只需在本地指定用户名和密码即可。

Asa(config)# username ydw password pwd123

2)定义组策略
防火墙的组策略与路由器的组策略从原理角度看基本相同,不同的只是配置命令。防火墙定义组策略时,依然可以定义在本地或一台AAA服务器上,可以通过如下命令实现。
Asa(config)# ip local pool ydw-pool 172.16.10.1-172.16.10.10
Asa(config)# group-policy ydw-group {internal | external}
Asa(config)# group-policy ydw-group attributes
Asa(config-group-policy)# dns-server value 192.168.1.100
Asa(config-group-policy)# address-pool value ydw-pool
Asa(config-group-policy)# split-tunnel-policy tunnelspecified
Asa(config-group-policy)# split-tunnel-network-list value split-acl
Asa(config-group-policy)# split-dns yyy.com

Group-policy命令定义组策略的关键字,ydw-group是组策略的名称,建议在命名时体现出各组成员的身份,便于后续管理。Internal表示策略定义在本地,external表示策略定义在第三方服务器上(一般是AAA服务器上)。
Dns-server value用于指定dns服务器地址,address-pool value用于指定地址池,split-dns yyy.com用于分离dns,这些命令与路由器类似。分离隧道的命令中新增了split-tunnel-policy命令,该参数后有三个选项,tunnelall、tunnelspecified、excludespecified。
Tunnelall:所有流量必须走隧道,即不做分离隧道,这是默认设置。
Tunnelspcified:所有匹配acl的流量走隧道。
Excludespecified:所有不匹配ACL的流量走隧道。

在防火墙上有一个默认的组策略,默认的名称为dfltgrppolicy。这可能是组策略配置在防火墙和路由器上的最大区别。这里需要说明一下,其实并不是防火墙和路由器区别,在防火墙IOS更新到7.0版本后,cisco经历了较大的革新,在早期6.3版本(也就是pix时代)还没有这些新特性,所以本小节讲述的配置区别实际指定是7.0版本更新后的新特性。

这个默认组可以通过命令show run all group-policy DfltGrpPolicy(此默认策略区分大小写)查看。
Asa#show run all group-policy DfltGrpPolicy

远程访问VPN-easy VPN

Vpn-tunnel-protocol ipsec l2tp-ipsec webvpn指采用默认策略后,vpn网关允许客户端连接的方式包括ipsec(远程访问ipsec协议)、l2tp-ipsec(二层vpn协议)、webvpn(基于web的vpn方式)。

3)定义隧道组
防火墙可以配置两种默认的隧道组,defaultragroup用于远程访问用户,defaultl2lgroup用于站点到站点的会话。可以直接修改这些默认隧道组的属性,也可以直接定义特定的隧道组。
为远程访问会话配置隧道组包括两组属性:general和ipsec。
Asa(config)# ip local pool ydw-pool 172.16.10.1-172.16.10.10
Asa(config)# tunnel-group ydw-group type ipsec-ra
Asa(config)# tunnel-group ydw-group general-attributes
Asa(config-general)# address-pool ydw-pool
Asa(config-general)# default-group-policy ydw-group
Asa(config-general)# exit
Asa(config)# tunnel-group ydw-group ipsec-attributes
防火墙从7.0版本后引入隧道组的概念,使得给用户组授权更加灵活。在ipsec属性中,配置了key,在general属性中使用default-group-policy命令调用了组策略。可以这样理解,通过隧道组可以赋予拥有相同key的用户特有的组策略。

4)定义用户组
很多情况下,不是针对拥有相同key的用户设置属性,而是希望针对拥有相同用户名的用户设置属性时,就需要用到用户组。
Asa(config)# username ydw attributes
Asa(config)# vpn-group-policy ydw-group
Asa(config-username)#vpn-tunnel-protocol [ipsec] [webvpn]

Vpn-group-policy用于应用组策略,vpn-tunnel-protocol用于指定连接方式。这些属性是基于ydw用户而设定的。
实际情况是,管理员一般会配置多个组策略,或基于不同用户,或基于拥有不同key的成员分配这些属性组,这是模块化的思想,在配置和管理方面更加方便快捷。如果大家仔细考虑就会发现,组策略可以直接应用到crypto map,可以应用到隧道组,也可以应用到用户组,那么如果在这三个地方都用到了相同类型的组策略,而策略内容确实不同的,最终那个组策略会生效呢?比如说,ydw用户同时是拥有ydw-key的用户,但是在这两个组中应用的组策略时不同的,结果会怎样?这三个地方时有优先级去人的,优先级最高的是用户组,其次是隧道组,应用在crypto map中优先级是最低的。其实这很好理解,应用在crypto map中的策略是针对ipsec vpn映射的,也就是基于整个vpn连接而言的策略设置,这里的策略将会面向所有使用使用该vpn隧道的成员,是应用面最广的策略。隧道组是针对拥有相同key用户而设置的策略,应用面相对小,但更具有针对性。而用户组则是针对用户名设置的策略,最具有针对性。所以,我们可以先编写最具通用性的策略应用在cryptp map及隧道组中,再针对某些用户所具有的特殊性编写用户组策略。

综合案例:在ASA上实现VPN

远程访问VPN-easy VPN

1)配置所有设备的ip地址
配置PC1:

远程访问VPN-easy VPN

配置SW1:

远程访问VPN-easy VPN

配置ASA:

远程访问VPN-easy VPN

配置R1:

远程访问VPN-easy VPN

配置pc2:

远程访问VPN-easy VPN

2)配置ASA的路由
.
route outside 0.0.0.0 0.0.0.0 202.1.1.2
.
3)在ASA上配置VPN
配置IKE:

远程访问VPN-easy VPN

配置组策略:

远程访问VPN-easy VPN

配置隧道组:

远程访问VPN-easy VPN

配置预共享秘钥:

远程访问VPN-easy VPN

配置map并应用:

远程访问VPN-easy VPN


配置传输集-----配置动态map-----配置静态map-----应用到接口。

4)在客户端pc2上安装vpn软件,并连接。

远程访问VPN-easy VPN


远程访问VPN-easy VPN

5)查看客户端PC2上的网络。

远程访问VPN-easy VPN

6)在客户端PC2上访问内网PC的共享文件夹。

远程访问VPN-easy VPN

7)在PC2上查看获取到的vpn的地址,并且ping通公司内网的私有地址。

猜你喜欢

转载自blog.51cto.com/13555423/2105934
VPN