本文档介绍如何配置Cisco G2系列集成多业务路由器(ISR)。 虽然IP准入和轻量目录访问协议(LDAP)配置仅可用于ISR上的身份验证代理,但通常与思科云网络安全(CWS)重定向功能结合使用。因此,本文档旨在作为参考,以补充ISR上的CWS重定向配置和故障排除文档。
思科建议在您尝试本文档中描述的配置之前,您的系统应满足以下要求:
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
许多在网络中没有思科自适应安全设备(ASA)的思科G2系列ISR安装的管理员选择使用ISR CWS(以前称为ScanSafe)重定向功能,以便利用CWS解决方案进行网络过滤。作为该解决方案的一部分,大多数管理员还希望利用当前的AD基础设施将用户身份信息发送到CWS塔,以便在CWS门户中实施基于用户或组的策略来实施Web过滤策略。
整体概念与ASA与情景目录代理(CDA)的集成类似,但有一些不同之处。最显着的区别是,ISR实际上并不维护被动的用户到IP映射数据库,因此用户必须通过某种类型的身份验证才能传输ISR并将用户或组信息发送到CWS门户。
虽然本文档中描述的配置的CWS重定向部分相对简单,但某些管理员在尝试配置身份验证部分时可能遇到困难。此部分与引用LDAP服务器和Authentication、Authorization和Accounting(AAA)身份验证语句的ip admission命令一起使用,这些语句也必须进行配置。本文档旨在为网络操作员提供全面的参考源,以便在Cisco G2系列ISR上配置或排除此配置的IP准入和LDAP部分故障。
使用本节中介绍的信息配置Cisco ISR。
要配置AAA服务器的LDAP属性,请完成以下步骤:
C-881(config)#ldap attribute-map ldap-username-map map type sAMAccountName
username
C-881(config-attr-map)#map type sAMAccountName username
C-881(config)#aaa group server ldap LDAP_GROUP
C-881(config-ldap-sg)#server DC01
C-881(config)#ldap server DC01
C-881(config-ldap-server)# ipv4 10.10.10.150
C-881(config-ldap-server)#attribute map ldap-username-map
C-881(config-ldap-server)# bind authenticate root-dn CN=Csco_Service,CN=Users,
DC=lab,DC=cisco,DC=com password Cisco12345!
C-881(config-ldap-server)#base-dn DC=lab,DC=cisco,DC=com
C-881(config-ldap-server)#search-filter user-object-type top
C-881(config-ldap-server)#authentication bind-first
此配置通常不需要修改,除非需要实施自定义搜索过滤器。只有精通LDAP并知道如何正确输入此信息的管理员才应使用自定义搜索过滤器。如果您不确定应使用的搜索过滤器,只需使用描述的过滤器;将用户定位在正常AD环境中。
LDAP配置的另一个部分也需要仔细关注详细信息,即bind-authenticate-root-dn和base-dn命令中需要的可分辨名称(DN)。必须完全按照LDAP服务器中显示的内容输入,否则LDAP查询会失败。此外,base-dn命令必须是LDAP树的最低部分,所有经过身份验证的用户都驻留在该部分。
请考虑在上一配置中修改base-dn命令的场景,例如:
base-dn OU=TestCompany,DC=lab,DC=cisco,DC=com
在本例中,对CN=Users、DC=lab、DC=cisco、DC=com中包含的用户的查询不返回任何结果,因为LDAP服务器仅搜索TestCompany组织单位(OU)及其中的子对象。因此,这些用户的身份验证始终会失败,直到他们被移入TestCompany OU或其子树,或者base-dn命令被更改以将其包含在查询中。
配置好LDAP服务器后,您必须在IP准入进程使用的相应AAA语句中引用它们:
C-881(config)#aaa authentication login SCANSAFE_AUTH group LDAP_GROUP
C-881(config)#aaa authorization network SCANSAFE_AUTH group LDAP_GROUP
IP准入部分触发一个进程,该进程会提示用户进行身份验证(或执行透明身份验证),然后根据配置中定义的用户凭证和AAA服务器执行LDAP查询。如果用户被成功验证,则用户身份信息随后由内容扫描过程提取并连同重定向流一起发送到CWS塔。在路由器的入口接口上输入ip admission name命令后,IP准入进程才会激活。因此,此部分配置可以实施,而不会对流量造成任何影响。
C-881(config)#ip admission virtual-ip 1.1.1.1 virtual-host ISR_PROXY
C-881(config)#ip admission name SCANSAFE_ADMISSION ntlm
C-881(config)#ip admission name SCANSAFE_ADMISSION method-list authentication
SCANSAFE_AUTH authorization SCANSAFE_AUTH
以下是用于启用IP准入的配置:
C-881(config)#int vlan301 (internal LAN-facing interface)
C-881(config-if)#ip admission SCANSAFE_ADMISSION
某些管理员可能出于各种原因希望将某些内部主机从身份验证过程中排除。例如,对于不能进行NTLM或基本身份验证的内部服务器或设备,IP准入过程可能不会影响它们。在这些情况下,访问控制列表(ACL)可应用于IP准入配置,以防止特定主机IP或子网触发IP准入。
在本示例中,内部主机10.10.10.150不受身份验证要求的限制,而所有其他主机仍需要身份验证:
C-881(config)#ip access-list extended NO_ADMISSION
C-881(config-ext-nacl)#deny ip host 10.10.10.150 any
C-881(config-ext-nacl)#permit ip any any
C-881(config)#ip admission name SCANSAFE_ADMISSION ntlm list NO_ADMISSION
要拦截HTTP会话并启动身份验证过程,必须启用HTTP服务器:
Ip http server
Ip http secure-server
以下是CWS重定向的基本摘要配置:
parameter-map type content-scan global
server scansafe primary name proxy139.scansafe.net port http 8080 https 8080
server scansafe secondary name proxy187.scansafe.net port http 8080 https 8080
license 0 DE749585HASDH83HGA94EA8C369
source interface Vlan302
user-group DEFAULT_GROUP username DEFAULT_USER
server scansafe on-failure allow-all
interface Vlan302 (egress interface towards Internet)
content-scan out
本节提供前面各节的完整示例配置。
aaa group server ldap LDAP_GROUP
server DC01
ldap attribute-map ldap-username-map
map type sAMAccountName username
ldap server DC01
ipv4 10.10.10.150
attribute map ldap-username-map
bind authenticate root-dn CN=Csco_Service,CN=Users,DC=lab,DC=cisco,DC=com
password Cisco12345!
base-dn dc=lab,dc=cisco,dc=com
search-filter user-object-type top
authentication bind-first
aaa new-model
aaa authentication login SCANSAFE_AUTH group LDAP_GROUP
aaa authorization network SCANSAFE_AUTH group LDAP_GROUP
ip admission virtual-ip 1.1.1.1 virtual-host ISR_PROXY
ip admission name SCANSAFE_ADMISSION ntlm
ip admission name SCANSAFE_ADMISSION method-list authentication
SCANSAFE_AUTH authorization SCANSAFE_AUTH
interface Vlan301
ip admission SCANSAFE_ADMISSION
ip http server
parameter-map type content-scan global
server scansafe primary name proxy139.scansafe.net port http 8080 https 8080
server scansafe secondary name proxy187.scansafe.net port http 8080 https 8080
license 0 DE13621993BD87B306B5A5607EA8C369
source interface Vlan302
user-group DEFAULT_GROUP username DEFAULT_USER
server scansafe on-failure allow-all
interface Vlan302
content-scan out
如果需要,可以浏览AD结构以查找DN以便与用户或组搜索库一起使用。管理员可以使用内置到AD域控制器中的名为ADSI Edit的工具。要打开ADSI Edit,请在AD域控制器上选择Start > Run,然后输入adsiedit.msc。
打开ADSI编辑后,右键单击任何对象(如OU、组或用户),然后选择属性以查看该对象的DN。然后,可以轻松地将DN字符串复制并粘贴到路由器配置中,以避免任何排版错误。下图说明了该过程:
使用IP准入的身份验证方法有四种不同类型,它们经常被误解,特别是透明NTLM和被动NTLM之间的区别。以下各节介绍这些类型的身份验证之间的差异。
当透明NTLM身份验证失败时,活动NTLM身份验证方法会提示用户进行身份验证。这通常是因为客户端浏览器不支持集成的Microsoft Windows身份验证,或者用户使用本地(非域)凭证登录工作站。主动NTLM身份验证对域控制器执行LDAP查询,以确保提供的凭证正确。
当用户使用域凭证登录工作站,并且这些凭证通过浏览器透明地传递到IOS路由器时,会发生透明NTLM身份验证。然后,IOS路由器执行LDAP查询以验证用户凭证。这通常是此功能最需要的身份验证形式。
当NTLM身份验证失败或客户端(如Macintosh、基于Linux的设备或移动设备)不可能使用这种形式的身份验证时,通常将其用作回退机制。使用此方法,如果未启用HTTP安全服务器,则这些凭据会以明文(非常不安全)通过HTTP传递。
被动NTLM身份验证请求用户的凭证,但实际上不根据域控制器对用户进行身份验证。这可以避免LDAP相关问题,即对域控制器的查询失败,但也会使环境中的用户面临安全风险。如果透明身份验证失败或不可能,则会提示用户输入凭据。但是,用户可以输入他们选择的任何凭证,这些凭证将传递到CWS塔。因此,可能无法正确应用策略。
例如,用户A可以使用Firefox(默认情况下,在不进行其他配置的情况下不允许透明NTLM),并输入用户B的用户名和任何密码,并且用户B的策略将应用于用户A。如果所有用户都被迫使用支持透明NTLM身份验证的浏览器,则可以降低风险,但在大多数情况下,不建议使用被动身份验证。
以下是活动NTLM身份验证方法的完整消息序列:
Browser --> ISR : GET / google.com
Browser <-- ISR : 302 Page moved http://1.1.1.1/login.html
Browser --> ISR : GET /login.html 1.1.1.1
Browser <-- ISR : 401 Unauthorized..Authenticate using NTLM
Browser --> ISR : GET /login.html + NTLM Type-1 msg
ISR --> AD : LDAP Bind Request + NTLM Type-1 msg
ISR将第1类消息从HTTP复制到LDAP,逐字节复制,而不会更改任何数据。
ISR <-- AD : LDAP Bind Response + NTLM Type-2 msg
Browser <-- ISR : 401 Unauthorized + NTLM Type-2 msg
Type-2消息也逐字节从LDAP复制到HTTP。因此,在PCAP中,它似乎源于1.1.1.1,但实际内容来自AD。
Browser --> ISR : GET /login.html + NTLM Type-3 msg
ISR --> AD : LDAP Bind Request + NTLM Type-3 msg
ISR <-- AD : LDAP Bind response - Success
Browser <-- ISR : 200OK + redirect to google.com
配置活动NTLM后,ISR在NTLM交换期间不会干扰。但是,如果配置了被动NTLM,则ISR会生成自己的第2类消息。
当前没有可用于此配置的验证过程。
本部分提供了可用于对配置进行故障排除的信息。
您可以使用show命令来排除配置故障:
以下是一些有用的debug命令,您可以使用这些命令排除配置故障:
本节介绍在本文档所述的配置中遇到的一些常见问题。
当您查看show ip admission statistics命令输出时,此问题显而易见。输出不显示拦截任何HTTP请求:
C-881#show ip admission statistics
Webauth HTTPd statistics:
HTTPd process 1
Intercepted HTTP requests: 0
此问题有两种可能的解决方案。第一种是验证IP http服务器是否启用。
如果ISR的HTTP服务器未启用,则IP准入会触发,但永远不会实际拦截HTTP会话。因此,它会提示进行身份验证。在这种情况下,show ip admission cache命令没有输出,但在debug ip admission detail命令的输出中会看到这些行的许多重复:
*Jan 30 20:49:35.726: ip_admission_det:proceed with process path authentication
*Jan 30 20:49:35.726: AUTH-PROXY auth_proxy_find_conn_info :
find srcaddr - 10.10.10.152, dstaddr - 192.168.1.1
ip-srcaddr 10.20.10.1
pak-srcaddr 10.10.10.152
此问题的第二个解决方案是检验用户IP地址是否不排除在IP准入配置中的ACL中。
当重定向用户进行身份验证时,会发现此问题,并且浏览器中出现“404 Not Found(404未找到)”错误。
确保ip admission virtual-ip 1.1.1.1 virtual-host ISR_PROXY中的名称可以通过客户端域名系统(DNS)服务器成功解析。在这种情况下,客户端对ISR_PROXY.lab.cisco.com执行DNS查询,因为lab.cisco.com是工作站加入的域的完全限定域名(FQDN)。如果DNS查询失败,客户端将发送链路本地组播名称解析(LLMNR)查询,然后发送广播到本地子网的NETBIOS查询。
如果所有这些解析尝试都失败,则浏览器中会显示“404未找到”或“Internet Explorer无法显示网页”错误。
这可能由各种原因引起,但通常与ISR上的LDAP配置或ISR与LDAP服务器之间的通信有关。在ISR上,当触发IP准入后,当用户停滞在INIT状态时,通常会观察到症状:
C-881(config)#do show ip admi cac
Authentication Proxy Cache
Client Name N/A, Client IP 10.10.10.152, Port 56674, timeout 60,
Time Remaining 2, state INIT
此问题的常见原因如下:
确定身份验证失败原因的最佳方法是在ISR上使用LDAP debug命令。请记住,如果ISR上的调试输出过多,则运行调试会非常昂贵且危险,而且这些调试会导致路由器挂起并需要硬通电。对于低端平台尤其如此。
为了进行故障排除,思科建议您将ACL应用到IP准入规则,以便仅对网络上的单个测试工作站进行身份验证。这样,调试可以启用,而对路由器的流量传递能力产生负面影响的风险最小。
当您排除LDAP相关问题时,了解LDAP处理ISR请求的步骤会很有帮助。
以下是LDAP身份验证的高级步骤:
可在debug ldap all命令的输出中查看这些进程。本部分提供因基本dn无效而失败的身份验证的LDAP调试输出示例。 查看调试输出和相关注释,这些注释描述输出中显示上述步骤在何处可能发生故障的部分。
*Jan 30 20:51:50.818: LDAP: LDAP: Queuing AAA request 23 for processing
*Jan 30 20:51:50.818: LDAP: Received queue event, new AAA request
*Jan 30 20:51:50.818: LDAP: LDAP authentication request
*Jan 30 20:51:50.818: LDAP: Username sanity check failed
*Jan 30 20:51:50.818: LDAP: Invalid hash index 512, nothing to remove
*Jan 30 20:51:50.818: LDAP: New LDAP request
*Jan 30 20:51:50.818: LDAP: Attempting first next available LDAP server
*Jan 30 20:51:50.818: LDAP: Got next LDAP server :DC01
*Jan 30 20:51:50.818: LDAP: Free connection not available. Open a new one.
*Jan 30 20:51:50.818: LDAP: Opening ldap connection
( 10.10.10.150, 389 )ldap_open
输出中以粗体显示的部分表示这不是网络层问题,因为连接已成功打开。
*Jan 30 20:51:50.822: LDAP: Root Bind on CN=Csco_Service,CN=Users,DC=lab,
DC=cisco,DC=com initiated.
*Jan 30 20:51:51.330: LDAP: Ldap Result Msg: SUCCESS, Result code =0
*Jan 30 20:51:51.330: LDAP: Root DN bind Successful on :CN=Csco_Service,
CN=Users,DC=lab,DC=cisco,DC=com
此输出中Bind authenticate-dn是正确的。如果此配置不正确,则会发现绑定失败。
*Jan 30 20:51:51.846: LDAP: Received Bind Responseldap_parse_sasl_bind_result
*Jan 30 20:51:51.846: LDAP: Ldap SASL Result Msg: SUCCESS, Result code =14
sasLres_code =14
*Jan 30 20:51:51.846: LDAP: SASL NTLM authentication do not require
further tasks
*Jan 30 20:51:51.846: LDAP: Next Task: All authentication task completed
*Jan 30 20:51:51.846: LDAP: Transaction context removed from list
[ldap reqid=14]
*Jan 30 20:51:51.846: LDAP: * * AUTHENTICATION COMPLETED SUCCESSFULLY * *
*Jan 30 20:51:51.846: LDAP: Notifying AAA: REQUEST CHALLENGED
以粗体显示的输出部分表示所有绑定操作都成功,并继续搜索实际用户。
*Jan 30 20:51:51.854: LDAP: SASL NTLM authentication done..Execute search
*Jan 30 20:51:51.854: LDAP: Next Task: Send search req
*Jan 30 20:51:51.854: LDAP: Transaction context removed from list[ldap reqid=15]
*Jan 30 20:51:51.854: LDAP: Dynamic map configured
*Jan 30 20:51:51.854: LDAP: Dynamic map found for aaa type=username
*Jan 30 20:51:51.854: LDAP: Ldap Search Req sent
ld 2293572544
base dn dc=lab1,dc=cisco,dc=comscope 2
filter (&(objectclass=top)(sAMAccountName=testuser5))
ldap_req_encode
put_filter "(&(objectclass=top)(sAMAccountName=testuser5))"
put_filter: AND
put_filter_list "(objectclass=top)(sAMAccountName=testuser5)"
put_filter "(objectclass=top)"
put_filter: simple
put_filter "(sAMAccountName=testuser5)"
put_filter: simple
Doing socket write
*Jan 30 20:51:51.854: LDAP: lctx conn index = 2
第一行(以粗体显示)表示LDAP搜索调试输出开始。另请注意,应为实验配置base-dn域控制器,而不是实验1。
*Jan 30 20:51:52.374: LDAP: LDAP Messages to be processed: 1
*Jan 30 20:51:52.374: LDAP: LDAP Message type: 101
*Jan 30 20:51:52.374: LDAP: Got ldap transaction context from reqid
16ldap_parse_result
*Jan 30 20:51:52.374: LDAP: resultCode: 10 (Referral)
*Jan 30 20:51:52.374: LDAP: Received Search Response resultldap_parse_result
ldap_err2string
*Jan 30 20:51:52.374: LDAP: Ldap Result Msg: FAILED:Referral, Result code =10
*Jan 30 20:51:52.374: LDAP: LDAP Search operation result : failedldap_msgfree
*Jan 30 20:51:52.374: LDAP: Closing transaction and reporting error to AAA
*Jan 30 20:51:52.374: LDAP: Transaction context removed from list
[ldap reqid=16]
*Jan 30 20:51:52.374: LDAP: Notifying AAA: REQUEST FAILED
以粗体显示的输出部分表示搜索未返回任何结果,这在本例中是由于基dn无效。
RFC 4511(轻量目录访问协议(LDAP):协议)提供有关LDAP的结果代码消息和其他LDAP协议相关信息的信息,这些信息可通过IETF网站引用。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
18-Jul-2014 |
初始版本 |