目录

简介

先决条件

要求

使用的组件

背景信息

配置

网络图

配置LDAP

配置AAA

配置IP准入

启用IP准入

免除内部主机的身份验证

在ISR上启用HTTP服务器

配置CWS重定向

完成示例配置

LDAP

AAA

IP准入

HTTP 服务器

内容扫描和CWS

确定AD - ADSI编辑中的DN对象

身份验证方法

活动NTLM

透明NTLM

基本身份验证（通过HTTP以明文显示）

被动NTLM

活动NTLM身份验证的消息序列

验证

故障排除

显示命令

调试命令

常见问题

IP准入不拦截HTTP请求

可能的解决方案

用户收到404未找到错误

可能的解决方案

出现提示时用户身份验证失败

常见原因

排除LDAP故障

LDAP身份验证的高级步骤

LDAP调试输出分析

RFC 4511

简介

本文档介绍如何配置Cisco G2系列集成多业务路由器(ISR)。 虽然IP准入和轻量目录访问协议(LDAP)配置仅可用于ISR上的身份验证代理，但通常与思科云网络安全(CWS)重定向功能结合使用。因此，本文档旨在作为参考，以补充ISR上的CWS重定向配置和故障排除文档。

先决条件

要求

思科建议在您尝试本文档中描述的配置之前，您的系统应满足以下要求：

- ISR必须运行代码版本15.2(1)T1或更高版本。

- 您的系统必须具有Cisco IOS®（通用）中提供的具有安全功能集(SEC)许可证的映像。

- Active Directory(AD)域上的客户端工作站必须能够通过Web浏览器执行主动身份验证。

- 您必须拥有CWS订用。

使用的组件

本文档中的信息基于以下软件和硬件版本：

- Internet Explorer、Google Chrome、Mozilla Firefox(需要对透明NT LAN Manager(NTLM)身份验证进行额外配置)

- Cisco G2 800、1900、2900和3900系列ISR

- Microsoft Windows AD域控制器(ADDC)

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您使用的是真实网络，请确保您已经了解所有命令的潜在影响。

注意：不支持Cisco G1 1800、2800和3800系列路由器。

背景信息

许多在网络中没有思科自适应安全设备(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。

注意：使用命令查找工具（仅限注册用户）可获取有关本部分所使用命令的详细信息。

网络图

配置LDAP

要配置AAA服务器的LDAP属性，请完成以下步骤：

1. 配置LDAP属性映射，以强制用户输入的用户名与AD中的sAMAccountName属性匹配：

C-881(config)#ldap attribute-map ldap-username-map map type sAMAccountName

username

C-881(config-attr-map)#map type sAMAccountName username

注意：此配置是必需的，因为sAMAccountName属性是AD中的唯一值，与Common Name(CN)属性不同，后者在默认情况下用于匹配。例如，AD中可以有多个John Smith 实例，但只能有一个用户具有sAMAjsmith的ccountName，也是用户帐户登录。其他John Smith帐户有sAMAccountNames，如jsmith1 或jsmith2。

show ldap attributes命令也可用于查看LDAP属性和关联AAA属性的列表。

2. 配置LDAP服务器组：

C-881(config)#aaa group server ldap LDAP_GROUP

C-881(config-ldap-sg)#server DC01

3. 配置LDAP服务器：

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命令被更改以将其包含在查询中。

提示：有关如何确定基本和根命令的正确DN的详细信息，请参阅本文档的确定AD - ADSI编辑中的DN对象部分。

配置AAA

配置好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

注意：如果这些命令不可用，则可能需要输入aaa new-model命令以启用此AAA功能，因为默认情况下未启用它。

配置IP准入

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准入

以下是用于启用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

在ISR上启用HTTP服务器

要拦截HTTP会话并启动身份验证过程，必须启用HTTP服务器：

Ip http server

Ip http secure-server

注意：仅当需要重定向到HTTPS进行身份验证时，才需要Ip http secure-server。

配置CWS重定向

以下是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

完成示例配置

本节提供前面各节的完整示例配置。

LDAP

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

aaa new-model

aaa authentication login SCANSAFE_AUTH group LDAP_GROUP

aaa authorization network SCANSAFE_AUTH group LDAP_GROUP

IP准入

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

HTTP 服务器

ip http 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 DE13621993BD87B306B5A5607EA8C369

source interface Vlan302

user-group DEFAULT_GROUP username DEFAULT_USER

server scansafe on-failure allow-all

interface Vlan302

content-scan out

确定AD - ADSI编辑中的DN对象

如果需要，可以浏览AD结构以查找DN以便与用户或组搜索库一起使用。管理员可以使用内置到AD域控制器中的名为ADSI Edit的工具。要打开ADSI Edit，请在AD域控制器上选择Start > Run，然后输入adsiedit.msc。

打开ADSI编辑后，右键单击任何对象（如OU、组或用户），然后选择属性以查看该对象的DN。然后，可以轻松地将DN字符串复制并粘贴到路由器配置中，以避免任何排版错误。下图说明了该过程：

身份验证方法

使用IP准入的身份验证方法有四种不同类型，它们经常被误解，特别是透明NTLM和被动NTLM之间的区别。以下各节介绍这些类型的身份验证之间的差异。

活动NTLM

当透明NTLM身份验证失败时，活动NTLM身份验证方法会提示用户进行身份验证。这通常是因为客户端浏览器不支持集成的Microsoft Windows身份验证，或者用户使用本地（非域）凭证登录工作站。主动NTLM身份验证对域控制器执行LDAP查询，以确保提供的凭证正确。

注意：使用所有类型的NTLM身份验证时，凭证不会通过明文传递。但是，NTLM第1版(NTLMv1)有详细记录的漏洞。ISR支持NTLMv2，但默认情况下，较旧版本的Microsoft Windows可能通过NTLMv1协商。此行为取决于AD身份验证策略。

透明NTLM

当用户使用域凭证登录工作站，并且这些凭证通过浏览器透明地传递到IOS路由器时，会发生透明NTLM身份验证。然后，IOS路由器执行LDAP查询以验证用户凭证。这通常是此功能最需要的身份验证形式。

基本身份验证（通过HTTP以明文显示）

当NTLM身份验证失败或客户端（如Macintosh、基于Linux的设备或移动设备）不可能使用这种形式的身份验证时，通常将其用作回退机制。使用此方法，如果未启用HTTP安全服务器，则这些凭据会以明文（非常不安全）通过HTTP传递。

被动NTLM

被动NTLM身份验证请求用户的凭证，但实际上不根据域控制器对用户进行身份验证。这可以避免LDAP相关问题，即对域控制器的查询失败，但也会使环境中的用户面临安全风险。如果透明身份验证失败或不可能，则会提示用户输入凭据。但是，用户可以输入他们选择的任何凭证，这些凭证将传递到CWS塔。因此，可能无法正确应用策略。

例如，用户A可以使用Firefox（默认情况下，在不进行其他配置的情况下不允许透明NTLM），并输入用户B的用户名和任何密码，并且用户B的策略将应用于用户A。如果所有用户都被迫使用支持透明NTLM身份验证的浏览器，则可以降低风险，但在大多数情况下，不建议使用被动身份验证。

活动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 命令。使用输出解释器工具来查看 show 命令输出的分析。

您可以使用show命令来排除配置故障：

- show ip admission cache

- show ip admission status

- show ip admission statistics

- show ldap server all

调试命令

注意：使用 debug 命令之前，请参阅有关 Debug 命令的重要信息。

以下是一些有用的debug命令，您可以使用这些命令排除配置故障：

- debug ldap all — 此命令可用于发现身份验证失败的原因。

- debug ip admission detail — 此命令非常详细且占用CPU。思科建议您仅将其用于触发IP准入的单个测试客户端。

- debug ip admission ntlm — 此命令可用于发现触发IP准入进程的原因。

- debug ip admission httpd

- debug ip http transaction

- debug aaa authentication debug aaa authorization

常见问题

本节介绍在本文档所述的配置中遇到的一些常见问题。

IP准入不拦截HTTP请求

当您查看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未找到错误

当重定向用户进行身份验证时，会发现此问题，并且浏览器中出现“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

常见原因

此问题的常见原因如下：

- 用户输入无效的用户名和/或密码以进行主动身份验证。

- LDAP配置中使用了无效的base-dn，这会导致搜索不返回任何结果。

- 为用户名或密码配置了无效的绑定身份验证root-dn，这会导致LDAP绑定失败。

- ISR和LDAP服务器之间的通信失败。验证LDAP服务器在指定的TCP端口上侦听LDAP通信，以及两者之间的所有防火墙是否允许流量。

- 无效的搜索过滤器不会导致LDAP搜索结果。

排除LDAP故障

确定身份验证失败原因的最佳方法是在ISR上使用LDAP debug命令。请记住，如果ISR上的调试输出过多，则运行调试会非常昂贵且危险，而且这些调试会导致路由器挂起并需要硬通电。对于低端平台尤其如此。

为了进行故障排除，思科建议您将ACL应用到IP准入规则，以便仅对网络上的单个测试工作站进行身份验证。这样，调试可以启用，而对路由器的流量传递能力产生负面影响的风险最小。

提示：有关ACL应用于IP准入配置的详细信息，请参阅本文档的“从身份验证中免除内部主机”部分。

当您排除LDAP相关问题时，了解LDAP处理ISR请求的步骤会很有帮助。

LDAP身份验证的高级步骤

以下是LDAP身份验证的高级步骤：

1. 在指定端口上打开与LDAP服务器的连接。默认端口为TCP 389。

2. 使用绑定验证root-dn用户和密码绑定到LDAP服务器。

3. 使用LDAP配置中定义的base-dn和search-filters对尝试进行身份验证的用户执行LDAP搜索。

4. 从LDAP服务器获取LDAP结果，并在身份验证成功时为用户创建IP准入缓存条目，或在身份验证失败时重新提示凭据。

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

RFC 4511(轻量目录访问协议(LDAP):协议)提供有关LDAP的结果代码消息和其他LDAP协议相关信息的信息，这些信息可通过IETF网站引用 。