简介
本文档介绍身份服务引擎(ISE)和Active Directory(AD)如何通信、使用的协议、AD过滤器和流程。
先决条件
要求
思科建议掌握以下方面的基础知识:
- ISE 2.x和Active Directory集成。
- ISE上的外部身份身份验证。
使用的组件
- ISE 2.x 。
- Windows Server(Active Directory)。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
AD协议
Kerberos协议
Kerberos的三个头包括密钥分发中心(KDC)、客户端用户和要访问的服务器。
KDC作为域控制器(DC)的一部分安装,并执行两种服务功能:身份验证服务(AS)和票证授予服务(TGS)。
客户端最初访问服务器资源时,涉及三个交换:
- 作为Exchange。
- TGS交换。
- 客户端/服务器(CS)交换。
- 域控制器= KDC(AS + TGS)。
- 使用您的密码向AS(SSO门户)进行身份验证。
- 获取票证授予票证(TGT)(会话cookie)。
- 请求登录服务(SRV01)。
- SRV01将您重定向到KDC。
- Show TGT to KDC — (我已经通过身份验证)
- KDC为您提供SRV01的TGS。
- 重定向至SRV01。
- 显示到SRV01的服务票证。
- SRV01验证/信任服务票证。
- 服务票里有我的所有信息
- SRV01让我登录。
用户最初登录到网络时,必须协商访问权限并提供登录名称和密码,以便由其域内的KDC的AS部分进行验证。
KDC有权访问Active Directory用户帐户信息。通过身份验证后,用户将被授予对本地域有效的票证授予票证(TGT)。
TGT的默认有效期为10小时,在用户登录会话期间续订,无需用户重新输入其密码。
TGT缓存在易失性存储器空间中的本地计算机上,用于请求与整个网络中服务的会话。
当需要访问服务器服务时,用户向KDC的TGS部分提供TGT。
KDC上的TGS对用户TGT进行身份验证,并为客户端和远程服务器创建票证和会话密钥。然后,此信息(服务票证)在客户端计算机上本地缓存。
TGS接收客户端TGT并使用其自己的密钥读取它。如果TGS批准客户端请求,将为客户端和目标服务器生成服务票证。
客户端使用之前从AS应答检索的TGS会话密钥读取其部分。
客户端在下一次客户端/服务器交换时向目标服务器提供TGS应答的服务器部分。
示例:
从ISE为经过身份验证的用户捕获的数据包:
AS-REQ包含用户名。如果密码正确,则AS服务提供使用用户密码加密的TGT。然后,TGT被提供给TGT服务以获得会话票证。
当收到会话票证时,身份验证成功。
以下示例说明客户端提供的密码错误:
如果密码错误,则AS请求会失败,且未收到TGT:
密码错误时登录ad_agent.log文件:
2020-01-14 13:36:05,442 DEBUG,140574072981248,krb5:向RALMAAIT.COM发送请求(276字节),LwKrb5TraceCallback(),lwadvapi/threaded/lwkrb5.c:1325
2020-01-14 13:36:05,444 DEBUG,140574072981248,krb5:从KDC接收错误:-1765328360/预身份验证失败,LwKrb5TraceCallback(),lwadvapi/threaded/lwkrb5.c:1325
2020-01-14 13:36:05,444 DEBUG,140574072981248,krb5:预身份验证重试输入类型:16、14、19、2、LwKrb5TraceCallback(),lwadvapi/threaded/lwkrb5.c:1325
2020-01-14 13:36:05,444 WARNING,140574072981248,[LwKrb5GetTgtImpl ../../lwadvapi/threaded/krbtgt.c:329] KRB5错误代码: -1765328360(消息:预身份验证失败),LwTranslateKrb5Error(),lwadvapi/threaded/lwkrb5.c:892
2020-01-14 13:36:05,444 DEBUG ,140574072981248,[LwKrb5InitializeUserLoginCredentials()]错误代码:40022(符号:LW_ERROR_PASSWORD_MISMATCH),LwKrb5InitializeUserLoginCredentials(),lwadvapi/threaded/lwkrb5.c:1453
MS-RPC协议
ISE使用MS-RPC over SMB,SMB提供身份验证,不需要单独的会话来查找给定RPC服务的位置。它使用名为“命名管道”的机制在客户端和服务器之间通信。
- 创建SMB会话连接。
- 通过SMB/CIFS.TCP端口445传输RPC消息作为传输
- SMB会话标识特定RPC服务运行和处理用户身份验证的端口。
- 连接到隐藏共享IPC$,进行进程间通信。
- 为所需的RPC资源/功能打开一个适当的命名管道。
通过SMB处理RPC交换。
此 negotiate protocol request/response
line会协商SMB的方言。此 session setup request/response
执行身份验证。
树连接请求和响应连接到请求的资源。您已连接到特殊共享IPC$。
这种进程间通信共享提供了主机之间的通信方式,也作为MSRPC功能的传输方式。
数据包77是 Create Request File
文件名是连接的服务(本示例中为netlogon服务)的名称。
在数据包83和86上,NetrlogonSamLogonEX请求用于将ISE上客户端身份验证的用户名发送到AD的字段Network_INFO。
NetrlogonSamLogonEX响应数据包回复结果。
NetrlogonSamLogonEX响应的某些标志值:
0xc000006a为STATUS_WRONG_PASSWORD
0x00000000为STATUS_SUCCESS
0x00000103为STATUS_PENDING
ISE与Active Directory(AD)集成
ISE使用LDAP、KRB和MSRBC在加入/退出和身份验证过程中与AD通信。
以下各节提供了用于连接到AD上的特定DC以及针对该DC进行用户身份验证的协议、搜索格式和机制。
如果DC由于任何原因变为脱机,ISE会故障切换到下一个可用的DC,身份验证过程不会受到影响。
全局目录服务器(GC)是存储林中所有Active Directory对象的副本的域控制器。
它存储域目录中的所有对象的完整副本,以及所有其他林域的所有对象的部分副本。
因此,“全局目录”允许用户和应用程序通过搜索包含在GC中的属性在当前林的任何域中查找对象。
全局目录包含每个域中每个林对象的基本属性集(但不完整)(部分属性集、PAT)。
GC从林中的所有域目录分区接收数据。它们通过标准AD复制服务进行复制。
将ISE加入AD
Active Directory和ISE集成的必备条件
- 验证您拥有ISE中超级管理员或系统管理员的权限。
- 使用网络时间协议(NTP)服务器设置同步Cisco服务器和Active Directory之间的时间。ISE和AD之间允许的最大时间差为5分钟
- 在ISE上配置的DNS必须能够对DC、GC和KDC的SRV查询进行应答,无论是否具有其他站点信息。
- 确保所有DNS服务器都可以应答任何可能的Active Directory DNS域的前向和反向DNS查询。
- AD必须在您加入思科的域中至少有一个全局目录服务器可运行并可由思科访问。
加入AD域
ISE应用域发现以分三个阶段获取有关加入域的信息:
- 查询加入的域 — 发现其林中的域和加入的域外部信任的域。
- 查询其林中的根域 — 与林建立信任关系。
- Queries root domains in trusted forest — 发现受信任林中的域。
此外,思科ISE发现DNS域名(UPN后缀)、备用UPN后缀和NTLM域名。
ISE应用DC发现以获取有关可用DC和GC的所有信息。
- 加入过程以域本身存在的AD上的super admin输入凭证开始。如果用户名存在于不同的域或子域中,则必须使用UPN表示法(username@domain)记录用户名。
- ISE发送针对所有DC、GC和KDC记录的DNS查询。如果DNS应答中没有其中一个应答,则集成失败,并出现DNS相关错误。
- ISE使用CLDAP ping通过向DC发送的CLDAP请求发现所有DC和GC,DC与SRV记录中的优先级相对应。使用第一个DC响应,然后ISE连接到该DC。
用于计算DC优先级的一个因素是DC响应CLDAP ping所花费的时间;更快的响应获得更高的优先级。
注意:CLDAP是ISE用来建立和维护与DC连接的机制。 它测量第一个DC应答之前的响应时间。如果看不到来自DC的应答,则它失败。如果响应时间大于2.5秒,则发出警告。CLDAP ping站点中的所有DC(如果没有站点,则表明域中的所有DC)。CLDAP响应包含DC站点和客户端站点(ISE计算机分配到的站点)。
- 然后,ISE接收具有“加入用户”凭证的TGT。
- 使用MSRPC生成ISE计算机帐户名称。(SAM和SPN)
- 如果ISE计算机帐户已存在,则按SPN搜索AD。如果ISE计算机不存在,ISE将创建一个新计算机。
- 打开计算机帐户,设置ISE计算机帐户密码,并验证ISE计算机帐户是否可访问。
- 设置ISE计算机帐户属性(SPN、dns主机名等)。
- 通过KRB5获取TGT与ISE计算机凭证,并发现所有受信任域。
- 当加入完成时,ISE节点更新其AD组和关联的SID并自动启动SID更新过程。验证此过程可以在AD端完成。
退出AD域
当ISE离开时,AD必须考虑:
- 使用完整的AD管理员用户执行离开流程。这将验证ISE计算机帐户是否已从Active Directory数据库中删除。
- 如果AD没有凭证,则不会从AD中删除ISE帐户,必须手动删除ISE帐户。
- 当您从CLI重置ISE配置或在备份或升级后恢复配置时,它会执行离开操作并从Active Directory域断开ISE节点。(如果已加入)。但是,ISE节点帐户不会从Active Directory域中删除。
- 建议使用Active Directory凭证从管理员门户执行离开操作,因为它还会从Active Directory域中删除节点帐户。当您更改ISE主机名时,也建议这样做。
DC故障切换
当连接到ISE的DC因任何原因离线或不可访问时,DC故障切换在ISE上自动触发。DC故障切换可通过以下条件触发:
- AD连接器检测到当前选定的DC在某些CLDAP、LDAP、RPC或Kerberos通信尝试期间变得不可用。在这种情况下,AD连接器将启动DC选择并故障切换到新选择的DC。
- DC已启用并响应CLDAP ping,但AD连接器由于某些原因无法与其通信(例如:RPC端口被阻止,DC处于“中断复制”状态,DC尚未正确停用)。
在这种情况下,AD连接器启动带有阻止列表的DC选择(“不良”DC被置于阻止列表中),并尝试与选定的DC通信。阻止列表中选定的DC不会缓存。
AD连接器必须在合理的时间内完成故障转移(如果不可能,则发生故障)。因此,AD连接器在故障切换期间尝试有限数量的DC。
如果存在无法恢复的网络或服务器错误,ISE会阻止AD域控制器,以防止ISE使用错误的DC。如果DC不响应CLDAP ping,则不会将其添加到阻止列表中。ISE只降低不响应的DC的优先级。
通过LDAP进行ISE-AD通信
ISE使用以下搜索格式之一在AD中搜索计算机或用户。如果搜索的是计算机,则ISE会在计算机名称末尾添加“$”。这是用于在AD中标识用户的身份类型列表:
- SAM名称:用户名或计算机名称,不带任何域标记,这是AD中的用户登录名。示例:Sajeda或Sajeda$
- CN:是AD上的用户显示名称,它不能与SAM相同。示例:萨赫达·艾哈迈德。
- 备用UPN:是在除域名之外的AD中配置的附加/备用UPN后缀。此配置在AD中全局添加(未按用户配置),并且不需要为实际域名后缀。
每个AD可以有多个UPN后缀(@alt1.com、@alt2.com、...等)。示例:主UPN(sajeda@cisco.com),备用UPN:sajeda@domain1, sajeda@domain2
- NetBIOS前缀名称:计算机名称的域名\用户名。示例:CISCO\sajeda或CISCO\machine$
- 具有非限定计算机的主机/前缀:当仅使用计算机名称时,用于计算机身份验证,它仅是主机/计算机名称。示例:主机/计算机
- 具有完全限定计算机的主机/前缀:当使用计算机FQDN时,用于计算机身份验证,通常在证书身份验证时,这是计算机的主机/FQDN。 示例: host/machine.cisco.com
- SPN名称:客户端用于唯一标识服务的实例的名称(例如:HTTP、LDAP、SSH),仅用于计算机。
针对AD流进行用户身份验证:
- 解析身份并确定身份类型 — SAM、UPN、SPN。 如果ISE仅接收作为用户名的身份,则会在AD中搜索关联的SAM帐户。如果ISE接收身份为username@domain,则在AD中搜索匹配的UPN或邮件。在这两种情况下,ISE都使用其他过滤器作为计算机或用户名。
- 搜索域或林(取决于身份类型)
- 保留有关所有关联帐户的信息(JP、DN、UPN、域)
- 如果未找到关联的帐户,则无法知道用户的AD回复。
- 对每个关联帐户执行MS-RPC(或Kerberos)身份验证
- 如果只有一个帐户匹配输入身份和密码,则身份验证成功
- 如果多个帐户与传入身份匹配,则ISE使用密码解决歧义问题,以便具有关联密码的帐户通过身份验证,而其他帐户将不正确的密码计数器增加1。
- 如果没有帐户与传入身份和密码匹配,则AD会使用错误的密码进行回复。
ISE 搜索过滤器
过滤器用于标识要与AD通信的实体。ISE始终在用户和计算机组中搜索该实体。
搜索过滤器的示例:
- SAM搜索:如果ISE仅接收作为用户名的身份而不使用任何域标记,则ISE将此用户名视为SAM并在AD中搜索所有将该身份作为SAM名称的计算机用户或计算机。
如果SAM名称不唯一,ISE使用密码区分用户,并且ISE配置为使用无密码协议,例如EAP-TLS。
没有其他条件可以定位正确的用户,因此ISE身份验证失败并出现“模糊身份”错误。
但是,如果用户证书存在于Active Directory中,思科ISE使用二进制比较解析身份。
- UPN或MAIL搜索:如果ISE以username@domain形式接收身份,则ISE会搜索每个林全局目录以查找与该UPN身份或邮件身份“身份=匹配的UPN或邮件”的匹配项。
如果存在唯一匹配,思科ISE继续执行AAA流。
如果有多个加入点使用同一UPN和密码或同一UPN和邮件,思科ISE会由于“模糊身份”错误而无法进行身份验证。
- NetBIOS搜索:如果ISE收到带有NetBIOS域前缀的身份(例如:CISCO\sajedah),则ISE在林中搜索NetBIOS域。找到后,它会查找提供的SAM名称(示例中为sajeda)
- 基于计算机的搜索:如果ISE收到具有主机/前缀标识的计算机身份验证,则ISE在林中搜索匹配的servicePrincipalName属性。
如果在身份中指定了完全限定域后缀(例如host/machine.domain.com),思科ISE会搜索该域所在的林。
如果身份采用主机/计算机形式,思科ISE会搜索所有林的服务主体名称。
如果存在多个匹配项,思科ISE会由于“模糊身份”错误而无法进行身份验证。
注意:在ISE ad-agent.log文件中看到相同的过滤器
注意:ISE 2.2补丁4和之前的补丁1和2.3之前的补丁1和之前的已识别用户具有属性SAM、CN或两者。思科ISE版本2.2补丁5及更高版本和2.3补丁2及更高版本仅使用sAMAccountName属性作为默认属性。