目录

简介

背景信息

问题

最终用户体验

ISE管理员体验

常见问题场景

陈旧/幻像会话问题

ISE会话管理逻辑

MNT和会话管理

PSN和会话管理

PSN上过时的会话

PSN上的虚拟会话

陈旧会话和虚拟会话如何中断状态流程

新的身份验证尝试时发现进程不会启动

在不同的PSN上重新进行身份验证

NAD在重新身份验证时生成新的会话ID

快速确定问题何时由陈旧/幻像会话引起

陈旧/幻像会话高级故障排除

DART捆绑包

DART捆绑包分析

ISE日志调查

调查ISE报告

一种快速方法，可确定问题何时由未重新启动发现导致

高级故障排除：没有发现重新启动

解决方案

传统方法 — 问题避免

可以最大限度地减少ISE部署中陈旧或幻像会话数量的最佳实践

可以实施最佳实践，以最大程度降低不重新启动ISE终端安全评估模块的影响

现代方法 — 状态共享

轻量级数据分布架构

通过RSD共享终端安全评估状态

通过RSD共享终端安全评估状态 — 陈旧/幻像会话

RSD上的状态共享 — PSN之间的故障转移

简介

本文档介绍常见身份服务引擎(ISE)终端安全评估服务问题：“AnyConnect ISE终端安全评估模块显示合规性……”

背景信息

本文档介绍常见身份服务引擎(ISE)终端安全评估服务问题 — AnyConnect ISE终端安全评估模块在ISE上的会话状态为挂起时显示合规性。

虽然症状始终相同，但此问题的根源有多种。

通常，对此类问题进行故障排除会非常耗时，从而造成严重影响。

本文档解释以下内容：

- 从最终用户和ISE管理员的角度显示问题。

- 常见的问题场景。

- 触发问题的ISE、AnyConnect和网络操作背后的理论。

- 快速问题识别算法。

- 常见问题情景的经典解决方案。

- 通过Radius会话目录共享终端安全评估状态。

有关后面介绍的概念的更详细说明，请参阅：

高级版和高级版2.2的ISE终端安全评估样式比较

放大镜下的ISE。如何排除ISE故障 — BRKSEC-3229

问题

最终用户体验

通常，在没有网络访问或持续重定向到浏览器中的ISE客户端调配门户时，会出现此问题，同时，AnyConnect ISE终端安全评估模块将终端安全评估状态显示为Compliant。

典型的最终用户体验：

ISE管理员体验

通常，在此问题的初始分类中，ISE管理员执行Radius Live日志调查以确保存在实际身份验证到达ISE。

在此阶段发现的第一个症状表示终端与ISE之间的状态不匹配，如在实时日志或RADIUS身份验证报告终端的最后成功身份验证显示Pending状态状态。

典型的ISE管理员体验：

- 上次身份身份验证成功：爱丽丝。

- 会话的状态为Pending。

- 身份的最后会话事件：爱丽丝。

- 会话事件将状态显示为Compliant。

注意：c.和d。当上述问题出现时，不会始终显示在实时日志中。状态状态为Compliant的会话事件更常见于由陈旧或幻像会话引起的场景（本文档后面部分将介绍）。

常见问题场景

此问题通常表现在两个有问题的场景中，并且每个场景都有多个根本原因。场景：

- AnyConnect ISE终端安全评估模块在终端安全评估过程中被策略服务节点(PSN)错误通知，导致显示错误的终端安全评估状态。

在这种情况下，我们通常处理PSN会话缓存中的陈旧或幻像会话。

- AnyConnect ISE显示上一个发现周期的安全评估状态，因为当前身份验证未触发发现进程。

AnyConnect中的ISE终端安全评估模块具有触发发现进程的有限数量的事件。在身份验证或重新身份验证期间，可能未检测到这些事件。

陈旧/幻像会话问题

为了更好地了解问题，请调查所需的ISE会话管理逻辑和AnyConnect发现流程。

ISE会话管理逻辑

在ISE部署中，有两个人员负责会话管理流程：PSN和监控节点(MNT)。

要正确排除故障并确定此问题，请务必了解两个角色上的会话管理理论。

MNT和会话管理

如本图所述，MNT节点根据来自PSN的已通过的身份验证系统日志消息创建季节。

会话状态稍后可由系统日志更新，以便记帐。

MNT上的会话删除在以下三种情况下发生：

1.没有记帐开始的会话在创建后约60分钟删除：每5分钟执行一个cron作业以检查会话状态和清除状态。

2.在同一cron作业处理记账停止后约15分钟内终止的会话被删除。

3.每次执行时相同的cron也会删除处于“已启动”状态超过5天（120小时）的会话。已启动状态表示MNT节点已处理身份验证和记帐，以启动会话的系统日志。

来自PSN的系统日志消息示例：

当在DEBUG中启用runtime-aaa组件时，这些消息将记录到prrt-server.log中。粗体部分可用于构造搜索正则表达式。

通过身份验证：

AcsLogs,2020-04-07 10:07:29,202,DEBUG,0x7fa0ada91700,cntx=0000629480,sesn=skuchere-ise26-1/375283310/10872,CPMSessionID=0A3E946C00000073559C0123,user=bob@example.com,CallingStationID=00-50-56-B6-0B-C6,FramedIPAddress=192.168.255.205,Log_Message=[2020-04-07 22:53:24.288 +02:00 0000423024 5200 NOTICE Passed-Authentication: Authentication succeeded, ConfigVersionId=87, Device IP Address=10.62.148.108, DestinationIPAddress=192.168.43.26, DestinationPort=1812, UserName=bob@example.com, Protocol=Radius, RequestLatency=45, NetworkDeviceName=3850-1-BB, User-Name=bob@example.com, NAS-IP-Address=10.62.148.108, NAS-Port=50105, Service-Type=Framed, Framed-IP-Address=192.168.255.205, Framed-MTU=1472, State=37CPMSessionID=0A3E946C00000073559C0123\;42SessionID=skuchere-ise26-1/375283310/10872\;, Calling-Station-ID=00-50-56-B6-0B-C6, NAS-Port-Type=Ethernet, NAS-Port-Id=GigabitEthernet1/0/5, EAP-Key-Name=, cisco-av-pair=service-type=Framed, cisco-av-pair=audit-session-id=0A3E946C00000073559C0123, cisco-av-pair=method=dot1x, cisco-av-pair=client-iif-id=526638260, NetworkDeviceProfileName=Cisco, NetworkDeviceProfileId=b0699505-3150-4215-a80e-6753d45bf56c, IsThirdPartyDeviceFlow=false, RadiusFlowType=Wired802_1x, AcsSessionID=skuchere-ise26-1/375283310/10872, AuthenticationIdentityStore=EXAMPLE, AuthenticationMethod=MSCHAPV2, SelectedAccessService=Default Network Access, SelectedAuthorizationProfiles=PermitAccess, IsMachineAuthentication=false, IdentityGroup=Endpoint Identity Groups:Profiled:Workstation, Step=11001, Step=11017, Step=15049, Step=15008, Step=15048, Step=15048, Step=15048, Step=11507, Step=12500, Step=12625, Step=11006, Step=11001, Step=11018, Step=12301, Step=12300, Step=12625, Step=11006, Step=11001, Step=11018, Step=12302, Step=12318, Step=12800, Step=12805, Step=12806, Step=12807, Step=12808, Step=12810, Step=12811, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=12318, Step=12812, Step=12813, Step=12804, Step=12801, Step=12802, Step=12816, Step=12310, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=12313, Step=11521, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=11522, Step=11806, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=11808, Step=15041, Step=22072, Step=15013, Step=24210, Step=24216, Step=15013, Step=24430, Step=24325, Step=24313, Step=24319, Step=24323, Step=24343, Step=24402, Step=22037, Step=11824, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=11810, Step=11814, Step=11519, Step=12314, Step=12305, Step=11006, Step=11001, Step=11018, Step=12304, Step=24715, Step=15036, Step=24209, Step=24211, Step=24432, Step=24325, Step=24313, Step=24319, Step=24323, Step=24355, Step=24416, Step=15048, Step=15016, Step=22081, Step=22080, Step=12306, Step=11503, Step=11002, SelectedAuthenticationIdentityStores=Internal Users, SelectedAuthenticationIdentityStores=All_AD_Join_Points, SelectedAuthenticationIdentityStores=Guest Users, AuthenticationStatus=AuthenticationPassed, NetworkDeviceGroups=IPSEC#Is IPSEC Device#No, NetworkDeviceGroups=Location#All Locations, NetworkDeviceGroups=Device Type#All Device Types, IdentityPolicyMatchedRule=Dot1X, AuthorizationPolicyMatchedRule=Compliant-Wired, EapTunnel=PEAP, EapAuthentication=EAP-MSCHAPv2, CPMSessionID=0A3E946C00000073559C0123, EndPointMACAddress=00-50-56-B6-0B-C6, PostureAssessmentStatus=NotApplicable, EndPointMatchedProfile=Microsoft-Workstation, ISEPolicySetName=Default, IdentitySelectionMatchedRule=Dot1X, AD-User-Resolved-Identities=bob@example.com, AD-User-Candidate-Identities=bob@example.com, AD-User-Join-Point=EXAMPLE.COM, StepData=4= Radius.NAS-IP-Address, StepData=5= Cisco-VPN3000.CVPN3000/ASA/PIX7x-Tunnel-Group-Name, StepData=6= DEVICE.Device Type, StepData=77=All_User_ID_Stores, StepData=78=Internal Users, StepData=81=All_AD_Join_Points, StepData=82=All_AD_Join_Points, StepData=83=bob@example.com, StepData=84=example.com, StepData=85=example.com, StepData=87=bob@example.com, StepData=88=All_AD_Join_Points, StepData=109=EXAMPLE, StepData=110=bob@example.com, StepData=111=example.com, StepData=112=example.com, StepData=114=example.com, StepData=115=EXAMPLE, StepData=116= EXAMPLE.ExternalGroups, AD-User-Resolved-DNs=CN=bob\,CN=Users\,DC=example\,DC=com, AD-User-DNS-Domain=example.com, AD-Groups-Names=example.com/Users/Domain Users, AD-User-NetBios-Name=EXAMPLE, IsMachineIdentity=false, UserAccountControl=66048, AD-User-SamAccount-Name=bob, AD-User-Qualified-Name=bob@example.com, allowEasyWiredSession=false, TLSCipher=ECDHE-RSA-AES256-GCM-SHA384, TLSVersion=TLSv1.2, DTLSSupport=Unknown, HostIdentityGroup=Endpoint Identity Groups:Profiled:Workstation, Network Device Profile=Cisco, Location=Location#All Locations, Device Type=Device Type#All Device Types, IPSEC=IPSEC#Is IPSEC Device#No, ExternalGroups=S-1-5-21-875452798-754861120-3039794717-513, IdentityAccessRestricted=false, PostureStatus=Compliant, Response={Class=CACS:0A3E946C00000073559C0123:skuchere-ise26-1/375283310/10872; EAP-Key-Name=19:5e:8c:e9:13:0c:89:23:78:49:ad:2b:d4:31:63:51:27:81:db:e2:61:b1:51:36:6d:11:10:41:ce:3b:aa:cc:c6:66:4e:7c:92:f8:83:c5:06:84:ac:95:4c:5b:f1:b2:37:a2:f5:04:4e:9e:4d:08:79:55:b7:4d:9a:41:f5:b2:0a; MS-MPPE-Send-Key=****; MS-MPPE-Recv-Key=****; LicenseTypes=65541; },],MessageFormatter.cpp:107

记帐开始：

AcsLogs,2020-04-07 10:07:30,202,DEBUG,0x7fa0ad68d700,cntx=0000561096,sesn=skuchere-ise26-1/375283310/10211,CPMSessionID=0A3E946C00000073559C0123,user=bob@example.com,CallingStationID=00-50-56-B6-0B-C6,FramedIPAddress=192.168.255.205,Log_Message=[2020-04-07 10:07:30.857 +02:00 0000382874 3000 NOTICE Radius-Accounting: RADIUS Accounting start request, ConfigVersionId=87, Device IP Address=10.62.148.108, UserName=bob@example.com, RequestLatency=7, NetworkDeviceName=3850-1-BB, User-Name=bob@example.com, NAS-IP-Address=10.62.148.108, NAS-Port=50105, Framed-IP-Address=192.168.255.205, Class=CACS:0A3E946C00000073559C0123:skuchere-ise26-1/375283310/10210, Called-Station-ID=00-E1-6D-D1-4F-05, Calling-Station-ID=00-50-56-B6-0B-C6, Acct-Status-Type=Start, Acct-Delay-Time=0, Acct-Session-Id=00000041, Acct-Authentic=Remote, Event-Timestamp=1586279242, NAS-Port-Type=Ethernet, NAS-Port-Id=GigabitEthernet1/0/5, cisco-av-pair=audit-session-id=0A3E946C00000073559C0123, cisco-av-pair=method=dot1x, AcsSessionID=skuchere-ise26-1/375283310/10211, SelectedAccessService=Default Network Access, Step=11004, Step=11017, Step=15049, Step=15008, Step=15048, Step=22083, Step=11005, NetworkDeviceGroups=IPSEC#Is IPSEC Device#No, NetworkDeviceGroups=Location#All Locations, NetworkDeviceGroups=Device Type#All Device Types, CPMSessionID=0A3E946C00000073559C0123, Network Device Profile=Cisco, Location=Location#All Locations, Device Type=Device Type#All Device Types, IPSEC=IPSEC#Is IPSEC Device#No, ],MessageFormatter.cpp:107

中期会计更新：

AcsLogs,2020-04-07 22:57:48,642,DEBUG,0x7fa0adb92700,cntx=0000629843,sesn=skuchere-ise26-1/375283310/10877,CPMSessionID=0A3E946C00000073559C0123,user=bob@example.com,CallingStationID=00-50-56-B6-0B-C6,FramedIPAddress=192.168.255.205,Log_Message=[2020-04-07 22:57:48.650 +02:00 0000423268 3002 NOTICE Radius-Accounting: RADIUS Accounting watchdog update, ConfigVersionId=87, Device IP Address=10.62.148.108, UserName=bob@example.com, RequestLatency=8, NetworkDeviceName=3850-1-BB, User-Name=bob@example.com, NAS-IP-Address=10.62.148.108, NAS-Port=50105, Framed-IP-Address=192.168.255.205, Class=CACS:0A3E946C00000073559C0123:skuchere-ise26-1/375283310/10872, Called-Station-ID=00-E1-6D-D1-4F-05, Calling-Station-ID=00-50-56-B6-0B-C6, Acct-Status-Type=Interim-Update, Acct-Delay-Time=0, Acct-Input-Octets=2293926, Acct-Output-Octets=0, Acct-Session-Id=00000041, Acct-Authentic=Remote, Acct-Input-Packets=15785, Acct-Output-Packets=0, Event-Timestamp=1586325462, NAS-Port-Type=Ethernet, NAS-Port-Id=GigabitEthernet1/0/5, cisco-av-pair=audit-session-id=0A3E946C00000073559C0123, cisco-av-pair=method=dot1x, AcsSessionID=skuchere-ise26-1/375283310/10877, SelectedAccessService=Default Network Access, Step=11004, Step=11017, Step=15049, Step=15008, Step=22085, Step=11005, NetworkDeviceGroups=IPSEC#Is IPSEC Device#No, NetworkDeviceGroups=Location#All Locations, NetworkDeviceGroups=Device Type#All Device Types, CPMSessionID=0A3E946C00000073559C0123, Network Device Profile=Cisco, Location=Location#All Locations, Device Type=Device Type#All Device Types, IPSEC=IPSEC#Is IPSEC Device#No, ],MessageFormatter.cpp:107

记帐停止：

AcsLogs,2020-04-08 11:43:22,356,DEBUG,0x7fa0ad68d700,cntx=0000696242,sesn=skuchere-ise26-1/375283310/11515,CPMSessionID=0A3E946C00000073559C0123,user=bob@example.com,CallingStationID=00-50-56-B6-0B-C6,FramedIPAddress=192.168.255.205,Log_Message=[2020-04-08 11:43:22.368 +02:00 0000463071 3001 NOTICE Radius-Accounting: RADIUS Accounting stop request, ConfigVersionId=88, Device IP Address=10.62.148.108, UserName=bob@example.com, RequestLatency=12, NetworkDeviceName=3850-1-BB, User-Name=bob@example.com, NAS-IP-Address=10.62.148.108, NAS-Port=50105, Framed-IP-Address=192.168.255.205, Class=CACS:0A3E946C00000073559C0123:skuchere-ise26-1/375283310/11503, Called-Station-ID=00-E1-6D-D1-4F-05, Calling-Station-ID=00-50-56-B6-0B-C6, Acct-Status-Type=Stop, Acct-Delay-Time=0, Acct-Input-Octets=4147916, Acct-Output-Octets=0, Acct-Session-Id=00000041, Acct-Authentic=Remote, Acct-Session-Time=92157, Acct-Input-Packets=29120, Acct-Output-Packets=0, Acct-Terminate-Cause=Lost Carrier, Event-Timestamp=1586371399, NAS-Port-Type=Ethernet, NAS-Port-Id=GigabitEthernet1/0/5, Framed-IPv6-Address=2001:10::100, Framed-IPv6-Address=2001:10::101, cisco-av-pair=audit-session-id=0A3E946C00000073559C0123, cisco-av-pair=method=dot1x, AcsSessionID=skuchere-ise26-1/375283310/11515, SelectedAccessService=Default Network Access, Step=11004, Step=11017, Step=15049, Step=15008, Step=22084, Step=11005, NetworkDeviceGroups=IPSEC#Is IPSEC Device#No, NetworkDeviceGroups=Location#All Locations, NetworkDeviceGroups=Device Type#All Device Types, CPMSessionID=0A3E946C00000073559C0123, Network Device Profile=Cisco, Location=Location#All Locations, Device Type=Device Type#All Device Types, IPSEC=IPSEC#Is IPSEC Device#No, ],MessageFormatter.cpp:107

PSN和会话管理

PSN会话缓存是一个内存数据库，用于存储特定PSN的所有活动会话。会话缓存始终位于节点本地。

在ISE中没有可以执行从一个节点到另一个节点的完整会话状态复制的机制。

对于每个活动会话ID，PSN存储身份验证/授权阶段收集的所有属性(例如，内部/外部用户组、网络接入设备(NAD)属性、证书属性等)。 这些属性由PSN用于选择不同的策略类型（如身份验证、授权、客户端调配和状态）。

重新启动节点（或节点上的服务）后，会话缓存将被完全删除。

当前会话处理逻辑在两个场景中在会话缓存中创建一个新条目。现有会话的后续详细信息可以通过来自NAD的记帐消息进行更新。

- 会话已在PSN上成功通过身份验证。

- PSN获取会话的记帐临时更新，该更新在会话缓存中不存在。

当涉及会话删除时，PSN将实施以下逻辑：

- 处理记帐停止消息后，会立即删除会话缓存条目。

- 当节点达到活动会话数阈值时，PSN开始删除最近最少使用的会话。

PSN上过时的会话

在ISE部署中，未执行实际身份验证的PSN已处理现有会话的记帐停止：

过时的会话示例：

1.在PSN上为会话ABC成功进行身份验证。

2. PSN在会话缓存中创建条目。

3.进行状态评估。

4.会话标记为Compliant。

5.授权更改(COA)（由状况状态更改触发）导致终端重新身份验证以应用下一个访问级别。

6.会话ABC的记帐停止到达PSN2。

之后，ABC在PSN1上被卡在陈旧状态，因为此PSN上未处理任何记帐停止消息以将其删除。

如果部署未经历大量的身份验证尝试，则会长时间删除会话。

在以下情况下，过时的会话显示在PSN会话缓存中：

- 由于负载均衡器上的粘性计时器过期，记帐停止进入错误的PSN。

- NAD上的错误配置与为身份验证和记帐配置的PSN不同。

- 网络路径上的临时连接问题，导致NAD故障切换到下一个PSN。

负载均衡器(LB)环境中过时的会话示例：

1.会话ABC的初始身份验证由PSN 1执行。

2.此身份验证在负载均衡器上启动粘性计时器。

3. PSN 1在本地缓存中为会话ABC创建条目。

4.将已通过身份验证的系统日志消息传输到MNT节点。

5.会话ABC的条目创建到MNT会话目录中，状态为Authenticated。

6.会话ABC的记帐开始消息到达PSN 1。

7.使用来自Accounting-Start的信息更新会话ABC的会话缓存条目。

8. Accounting-Start的系统日志消息被传输到MNT节点。

9.会话状态更新为Started。

10.负载均衡器上的粘性计时器过期。

11.会话ABC的记帐停止由负载均衡器转发到PSN 2。

12. Accounting-Stop的系统日志消息由PSN 2转发到MNT。

13.会话ABC在MNT上标记为终止。

PSN上的虚拟会话

幻像会话是会计临时更新到达未对此特定会话执行身份验证的PSN时的场景。在这种情况下，将在PSN会话缓存中创建一个新条目。

如果PSN没有收到此会话的记帐停止消息，则不会删除该条目，除非PSN达到活动会话的限制。

幻像会话示例：

1.在会话ABC的PSN1上执行与旧会话示例中所述的相同步骤。

2.会话ABC在PSN1会话缓存中的状态为Compliant。

3.会话ABC的会计临时更新命中PSN2。

4.会话ABC的会话条目在PSN2上创建。由于会话条目是根据记帐消息创建的，因此其属性数量有限。例如，状况状态对于会话ABC不可用。用户组和其他授权特定属性也不存在。

在以下情况下，虚拟会话显示在PSN会话缓存中：

- 网络传输中的短期中断。

- 网络接入设备的不当行为。

- 负载平衡器上的错误行为或错误配置。

以下是在通向PSN1的网络路径上出现临时问题的场景幻像会话的示例：

1.会话ABC的初始身份验证由PSN执行。

2. PSN1在本地缓存中为会话ABC创建条目。

3.将已通过的身份验证的系统日志消息传输到MNT节点。

4.在TimesTen DB中创建会话ABC的条目，其状态为Authenticated。

5.会话ABC的记帐开始消息到达PSN 1。

6.使用来自Accounting-Start的信息更新会话ABC的会话缓存条目。

7. Accounting-Start的系统日志消息被传输到MNT节点。

8.会话状态更新为Started。

9.会话ABC的临时记帐更新被转发到PSN2。

10. PSN2在本地缓存中为会话ABC创建一个条目。

11.将会话ABC的记账停止转发到PSN1。

12.会话ABC的条目将从PSN1上的会话缓存中删除。

13. PSN 1将用于Accounting-Stop的系统日志消息转发到MNT。

14.会话ABC在MNT上标记为已终止。

这描述了为长寿VPN连接创建的虚拟会话场景：

1. PSN1上的初始身份验证。

2.会话ABC在会话缓存中创建。

3.记帐会启动PSN处理的消息。

4.新的IP地址已分配给虚拟专用网络(VPN)适配器。

5.带有IP地址信息的临时记帐更新位于PSN上。

6.将IP地址信息添加到会话缓存中。

7.对PSN1进行状态评估。

8.状态在会话中更新。

9. ISE执行COA推送；这会触发要分配的新访问级别。

10.网络路径出现中断，导致PSN1无法访问。

11.在临时更新间隔到期后，ASA/FTD检测到PSN1无法访问。

12.中期会计更新适用于PSN2。

13.虚拟会话在PSN2会话缓存中创建。

如果PSN1稍后变为可访问(14)，则所有后续记帐消息都在该处转发(15,16)，这会将会话ABC保留在PSN2会话缓存中一段未定义的时间。

陈旧会话和虚拟会话如何中断状态流程

要了解陈旧会话和虚拟会话如何中断安全评估，您可以查看AnyConnect ISE安全评估模块发现流程：

第1阶段发现：

在此阶段，ISE终端安全评估模块执行4个同时探测以定位对终端执行身份验证的PSN。

首先，图中的3个探测是基于重定向的（默认GW IP）。发现主机IP（如果已定义）和enroll.cisco.com IP；这些探测功能始终将代理指向正确的PSN，因为重定向URL是从NAD本身获取的。

将4号探测发送到在ConnectionData.xml文件中显示的所有主服务器。此文件在第一次成功的安全评估尝试后创建。如果客户端在PSN之间迁移，则可以稍后更新文件内容。

在Windows系统上，文件位置为C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\ISE Posture\。

由于同时执行所有阶段1探测，因此仅当所有其他3个探测失败或ISE终端安全评估模块无法在5秒内与重定向URL中返回的PSN建立正确通信时，才使用探测4的结果。

当探测器4位于PSN上时，它包含在终端上发现的活动IP和MAC地址列表。PSN使用此数据在本地缓存中查找此终端的会话。

如果PSN的终端存在陈旧或幻像会话，则可能导致客户端稍后显示错误的终端安全评估状态。

当代理获得探测4的多个应答时(ConnectionData.xml可以包含多个主PSN)，始终使用最快的应答。

第2阶段发现：

所有第2阶段发现探测都是无重定向的，这意味着每个探测都会触发目标PSN上的会话查找。

如果PSN无法在本地会话缓存中找到会话，则必须执行MNT查找（仅基于MAC地址）以查找会话所有者并将所有者名称返回给代理。

由于所有探测都会触发会话查找，因此阶段2发现可能更容易受到由于陈旧或幻像会话而导致的问题。

如果PSN进入第2阶段，会话缓存中存在的发现探测功能会为同一终端创建陈旧或幻像条目。这会导致向最终用户返回错误的终端安全评估状态。

此示例显示了PSN保留过时会话或虚拟会话时如何进行终端安全评估：

注意：仅当所有基于重定向的发现探测失败或实施非重定向状态时，才会出现此问题。

1. ISE终端安全评估模块发出的任何Find my session probe。

2. PSN在会话缓存中执行会话查找。如果要找到会话，则会出现过时的会话或幻像会话问题。

3. PSN运行客户端调配策略选择。如果缺少身份验证/授权属性和客户配置的所有策略的虚拟会话非常具体（例如，为特定Active Directory组创建策略），则PSN无法分配正确的客户端调配策略。这可在错误消息中显示：“绕过AnyConnect扫描您的网络未配置为使用思科NAC代理”。

- 如果客户端调配策略是通用的（幻像会话中可用的属性足以将策略与AnyConnect配置相匹配），PSN将回复继续评估过程所需的详细信息。

- 在此步骤中，当我们可以处理过时的会话时，PSN立即回复安全评估状态Compliant，并且不会执行所有后续步骤。PSN不会发送COA，因为它认为会话已经合规。在Radius Live日志中，没有显示状态为Compliant的会话事件。

4.对于虚拟会话场景，ISE终端安全评估模块继续初始终端安全评估请求。此请求包含有关在终端上检测到的所有安全和补丁管理产品的信息。

5. PSN使用来自请求和会话属性的信息来匹配正确的终端安全评估策略。由于幻像会话此时缺少属性，因此没有要匹配的策略。在这种情况下，PSN会应答其合规的终端。这是当安全评估策略不匹配时的默认ISE行为。

注意：当存在可从虚拟会话属性中选择的通用策略时，我们继续执行步骤6。

6. PSN将所选安全评估策略返回给代理。

注意：如果未选择任何策略，PSN将返回兼容状态。

7.代理会将每个策略/需求的状态返回为“通过”或“失败”。

8.报告对ISE进行评估，会话状态更改为合规。

注意：如果出现由虚拟会话引起的终端安全评估问题，ISE管理员可能会注意到一些失败的终端安全评估COA。在这种情况下，会从错误的PSN和错误的会话ID执行COA请求。

新的身份验证尝试时发现进程不会启动

ISE终端安全评估模块用于监控终端上有限数量的事件以触发发现进程。

触发发现的事件：

- 初始ISE终端安全评估模块安装。

- 用户登录。

- 电源事件。

- 接口状态更改。

- 操作系统在睡眠后恢复。

- 默认网关(DG)更改。

- 状况重新评估(PRA)故障，请参阅思科漏洞ID CSCvo69557

ISE终端安全评估模块未检测到新的dot1x身份验证、PC解锁和IP地址更改。

在以下情况下，ISE终端安全评估模块无法检测新的身份验证或重新身份验证尝试：

- 重新身份验证命中不同的PSN（可能是由于LB决策或原始PSN的问题）。

- NAD在重新身份验证时生成新的会话ID。

在不同的PSN上重新进行身份验证

下图显示了一个由于原始PSN中断而导致不同PSN上的重新身份验证的示例。具有负载均衡器的场景看起来非常相似。

在负载均衡器的情况下，由于粘性计时器过期，重新身份验证被定向到不同的PSN。

1. PSN1上的初始身份验证

2.在PSN1会话缓存中创建会话ABC。

3.使用PSN1执行状态评估。

4.会话ABS安全评估状态变为合规。

5. COA由状况状态更改触发，导致终端重新身份验证以应用下一个访问级别。

6. PSN1变为不可用。

7.会话ABC的重新身份验证命中PSN2。

8.由于这是PSN2的新会话，因此会话的状态变为Pending。

初始状态由PSN分配给会话：

注意：State-machine仅描述状态状态的初始选择。根据从ISE终端安全评估模块收到的报告评估，最初标记为Unknown的每个会话随后会变为Compliant或Non-Compliant。

NAD在重新身份验证时生成新的会话ID

这种情况可能发生在两种最常见的情形中：

- ISE端重新身份验证配置不正确。此问题的解决方案将在本文档的后面部分介绍。

- NAD方面的不当行为；通常，在重新身份验证尝试期间，NAD会保留相同的会话ID。这是一个潜在的错误行为，需要在NAD本身上进行调查。

新的会话ID可以在其他一些转角案例场景中生成。例如，在某些情况下，无线漫游可能是导致这种情况的一个原因。

这里的主要问题是，ISE PSN始终将新会话置于posture Pending状态，除非配置了终端安全评估租用。安全评估租赁将在本文档后面部分进行说明。

快速确定问题何时由陈旧/幻像会话引起

确定AnyConnect在重定向状态时是否显示合规性是由过期/幻像会话引起的。我们需要在终端处于有问题的状态时获取对终端的访问权限。

1. 调查系统扫描详细信息：

1.单击AnyConnect UI中的齿轮图标

2.在新窗口中，定位至“系统扫描”>“统计信息”

在此，请注意以下两个要素：

- Latest Scan Start Time — 此处的时间戳必须接近发现问题的时间。

- Policy Server — 此字段指示对终端执行状态评估的策略服务器的名称。此处的FQDN需要与来自重定向URL的FQDN（用于重定向基本状态）或来自上次身份验证尝试的PSN名称（用于无重定向状态）进行比较。

2. 将系统扫描统计信息中的策略服务器FQDN与对终端进行身份验证的节点名称进行比较：

此演示显示了问题识别所需步骤的记录：

陈旧/幻像会话高级故障排除

上一个示例用于将失效或幻像会话的问题与发现进程未启动的问题区分开来。

同时，我们需要确定触发了问题的实际会话，以便更好地了解它到底是如何变成陈旧或幻像会话问题的。

虽然在某些情况下无法避免陈旧和幻像会话，但我们需要确保实施最佳实践，以便环境中不会创建陈旧/幻像会话。

DART捆绑包

分析从重现问题的终端获取的DART捆绑包。

- 在DART中仅保留重要日志。建议在重现问题之前清除日志。

为此，DART捆绑工具需要以管理员身份启动并执行日志清除。

1. 在Windows上，导航至“开始”并开始键入DART，右键点击，然后选择 — 以管理员身份运行

2. 在第一个向导屏幕上，单击下一步。

3. 在下一个向导屏幕上，单击Clear All Logs。

4. 重现问题后，可以从此处收集DART；单击下一步。

DART捆绑包分析

收集DART捆绑包后，将其取消存档，并重点关注Cisco AnyConnect ISE终端安全评估模块文件夹中的AnyConnect_ISEPosture.txt文件。此文件包含所有发现相关事件。

1.开始故障排除并确定发现重启的所有时刻。要搜索的关键字是重新启动发现或HTTP发现。此处，导航到在出现问题的时刻执行发现重新启动的行：

2.发现重启后有多行，其中有一行包含 — 探测无MNT阶段目标。这是第1阶段发现开始的一个指标：

建议以不同颜色突出显示从ConnectionData.xml（身份验证状态目标）获取的具有相同颜色和先前连接的PSN的所有基于重定向的探测器。

通常，PSN FQDN非常相似，很难发现差异。

3.读取日志文件，查看每个单个探测的结果。下面是失败的探测的示例：

4.在文件的第1阶段或第2阶段的发现重新启动后，您会看到一个或多个PSN的成功应答：

5.几行之后，有一行带有关键字MSG_NS_SWISS_NEW_SESSION。

此行包含PSN在会话查找过程中选择的实际会话ID。

使用此会话ID进一步调查ISE，以确定此会话如何变成陈旧/幻影：

ISE日志调查

在clientwebapp组件启用到DEBUG的guest.log中，可以看到使用陈旧/幻像会话进行应答的PSN。

PSN从ISE终端安全评估代理获取请求。这是来自AnyConnect的请求，因为User-Agent值：

cisco.cpm.client.posture.PostureStatusServlet -::- Got http request from 192.168.255.228 user agent is: Mozilla/4.0 (compatible; WINDOWS; 1.2.1.6.1.48; AnyConnect Posture Agent v.4.6.03049)

cisco.cpm.client.posture.PostureStatusServlet -::- mac_list from http request ==> C0:4A:00:1F:6B:39

cisco.cpm.client.posture.PostureStatusServlet -::- iplist from http request ==> 192.168.255.228

cisco.cpm.client.posture.PostureStatusServlet -::- Session id from http request - req.getParameter(sessionId) ==> null

请求包含IP地址和MAC地址的数组。在此特定示例中，每个数组仅包含一个值。

日志显示来自请求的会话ID为null，这表示这是来自非基于重定向的探测功能的请求。

之后，您可以看到阵列中的值如何用于定位会话ID:

cpm.client.provisioning.utils.ProvisioningUtil -::- the input ipAddress from the list currently processed in the for loop ==> 192.168.255.228

cpm.client.provisioning.utils.ProvisioningUtil -::- the ipAddress that matched the http request remote address ==> 192.168.255.228

cpm.client.provisioning.utils.ProvisioningUtil -::- the clientMac from the macarray list for the for loop index matching the ipAddress list index ==> C0-4A-00-1F-6B-39

cisco.cpm.client.posture.PostureStatusServlet -::- Found Client IP matching the remote IP 192.168.255.228, corresponding mac address C0-4A-00-1F-6B-39

cpm.client.provisioning.utils.ProvisioningUtil -::- Session = 0a3e949c000000495c216240

在带有关键字Sent http response的行之后，您可以看到来自实际应答的内容：

cisco.cpm.client.posture.PostureStatusServlet -::- Sent an http response to  192.168.255.228 with X-ISE-PDP=clemea19-ise1.demo.local.

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-PDP value is clemea19-ise1.demo.local

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-POSTURE value is /auth/perfigo_validate.jsp

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-POSTURE_PORT value is 8443

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-AC_PKG_PORT value is 8443

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-GUESTFLOW value is false

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-AC_CONFIG_URL value is https://clemea19-ise1.demo.local:8443/auth/anyconnect?uuid=f62337c2-7f2e-4b7f-a89a-3508d761173c

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-AC_CONFIG_URI value is /auth/anyconnect?uuid=f62337c2-7f2e-4b7f-a89a-3508d761173c

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-AC_PKG_URL value is https://clemea19-ise1.demo.local:8443/auth/provisioning/download/066ac0d6-2df9-4a2c-a129-fabf1ace36aa

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-AC_PKG_URI value is /auth/provisioning/download/066ac0d6-2df9-4a2c-a129-fabf1ace36aa

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-AC_PKG_VER value is 4.6.3049.0

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-STATUS_PATH value is /auth/status

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-BACKUP_SERVERS value is clemea19-ise2.demo.local

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-SessionId value is 0a3e949c000000495c216240

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-PostureDomain value is posture_domain

cpm.client.provisioning.utils.ProvisioningUtil -::- header X-ISE-POSTURE_STATUS value is Unknown

调查ISE报告

了解过期/幻像会话的ID后，您可以调查Radius记帐报告，以便更好地了解导致此会话过期/幻像的原因：

- 导航到操作>报告>终端和用户> Radius记账报告，并运行此报告7天。使用终端ID作为过滤器密钥。

下面是一个报告示例，其中显示了如何在ciscolive-ise2上保留过期的会话：

1. PSN ciscolive-ise2是会话的记账开始。

2. 会话的临时更新已在同一PSN上处理。

3. 有问题的会话ID的记账停止消息发送到其他PSN(ciscolive-ise1)。

一种快速方法，可确定问题何时由未重新启动发现导致

此处适用的逻辑与上一期相同。唯一的区别是您需要关注最新的扫描开始时间。对于此类问题，上次扫描的时间戳位于过去某个位置。

通常，当最终用户发现问题时，会看到一段时间之前发生的扫描。在ISE Radius Live日志中，发现有问题的终端最近的身份验证尝试。

此演示显示了问题识别所需步骤的记录：

高级故障排除：没有发现重新启动

此方法与高级故障排除Stale/Phantom会话部分非常相似。主要的故障排除要素是DART捆绑调查。

在DART捆绑包中，您可以搜索发现重新启动（如针对前一问题所示），并确认报告问题时没有发现重新启动。

在ISE端，重点查看Radius Live Logs/ Radius身份验证报告，以确认PSN之间存在故障切换或NAD已生成新的会话ID。

解决方案

传统方法 — 问题避免

过去，ISE上没有能够解决本文档中描述问题的功能，因此唯一的方法是依靠在网络和ISE端实施的一组最佳实践将风险降至最低。

可以最大限度地减少ISE部署中陈旧或幻像会话数量的最佳实践

尽可能始终实施基于重定向的终端安全评估

对此建议的一个常见反驳是用户体验不佳；操作系统或浏览器中的弹出窗口。这表示在后台的AnyConnect ISE终端安全评估模块执行评估流程时进行重定向。

作为解决方案，可以仅重定向ISE终端安全评估模块发现探针并选择性地允许所有其他流量。

此示例显示重定向的ACL旨在仅将HTTP请求重定向到发现主机（本示例中为10.1.1.1）和enroll.cisco.com(172.16.1.80):

ip access-list extended REDIRECT-DH-ENROLL

permit tcp any host 10.1.1.1 eq www

permit tcp any host 172.16.1.80

deny   ip any any

为了保持可接受的安全级别，此类重定向ACL可与从ISE分配的DACL结合使用。

挂起状态仅允许连接到终端经过身份验证的PSN

此方法适用于不支持url重定向的环境（例如，使用第三方NAD实施）。

作为解决方案，实施多个PosturePending授权策略（每个PSN一个）。 每个策略需要包含进行身份验证的PSN名称作为条件之一。

在分配给每个策略的授权配置文件中，必须阻止对所有PSN的访问（进行身份验证的节点除外）。

为2节点部署创建授权策略：

1. PSN1的状态挂起策略

2.用作策略条件的PSN1名称。

3.具有ACL的授权配置文件，阻止对除PSN1外的所有PSN的访问。

4. PSN2的状态挂起策略。

5.用作策略条件的PSN2名称。

6.具有ACL的授权配置文件，阻止对除PSN2外的所有PSN的访问。

7.状态“兼容”授权策略。

图中说明了此方法的运作方式：

1.身份验证命中PSN1。

2.由于配置了授权策略，PSN1会分配阻止访问除PSN1之外的所有其他节点的授权配置文件。

3. AnyConnect ISE终端安全评估模块重新启动发现过程。

4.NAD阻止对PSN2的探测，就像之前分配的ACL一样。

5.NAD上分配的ACL允许探测到PSN1。

负载均衡器最佳实践

- 在负载均衡器上启用粘性，以使用Calling-Station-ID作为粘性密钥进行身份验证和记帐。有关ISE的LB最佳实践的更多详细信息，请访问此处。

- 使用比平均工作日更长的粘性计时器来覆盖PC进入睡眠的时间（例如10小时而不是8小时）。

- 在实施重新身份验证的情况下，使用重新身份验证计时器略低于粘性计时器（例如，如果粘性配置为10小时，则使用8小时）。 这可以确保通过重新身份验证延长粘滞间隔。

Posture Over VPN使用案例

- 确保accounting-interim更新间隔大于或等于vpn-session-timeout。这样可以最大程度地减少长VPN会话期间PSN之间的记帐抖动。

此示例显示为20小时配置的临时记帐更新间隔。这不会阻止传输分配给终端的IP地址的初始临时更新。

aaa-server ISE protocol radius

interim-accounting-update periodic 20

group-policy SSL-VPN attributes

vpn-idle-timeout 1200

vpn-session-timeout 1200

可以实施最佳实践，以最大程度降低不重新启动ISE终端安全评估模块的影响

启用状态租用

这是ISE上的一项功能，该功能将终端标记为合规的指定时间段（1-365天）。 安全评估租赁值是终端属性，这意味着它是存储的ISE数据库。

包括终端安全评估租赁的所有终端属性在ISE部署中的所有节点上复制。

当PSN获得终端安全评估的新会话时，可以利用租用立即将该会话标记为Compliant。

为了做出此决策，PSN使用3个值。这些值为：

1.在ISE设置中为终端安全评估租用定义的天数：导航到Administration > System > Posture > General Settings:

2. PostureExpiry属性的值是包含Epoch时间戳的实际终端属性。在ISE管理员启用终端安全评估租约后，在终端首次成功进行终端安全评估尝试时初始填充PostureExpiry值。

之后，此值在租期到期后进行的下一次成功安全评估尝试时更新。

当打开其中一个状态终端时，您可以在情景可视性>终端中看到PostureExpiry:

此值可以转换为人类可读的时间戳，例如，此处 — https://www.epochconverter.com/

3.发生新身份验证时的PSN系统时间

当终端安全评估租用的身份验证到达PSN时，它使用PostureExpiry和系统日期获取上次成功的状态检查所经过的天数。

如果结果值在设置中定义的安全评估租用间隔内，会话将获得Compliant状态。

如果结果值大于租用值，则会话将获得Unknown状态。

这会触发再次执行安全评估并且可保存新的PostureExpiry值。

下图描述了发生故障切换时的过程：

1.对PSN1执行初始身份验证。

2.会话ABC在会话缓存中创建。

3.进行状态评估。

4.会话状态更改为“合规”

5. COA由状况状态更改触发，导致终端重新身份验证以应用下一个访问级别。

6.终端中保存了PostureExpiry值。

7.端点数据在部署中复制。

8.下一个身份验证命中PSN2。

9. PSN2检查终端是否处于有效的终端安全评估租约中。

11.会话会作为Compliant（兼容）添加到会话缓存。

12.由于有效租约，会话创建时安全评估状态为Compliant。

重新身份验证实施

始终通过在重新身份验证期间保持连接中选择的RADIUS-Request从ISE推送重新身份验证计时器。此设置确保NAD在重新身份验证时保持相同的会话ID。

.

具有负载均衡器的环境

可以实施相同的一组最佳实践（在过时/幻像会话部分中说明）。

不同的子网可用于待处理和合规状态

当网络设计提供使用不同子网Pending和Compliant状态时，此方法可以保证每次状态更改都会导致默认网关更改。

与重新身份验证计时器相同的时间间隔内使用的状态评估

状态评估可以启用且间隔等于重新身份验证计时器。在这种情况下，当原始PSN变得不可用时，PRA故障会重新启动发现过程。

现代方法 — 状态共享

作为ISE 2.6的已实施增强功能(在Cisco Bug ID CSCvi35647中描述)的补丁6具有一项新功能，用于在ISE部署中的所有节点间实现会话状态状态共享。

此增强功能已集成到未来版本中：ISE 2.7补丁2和ISE 3.0。

此新功能基于ISE 2.6中引入的轻量级会话目录(LSD)机制。在较新版本中，此功能已重命名为轻量级数据分发(LDD)Radius会话目录。  默认情况下启用轻型数据分发，并允许在ISE节点之间共享有限的会话上下文。在PSN之间不存在完整会话上下文复制之类的情况，每个会话仅共享有限数量的属性。

当部署中的一个节点必须确定当前会话所有者时，轻会话目录无需对MNT执行资源昂贵的API调用。

通常，COA流启动时需要查找所有者。使用LDD，每个PSN可以从本地Radius会话目录缓存找到会话的实际所有者。

轻量级数据分布架构

此功能包含以下元素：

- Radius会话目录(RSD)缓存

此缓存存在于每个ISE节点上，并存储ISE部署中显示的所有活动会话。每个会话在缓存中的属性数量有限。

以下是每个会话的Radius会话目录中存储的属性示例：

- 会话 ID

- 终端MAC

- 呼叫站ID

- 终端IP

- PSN IP — 进行身份验证的PSN

- PSN FQDN

- NAS-IP-Address

- NAS-IPv6-Address

- 状态 — 已验证、已启动、已停止

- RabbitMQ交换

在ISE部署中的每个节点上都会出现一个交换，其中发布服务器、相关队列和消费者显示。这可确保在所有ISE节点之间形成全网状拓扑。

- 发布者

Radius会话目录在此处表示发布者。当PSN处理新的成功身份验证时，将在PSN会话缓存中创建新会话。

对于此会话，会将一组有限的属性放入Radius会话目录中。

- 消费者 — 在所有其他节点上；Radius会话目录代表消费者。

注意：通用RabbitMQ术语和体系结构不在本文档范围之内。

图中解释了COA流如何与RSD缓存配合工作：

1.对PSN1执行初始身份验证。

2.会话ABC在会话缓存中创建。

3.必需属性保存到RSD中。

4.通过RabbitMQ与所有其他ISE节点共享会话。

5.会话在所有ISE节点的RSD缓存中创建。

6.新的配置文件数据到达PSN2。

7.重新分析端点，并且（在需要COA执行PSN2的更改的情况下）继续执行下一步。

8.将内部API调用提交到RSD缓存以执行COA。

9.来自RSD缓存的数据用于准备代理COA消息。它从一个ISE节点到另一个ISE节点，并包含目标节点可用于向NAD发回CAO请求的所有详细信息。COA消息首先在内部传输到PRRT运行时（ISE内的实际AAA服务器）。

10. PSN2向PSN1发送COA消息。

11. PSN1向NAD发送COA消息。

要在ISE上排除通过LDD的通信故障，请将Light Session Director组件启用到DEBUG:

以下是lsd.log文件中用于原始PSN上会话创建和发布的调试消息的示例：

DEBUG  [pool-45-thread-6][] cisco.cpm.lsd.service.LSDRedisClient -::::- Mapping Session ID 0a3e9498000008e05e071990 to session {"sessionID":"0a3e9498000008e05e071990","endpointMAC":"C0-4A-00-1F-6B-39","callingStationId":"c0-4a-00-1f-6b-39","ipv6AdressLst":[],"psnIP":"192.168.43.26","deviceIP":"192.168.255.102","destinationIP":"192.168.43.26","nasIP":"192.168.255.102","auditSessionID":"0a3e9498000008e05e071990","acctSessionID":"5e07197b/c0:4a:00:1f:6b:39/2299","timeStamp":1577523495,"status":"Started","id":"614f6c44-6c78-4289-b9fd-b352ff012ca4"}

DEBUG  [PrRTEvents-Executor-2][] cisco.cpm.lsd.service.LSDNetAccessEventListener -::::- Publishing session update for session 0a3e9498000008e05e071990

DEBUG  [PrRTEvents-Executor-2][] cisco.cpm.lsd.service.SessionPublisher -::::- Forwarding session 07a26b4b-ea13-438b-99b5-0bbadc9d8bac to batch manager

在所有其他ISE节点上，您可以看到会话是如何消耗的：

[pool-35-thread-38][] cisco.cpm.lsd.service.SessionConsumer -::::- Consumer is processing : sessionID:[0a3e9498000008e05e071990] status:[Started] id:[614f6c44-6c78-4289-b9fd-b352ff012ca4] auditSessionID:[0a3e9498000008e05e071990] accountingSessionID:[5e07197b/c0:4a:00:1f:6b:39/2299] endpointMAC:[C0-4A-00-1F-6B-39] callingStationId: [c0-4a-00-1f-6b-39] endpointIP:[null], IPv6 : [[]], psnIP:[192.168.43.26] deviceIP:[192.168.255.102] destinationIP:[192.168.43.26] nasIP:[192.168.255.102] nasIPv6:[null] timeStamp:[1577523495]

通过RSD共享终端安全评估状态

状态状态共享可解决以下问题：根本原因是旧/幻像会话或在不同PSN上重新进行身份验证，这不会触发发现重启。

当会话变为合规后，此信息即会进入会话RSD，之后可由部署中的每个PSN使用。

还有一些其它角点情况是所述特征无法解决的。例如，当NAD在同一PSN上使用不同的会话ID运行重新身份验证的场景。

此类场景可通过本文档中描述的最佳实践来处理。

此图显示了用于测试状态共享状态的拓扑：

通过RSD共享终端安全评估状态 — 陈旧/幻像会话

要创建陈旧会话，首先必须在skuchere-ise26-1上执行身份验证。然后，必须重新配置NAD以将记帐发送到skuchere-ise26-3。

将一条记帐消息转发到错误的PSN后，必须重新配置NAD（再次）以将记帐发送回skuchere-ise26-1。

图中显示一个记帐报告，证明在skuchere-ise26-3上存在幻像会话：

1. skuchere-ise26-1处理的Accounting-Start消息。

2. skuchere-ise26-3处理的同一会话的临时记帐更新。

3.会话稍后在skuchere-ise26-1上结束。

一段时间后，终端再次连接到网络，但重定向不再有效。在PSN - skuchere-ise26-3的guest.log中，您可以看到以下日志消息，其中在DEBUG中启用了client-webapp组件：

2020-04-08 13:30:48,217 DEBUG [https-jsse-nio-192.168.43.226-8443-exec-4][] cisco.cpm.client.posture.Util -::- Local session 0A3E946C0000007D5B679296 is stale. Newer session for 00-50-56-B6-0B-C6 is 0A3E946C000000805B7C43A3. Owned by skuchere-ise26-1.example.com

当PSN检测到它保留终端已过期/幻像会话时，它不会回复ISE终端安全评估模块，这允许我们从发生最新身份验证的PSN获取正确答案。

作为会话查找时过时/幻像会话问题的解决方案，PSN会检查RSD中是否存在终端的任何新会话。

如果RSD包含的会话ID与本地会话缓存中的PSN不同，则它会假定会话（在会话缓存中显示）已过时。

RSD上的状态共享 — PSN之间的故障转移

要重现此场景，可在分配给合规状态终端的授权配置文件中启用一个短重新身份验证计时器。

之后，重新配置NAD以将身份验证和记帐发送到另一个PSN(skuchere-ise26-3)。

重新身份验证计时器到期后，同一会话将在不同PSN上取消身份验证。

图中显示身份验证报告，其中显示从skuchere-ise26-1到skuchere-ise26-3的同一会话的故障切换：

1.在skuchere-ise26-1上执行身份验证，分配具有重定向的授权配置文件。

2.状态评估成功后的COA。

3.分配合规状态的授权配置文件后进行下一次身份验证。

4.身份验证命中不同的PSN，但它仍然获取合规状态的授权配置文件。

在ise-psc.log中故障切换后，会话在新PSN上处于合规状态，并且在DEBUG中启用了epm-pip和nsf-session组件：

2020-04-09 11:06:42,176 DEBUG [Thread-7979][] cpm.nsf.session.impl.SessionCache -::::- Looking up session 0A3E946C000000896011D045 for attribute Session Session.PostureStatus

2020-04-09 11:06:42,176 DEBUG [Thread-7979][] cpm.nsf.session.api.ExecutionContext -::::- Execution context has session id 0A3E946C000000896011D045

2020-04-09 11:06:42,176 DEBUG [Thread-7979][] cpm.nsf.session.impl.PIPManager -::::- Returning a PIP com.cisco.cpm.nsf.session.impl.SessionPIP for type SESSION and flow null

2020-04-09 11:06:42,176 DEBUG [Thread-7979][] cpm.nsf.session.api.ExecutionContext -::::- Execution context has session id 0A3E946C000000896011D045

2020-04-09 11:06:42,176 DEBUG [Thread-7979][] cpm.nsf.session.impl.SessionCache -::::- Looking up session 0A3E946C000000896011D045

2020-04-09 11:06:42,176 DEBUG [SessionLifecycleNotifier][] cpm.nsf.session.internal.LRUAgingAlogrithm -::::- Accessed session 0A3E946C000000896011D045

2020-04-09 11:06:42,176 DEBUG [Thread-7979][] cpm.nsf.session.impl.SessionCache -::::- Returning for session 0A3E946C000000896011D045 data Attrs: {SavedUserNames=[bob@example.com], Acs.LastStepTime=1586423202174, Acs.AD-User-Qualified-Name=bob@example.com, Acs.AD-User-Resolved-DNs=CN=bob,CN=Users,DC=example,DC=com, Acs.StepData=[110=EXAMPLE, 111=bob@example.com, 112=example.com, 113=example.com, 115=example.com, 116=EXAMPLE], Acs.AD-Log-Id=[1585911138/4778, 1585911138/4779], __IntIdGrps__=[Ljava.lang.String;@6d3c29b5, IdentityGroup.Description=[Ljava.lang.String;@3fca88fb, EXAMPLE.ExternalGroups=S-1-5-21-875452798-754861120-3039794717-513, Acs.AD-Groups-Names=example.com/Users/Domain Users, Acs.AuthenCPMSessionID=0A3E946C000000896011D045, Acs.IsMachineAuthentication=false, InternalEndpoint.IdentityGroup=[Ljava.lang.String;@6daf4c5, IDStoreUserQueryCache=[EXAMPLE#bob@example.com], Acs.CurrentIDStoreName=EXAMPLE, Acs.AD-User-Join-Point=EXAMPLE.COM, Acs.Step=[24432, 24325, 24313, 24319, 24323, 24355, 24416], Acs.CustomerMessageDuplicator=, Network Access.WasMachineAuthenticated=false, IdentityGroup.Name=[Ljava.lang.String;@570ab37a, Acs.StepDataStart=110, Acs.AD-User-DNS-Domain=example.com, Network Access.AuthenticationMethod=4, Acs.AD-User-Resolved-Identities=bob@example.com, InternalUser.IdentityGroup=[Ljava.lang.String;@51a6caed, Acs.AuthenticationMethod=4, Acs.AD-User-NetBios-Name=EXAMPLE, Normalised Radius.RadiusFlowType=0, Network Access.AuthenticationIdentityStore=EXAMPLE, EXAMPLE.IdentityAccessRestricted=false, Acs.AD-User-SamAccount-Name=bob}

IndexValues: {}

2020-04-09 11:06:42,177 DEBUG [Thread-7979][] cisco.cpm.posture.pip.PostureStatusPIP -::::- set postureStatus based on posture LSD dictionary: Compliant

2020-04-09 11:06:42,177 DEBUG [Thread-7979][] cisco.cpm.posture.pip.PostureStatusPIP -::::- PostureStatusPIP for mac 00-50-56-B6-0B-C6 - Attribute Session.PostureStatus value is Compliant

通过在状态选择过程中添加额外的逻辑来解决原始问题。

此图显示了已更改的内容（更改以红色突出显示）：