此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍Cisco IOS®路由器作为AnyConnect安全套接字层VPN(SSL VPN)头端的基本配置。
Cisco 建议您了解以下主题:
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
对于RTU许可,当配置了第一个webvpn功能(即,webvpn网关GATEWAY1)且接受最终用户许可协议(EULA)时,将启用评估许可证。60天后,此评估许可证将成为永久许可证。这些许可证基于荣誉,需要购买纸质许可证才能使用该功能。此外,RTU不仅限于特定的使用次数,还允许路由器平台可同时支持的最大并发连接数。
这些Bug ID为AnyConnect带来了重要功能或修复:
在IOS路由器头端上配置AnyConnect的第一步是确认许可证已正确安装(如果适用)并启用。有关不同版本的许可详细信息,请参阅上一节中的许可信息。它取决于代码和平台的版本,即show license是列出SSL_VPN还是securityk9许可证。无论版本和许可证如何,EULA都需要被接受,并且许可证将显示为活动。
为了将AnyConnect映像上传到VPN,头端有两种用途。首先,仅允许在AnyConnect头端上存在AnyConnect映像的操作系统进行连接。例如,Windows客户端需要在头端安装Windows软件包,Linux 64位客户端需要Linux 64位软件包,等等。其次,连接后,安装在头端的AnyConnect映像将自动下推至客户端计算机。首次连接的用户将能够从Web门户下载客户端,而返回的用户将能够升级,前提是头端上的AnyConnect软件包比其客户端计算机上安装的软件包更新。
AnyConnect软件包可通过思科软件下载网站的AnyConnect安全移动客户端部分获取。虽然有许多选项可用,但要安装在头端的软件包将标有操作系统和头端部署(PKG)。 AnyConnect软件包目前可用于以下操作系统平台:Windows、Mac OS X、Linux(32位)和Linux 64位。请注意,对于Linux,有32位和64位软件包。每个操作系统都要求在头端安装正确的软件包,以便允许连接。
下载AnyConnect软件包后,可通过TFTP、FTP、SCP或其他几个选项使用copy命令将其上传到路由器的闪存。示例如下:
copy tftp: flash:/webvpn/ Address or name of remote host []? 192.168.100.100 Source filename []? anyconnect-win-3.1.08009-k9.pkg Destination filename [/webvpn/anyconnect-win-3.1.08009-k9.pkg]? Accessing tftp://192.168.100.100/anyconnect-win-3.1.08009-k9.pkg... Loading anyconnect-win-3.1.08009-k9.pkg from 192.168.100.100 (via GigabitEthernet0): !!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [OK - 37997096 bytes] 37997096 bytes copied in 117.644 secs (322984 bytes/sec)
将AnyConnect映像复制到路由器的闪存后,必须通过命令行安装该映像。在安装命令末尾指定序列号时,可以安装多个AnyConnect软件包;这样,路由器就可以充当多个客户端操作系统的头端。安装AnyConnect软件包时,如果最初未在闪存中复制,它还会将其移动到闪存:/webvpn/目录。
crypto vpn anyconnect flash:/webvpn/anyconnect-win-3.1.08009-k9.pkg sequence 1 SSLVPN Package SSL-VPN-Client (seq:1): installed successfully
在15.2(1)T之前发布的代码版本中,安装PKG的命令略有不同。
webvpn install svc flash:/webvpn/anyconnect-win-3.1.08009-k9.pkg sequence 1
当配置SSL或实施公钥基础设施(PKI)和数字证书的任何功能时,证书签名需要Rivest-Shamir-Adleman(RSA)密钥对。此命令将生成RSA密钥对,然后在生成自签名PKI证书时使用该密钥对。使用2048位的模数(不是要求),但建议使用可用的最大模数,以增强安全性并与AnyConnect客户端计算机兼容。还建议使用描述性密钥标签,该标签将与密钥管理一起分配。可以使用show crypto key mypubkey rsa命令确认密钥生成。
注意:由于使RSA密钥可导出存在许多安全风险,建议的做法是确保将密钥配置为不可导出,这是默认设置。本文档将讨论导出RSA密钥时涉及的风险:在PKI中部署RSA密钥。
crypto key generate rsa label SSLVPN_KEYPAIR modulus 2048
The name for the keys will be: SSLVPN_KEYPAIR
% The key modulus size is 2048 bits
% Generating 2048 bit RSA keys, keys will be non-exportable...
[OK] (elapsed time was 3 seconds)
show crypto key mypubkey rsa SSLVPN_KEYPAIR
% Key pair was generated at: 14:01:34 EDT May 21 2015
Key name: SSLVPN_KEYPAIR
Key type: RSA KEYS
Storage Device: not specified
Usage: General Purpose Key
Key is not exportable.
Key Data:
30820122 300D0609 2A864886 F70D0101 01050003 82010F00 3082010A 02820101
00C4C7D6 F9533CD3 A5489D5A 4DC3BAE7 6831E832 7326E322 CBECC41C 8395A5F7
4613AF70 827F581E 57F72074 FD803EEA 693EBACC 0EE5CA65 5D1875C2 2F19A432
84188F61 4E282EC3 D30AE4C9 1F2766EF 48269FE2 0C1AECAA 81511386 1BA6709C
7C5A2A40 2FBB3035 04E3770B 01155368 C4A5B488 D38F425C 23E430ED 80A8E2BD
E713860E F654695B C1780ED6 398096BC 55D410DB ECC0E2D9 2621E1AB A418986D
39F241FE 798EF862 9D5EAEEB 5B06D73B E769F613 0FCE2585 E5E6DFF3 2E48D007
3443AD87 0E66C2B1 4E0CB6E9 81569DF2 DB0FE9F1 1A9E737F 617DC68B 42B78A8B
952CD997 78B96CE6 CB623328 C2C5FFD6 18C5DA2C 2EAFA936 5C866DE8 5184D2D3
6D020301 0001
成功生成RSA密钥对后,必须使用路由器的信息和RSA密钥对配置PKI信任点。应使用用户用于连接AnyConnect网关的IP地址或完全限定域名(FQDN)配置主题名称中的公用名(CN);在本例中,客户端尝试连接时使用FQDN fdenofa-SSLVPN.cisco.com。虽然它不是必填项,但当您正确输入CN时,它有助于减少登录时提示的证书错误数。
注意:可以使用由第三方CA颁发的证书,而不是使用路由器生成的自签名证书。这可以通过以下几种不同方法完成:为PKI配置证书注册。
crypto pki trustpoint SSLVPN_CERT enrollment selfsigned subject-name CN=fdenofa-SSLVPN.cisco.com rsakeypair SSLVPN_KEYPAIR
正确定义信任点后,路由器必须使用crypto pki enroll命令生成证书。通过此过程,可以指定一些其他参数,如序列号和IP地址。但是,这并不是必需的。证书生成可通过show crypto pki certificates命令进行确认。
crypto pki enroll SSLVPN_CERT % Include the router serial number in the subject name? [yes/no]: no % Include an IP address in the subject name? [no]: no Generate Self Signed Router Certificate? [yes/no]: yes Router Self Signed Certificate successfully created show crypto pki certificates SSLVPN_CERT Router Self-Signed Certificate Status: Available Certificate Serial Number (hex): 01 Certificate Usage: General Purpose Issuer: hostname=fdenofa-892.fdenofa.lab cn=fdenofa-SSLVPN.cisco.com Subject: Name: fdenofa-892.fdenofa.lab hostname=fdenofa-892.fdenofa.lab cn=fdenofa-SSLVPN.cisco.com Validity Date: start date: 18:54:04 EDT Mar 30 2015 end date: 20:00:00 EDT Dec 31 2019 Associated Trustpoints: SSLVPN_CERT
虽然可以使用外部身份验证、授权和记帐(AAA)服务器,但本例中使用本地身份验证。这些命令将创建用户名VPNUSER,并创建名为SSLVPN_AAA的AAA身份验证列表。
aaa new-model aaa authentication login SSLVPN_AAA local username VPNUSER password TACO
必须创建本地IP地址池,AnyConnect客户端适配器才能获取IP地址。确保配置足够大的池以支持最大数量的同步AnyConnect客户端连接。
默认情况下,AnyConnect将在全隧道模式下运行,这意味着客户端生成的任何流量都将通过隧道发送。由于这通常不理想,因此可以配置访问控制列表(ACL),该列表定义应该或不应该通过隧道发送的流量。与其他ACL实施一样,末尾的隐式deny消除了显式deny的需要;因此,只需为应通过隧道传输的流量配置permit语句。
ip local pool SSLVPN_POOL 192.168.10.1 192.168.10.10 access-list 1 permit 192.168.0.0 0.0.255.255
动态VTI 为每个VPN会话提供按需独立的虚拟访问接口,为远程访问VPN提供高度安全且可扩展的连接。DVTI技术取代了动态加密映射和帮助建立隧道的动态星型方法。 由于DVTI的功能与任何其他实际接口类似,因此它们支持更复杂的远程访问部署,因为一旦隧道处于活动状态,它们就支持QoS、防火墙、每用户属性和其他安全服务。
interface Loopback0 ip address 172.16.1.1 255.255.255.255
!
interface Virtual-Template 1 ip unnumbered Loopback0
WebVPN网关定义AnyConnect头端将使用的IP地址和端口,以及将提供给客户端的SSL加密算法和PKI证书。默认情况下,网关将支持所有可能的加密算法,具体取决于路由器上的Cisco IOS版本。
webvpn gateway SSLVPN_GATEWAY ip address 209.165.201.1 port 443 http-redirect port 80 ssl trustpoint SSLVPN_CERT inservice
WebVPN上下文和组策略定义一些用于AnyConnect客户端连接的附加参数。对于基本AnyConnect配置,情景仅用作用于调用将用于AnyConnect的默认组策略的机制。但是,情景可用于进一步自定义WebVPN启动页和WebVPN操作。在定义的策略组中,SSLVPN_AAA列表配置为用户所属的AAA身份验证列表。functions svc-enabled 命令是允许用户通过浏览器连接AnyConnect SSL VPN客户端而非仅通过WebVPN的配置。最后,其他SVC命令定义仅与SVC连接相关的参数:svc address-pool告知网关将SSLVPN_POOL中的地址分发给客户端,svc split include根据上面定义的ACL 1定义拆分隧道策略,svc dns-server定义将用于域名解析的DNS服务器。使用此配置,所有DNS查询都将发送到指定的DNS服务器。在查询响应中收到的地址将规定流量是否通过隧道发送。
webvpn context SSLVPN_CONTEXT
virtual-template 1
aaa authentication list SSLVPN_AAA
gateway SSLVPN_GATEWAY inservice
policy group SSLVPN_POLICY functions svc-enabled svc address-pool "SSLVPN_POOL" netmask 255.255.255.0 svc split include acl 1 svc dns-server primary 8.8.8.8
default-group-policy SSLVPN_POLICY
与ASA不同,Cisco IOS没有内置的GUI界面,无法帮助管理员创建客户端配置文件。需要使用独立配置文件编辑器单独创建/编辑AnyConnect客户端配置文件。
提示:查找anyconnect-profileeeditor-win-3.1.03103-k9.exe。
要让路由器部署配置文件,请执行以下步骤:
crypto vpn annyconnect profile SSLVPN_PROFILE flash:test-profile.xml
提示:在15.2(1)T以前的Cisco IOS版本上,需要使用以下命令:webvpn import svc profile <profile_name> flash:<profile.xml>
3.在上下文下,使用此命令将配置文件链接到该上下文:
webvpn context
SSLVPN_CONTEXTpolicy group
SSLVPN_POLICYsvc profile
SSLVPN_PROFILE
注意:使用命令查找工具(仅限注册用户)可获取有关本部分所使用命令的详细信息。
使用本部分可确认配置能否正常运行。
配置完成后,当您通过浏览器访问网关地址和端口时,它将返回WebVPN启动页。
登录后,将显示WebVPN主页。在此处,单击隧道连接(AnyConnect)。使用Internet Explorer时,使用ActiveX向下推送并安装AnyConnect客户端。如果未检测到,将改用Java。所有其他浏览器都立即使用Java。
安装完成后,AnyConnect将自动尝试连接到WebVPN网关。当自签名证书用于网关识别自身时,连接尝试期间会出现多个证书警告。这些是预期的,必须接受,连接才能继续。为避免这些证书警告,提供的自签名证书必须安装在客户端计算机的受信任证书存储区中,或者如果使用第三方证书,则证书颁发机构证书必须位于受信任证书存储区中。
当连接完成协商后,单击AnyConnect左下角的齿轮图标,它将显示有关连接的一些高级信息。在此页面上,可以在组策略配置中查看从拆分隧道ACL获得的一些连接统计信息和路由详细信息。
以下是配置步骤的最终运行配置结果:
crypto pki trustpoint SSLVPN_TP_SELFSIGNED enrollment selfsigned serial-number subject-name cn=892_SELF_SIGNED_CERT revocation-check none rsakeypair SELF_SIGNED_RSA ! crypto vpn anyconnect flash:/webvpn/anyconnect-win-3.1.08009-k9.pkg sequence 1
crypto vpn anyconnect profile SSLVPN_PROFILE flash:test-profile.xml ! access-list 1 permit 192.168.0.0 0.0.255.255 ! ip local pool SSLVPN_POOL 192.168.10.1 192.168.10.10 ! webvpn gateway SSLVPN_GATEWAY ip address 209.165.201.1 port 443 ssl trustpoint SSLVPN_TP_SELFSIGNED inservice ! webvpn context SSLVPN_CONTEXT virtual-template 1
aaa authentication list SSLVPN_AAA
gateway SSLVPN_GATEWAY
! ssl authenticate verify all inservice ! policy group SSLVPN_POLICY functions svc-enabled svc address-pool "SSLVPN_POOL" netmask 255.255.255.0 svc split include acl 1 svc dns-server primary 8.8.8.8
svc profile SSLVPN_PROFILE default-group-policy SSLVPN_POLICY
本部分提供了可用于对配置进行故障排除的信息。
排除AnyConnect连接故障时,需要检查几个常见组件:
Cisco IOS提供一些可用于排除连接故障的调试webvpn选项。以下是成功连接尝试后从debug webvpn aaa、debug wevpn tunnel和show webvpn session生成的输出:
fdenofa-892#show debugging WebVPN Subsystem: WebVPN AAA debugging is on WebVPN tunnel debugging is on WebVPN Tunnel Events debugging is on WebVPN Tunnel Errors debugging is on *May 26 20:11:06.381: WV-AAA: Nas Port ID set to 64.102.157.2. *May 26 20:11:06.381: WV-AAA: AAA authentication request sent for user: "VPNUSER"AAA returned status: 2 for session 37 *May 26 20:11:06.381: WV-AAA: AAA Authentication Passed! *May 26 20:11:06.381: WV-AAA: User "VPNUSER" has logged in from "64.102.157.2" to gateway "SSLVPN_GATEWAY" context "SSLVPN_CONTEXT" *May 26 20:11:12.265: *May 26 20:11:12.265: *May 26 20:11:12.265: [WV-TUNL-EVT]:[8A3AE410] CSTP Version recd , using 1 *May 26 20:11:12.265: [WV-TUNL-EVT]:[8A3AE410] Allocating IP 192.168.10.9 from address-pool SSLVPN_POOL *May 26 20:11:12.265: [WV-TUNL-EVT]:[8A3AE410] Using new allocated IP 192.168.10.9 255.255.255.0 *May 26 20:11:12.265: Inserting static route: 192.168.10.9 255.255.255.255 Virtual-Access2 to routing table *May 26 20:11:12.265: [WV-TUNL-EVT]:[8A3AE410] Full Tunnel CONNECT request processed, HTTP reply created *May 26 20:11:12.265: HTTP/1.1 200 OK *May 26 20:11:12.265: Server: Cisco IOS SSLVPN *May 26 20:11:12.265: X-CSTP-Version: 1 *May 26 20:11:12.265: X-CSTP-Address: 192.168.10.9 *May 26 20:11:12.269: X-CSTP-Netmask: 255.255.255.0 *May 26 20:11:12.269: X-CSTP-Keep: false *May 26 20:11:12.269: X-CSTP-DNS: 8.8.8.8 *May 26 20:11:12.269: X-CSTP-Lease-Duration: 43200 *May 26 20:11:12.269: X-CSTP-MTU: 1280 *May 26 20:11:12.269: X-CSTP-Split-Include: 192.168.0.0/255.255.0.0 *May 26 20:11:12.269: X-CSTP-DPD: 300 *May 26 20:11:12.269: X-CSTP-Disconnected-Timeout: 2100 *May 26 20:11:12.269: X-CSTP-Idle-Timeout: 2100 *May 26 20:11:12.269: X-CSTP-Session-Timeout: 0 *May 26 20:11:12.269: X-CSTP-Keepalive: 30 *May 26 20:11:12.269: X-DTLS-Session-ID: 85939A3FE33ABAE5F02F8594D56DEDE389F6FB3C9EEC4D211EB71C0820DF8DC8 *May 26 20:11:12.269: X-DTLS-Port: 443 *May 26 20:11:12.269: X-DTLS-Header-Pad-Length: 3 *May 26 20:11:12.269: X-DTLS-CipherSuite: AES256-SHA *May 26 20:11:12.269: X-DTLS-DPD: 300 *May 26 20:11:12.269: X-DTLS-KeepAlive: 30 *May 26 20:11:12.269: *May 26 20:11:12.269: *May 26 20:11:12.269: *May 26 20:11:12.269: [WV-TUNL-EVT]:[8A3AE410] For User VPNUSER, DPD timer started for 300 seconds *May 26 20:11:12.273: [WV-TUNL-EVT]:[8A3AE410] CSTP Control, Recvd a Req Cntl Frame (User VPNUSER, IP 192.168.10.9) Severity ERROR, Type CLOSE_ERROR Text: reinitiate tunnel to negotiate a different MTU *May 26 20:11:12.273: [WV-TUNL-EVT]:[8A3AE410] CSTP Control, Recvd Close Error Frame *May 26 20:11:14.105: *May 26 20:11:14.105: *May 26 20:11:14.105: [WV-TUNL-EVT]:[8A3AE690] CSTP Version recd , using 1 *May 26 20:11:14.109: [WV-TUNL-EVT]:[8A3AE690] Tunnel Client reconnecting removing existing tunl ctx *May 26 20:11:14.109: [WV-TUNL-EVT]:[8A3AE410] Closing Tunnel Context 0x8A3AE410 for Session 0x8A3C2EF8 and User VPNUSER *May 26 20:11:14.109: [WV-TUNL-EVT]:[8A3AE690] Reusing IP 192.168.10.9 255.255.255.0 *May 26 20:11:14.109: Inserting static route: 192.168.10.9 255.255.255.255 Virtual-Access2 to routing table *May 26 20:11:14.109: [WV-TUNL-EVT]:[8A3AE690] Full Tunnel CONNECT request processed, HTTP reply created *May 26 20:11:14.109: HTTP/1.1 200 OK *May 26 20:11:14.109: Server: Cisco IOS SSLVPN *May 26 20:11:14.109: X-CSTP-Version: 1 *May 26 20:11:14.109: X-CSTP-Address: 192.168.10.9 *May 26 20:11:14.109: X-CSTP-Netmask: 255.255.255.0 *May 26 20:11:14.109: X-CSTP-Keep: false *May 26 20:11:14.109: X-CSTP-DNS: 8.8.8.8 *May 26 20:11:14.113: X-CSTP-Lease-Duration: 43200 *May 26 20:11:14.113: X-CSTP-MTU: 1199 *May 26 20:11:14.113: X-CSTP-Split-Include: 192.168.0.0/255.255.0.0 *May 26 20:11:14.113: X-CSTP-DPD: 300 *May 26 20:11:14.113: X-CSTP-Disconnected-Timeout: 2100 *May 26 20:11:14.113: X-CSTP-Idle-Timeout: 2100 *May 26 20:11:14.113: X-CSTP-Session-Timeout: 0 *May 26 20:11:14.113: X-CSTP-Keepalive: 30 *May 26 20:11:14.113: X-DTLS-Session-ID: 22E54D9F1F6344BCB5BB30BC8BB3737907795E6F3C3665CDD294CBBA1DA4D0CF *May 26 20:11:14.113: X-DTLS-Port: 443 *May 26 20:11:14.113: X-DTLS-Header-Pad-Length: 3 *May 26 20:11:14.113: X-DTLS-CipherSuite: AES256-SHA *May 26 20:11:14.113: X-DTLS-DPD: 300 *May 26 20:11:14.113: X-DTLS-KeepAlive: 30 *May 26 20:11:14.113: *May 26 20:11:14.113: *May 26 20:11:14.113: *May 26 20:11:14.113: [WV-TUNL-EVT]:[8A3AE690] For User VPNUSER, DPD timer started for 300 seconds fdenofa-892#show webvpn session user VPNUSER context SSLVPN_CONTEXT Session Type : Full Tunnel Client User-Agent : AnyConnect Windows 3.1.08009 Username : VPNUSER Num Connection : 5 Public IP : 64.102.157.2 VRF Name : None Context : SSLVPN_CONTEXT Policy Group : SSLVPN_POLICY Last-Used : 00:00:00 Created : *16:11:06.381 EDT Tue May 26 2015 Session Timeout : Disabled Idle Timeout : 2100 DNS primary serve : 8.8.8.8 DPD GW Timeout : 300 DPD CL Timeout : 300 Address Pool : SSLVPN_POOL MTU Size : 1199 Rekey Time : 3600 Rekey Method : Lease Duration : 43200 Tunnel IP : 192.168.10.9 Netmask : 255.255.255.0 Rx IP Packets : 0 Tx IP Packets : 42 CSTP Started : 00:00:13 Last-Received : 00:00:00 CSTP DPD-Req sent : 0 Virtual Access : 2 Msie-ProxyServer : None Msie-PxyPolicy : Disabled Msie-Exception : Split Include : ACL 1 Client Ports : 17462 17463 17464 17465 17471