本文档介绍常见的身份服务引擎(ISE)终端安全评估服务问题,例如“AnyConnect ISE终端安全评估模块显示兼容……”
本文档介绍常见身份服务引擎(ISE)终端安全评估服务问题:“AnyConnect ISE终端安全评估模块在ISE上的会话状态为挂起时显示合规性。”
虽然症状始终相同,但此问题的根源有多种。通常,对此类问题进行故障排除会非常耗时,会导致严重的影响。
本文档解释以下内容:
有关后面介绍的概念的更好解释,请参阅ISE终端安全评估样式比较(针对高级版和高级版2.2)
此问题通常表现为浏览器中缺少网络访问或持续重定向到ISE客户端调配门户,同时AnyConnect ISE终端安全评估模块将终端安全评估状态显示为Compliant。
典型的最终用户体验:

最初对此问题进行分类时,ISE管理员开始调查Radius Live日志以确保身份验证命中ISE。在此阶段发现的第一个症状表示实时日志中终端和ISE之间的状态不匹配。或者,Radius身份验证报告终端上次成功身份验证显示Pending状态状态。
典型的ISE管理员体验:

此问题通常表现在两个有问题的场景中,并且每个场景都有多个根本原因。场景:
AnyConnect中的ISE终端安全评估模块具有触发发现进程的有限数量的事件。在身份验证或重新身份验证期间,可能未检测到这些事件。
为了更好地了解问题,请调查所需的ISE会话管理逻辑和AnyConnect发现流程。
在ISE部署中,有两个人员负责会话管理流程:PSN和监控节点(MNT)。 要正确排除故障并确定问题,必须了解两个角色上的会话管理理论。

如本图所述,MNT节点根据来自PSN的已通过的身份验证系统日志消息创建季节。会话状态稍后可由系统日志更新,以便记帐。
MNT上的会话删除在以下三种情况下发生:
1.没有记账开始的会话在创建后约60分钟删除。每5分钟执行一个cron作业以检查会话状态和清除状态。
2.在同一cron作业处理记账停止后约15分钟内终止的会话被删除。
3.每次执行时相同的cron会删除超过5天(120小时)处于“已启动”状态的会话。“已启动”状态表示MNT节点已处理身份验证和记帐以启动Syslog会话。
注意:这些是正常的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的所有活动会话。会话缓存始终位于节点本地。在ISE中没有可以执行从一个节点到另一个节点的完整会话状态复制的机制。
对于每个活动会话ID,PSN存储身份验证/授权阶段收集的所有属性(例如,内部/外部用户组、网络接入设备(NAD)属性、证书属性等)。 PSN使用这些属性来选择不同的策略类型,例如身份验证、授权、客户端调配和状态。
重新启动节点(或节点上的服务)后,会话缓存将被完全删除。

当前会话处理逻辑在两个场景中在会话缓存中创建一个新条目。现有会话的后续详细信息可以通过来自NAD的记帐消息进行更新。
在ISE部署中,未执行实际身份验证的PSN已处理现有会话的记帐停止:
过时的会话示例:

之后,ABC在PSN1上陷入陈旧状态,因为此PSN上未处理记帐停止消息以将其删除。如果部署未遇到大量身份验证尝试,则会删除会话。
在以下情况下,过时的会话显示在PSN会话缓存中:
负载均衡器(LB)环境中过时的会话示例:

幻像会话是会计临时更新到达PSN且未对该会话执行身份验证的场景。在这种情况下,将在PSN会话缓存中创建一个新条目。如果PSN没有收到此会话的记帐停止消息,则不会删除该条目,除非PSN达到活动会话的限制。
幻像会话示例:

在以下情况下,虚拟会话显示在PSN会话缓存中:
下一个屏幕截图是幻像会话示例,其中指向PSN1的网络路径上出现临时问题:

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

如果PSN1稍后变为可访问(14),则转发所有后续的记帐消息(15,16),这会在PSN2会话缓存中保留会话ABC一段未定义的时间。
要了解陈旧和虚拟会话如何中断安全评估,您可以查看AnyConnect ISE安全评估模块发现流程:

第1阶段发现:
在此阶段,ISE终端安全评估模块执行四个同时探测以定位对终端进行身份验证的PSN。
首先,图中的三个探测是基于重定向的(默认GW IP、发现主机IP(如果已定义)和enroll.cisco.com IP);当重定向的URL取自NAD本身时,这些探测功能始终将代理指向正确的PSN。
探测4将发送到ConnectionData.xml文件中显示的所有主服务器。此文件在第一次成功的安全评估尝试后创建。如果客户端在PSN之间迁移,则可以稍后更新文件内容。
在Windows系统上,文件位置为C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\ISE Posture\。
由于所有阶段1探测同时执行,因此仅当所有其他三个探测都失败或ISE终端安全评估模块在5秒内无法与重定向URL中返回的PSN建立正确通信时,才使用探测4的结果。
当probe four位于PSN上时,它包含在终端上发现的活动IP和MAC地址列表。PSN使用此数据在本地缓存中查找此终端的会话。如果PSN的终端存在陈旧或幻像会话,则可能导致客户端稍后显示错误的终端安全评估状态。
当代理收到探测四的多个应答时(ConnectionData.xml可以包含多个主PSN),始终使用最快的应答。
第2阶段发现:
所有第2阶段发现探测都是无重定向的,这意味着每个探测都会触发目标PSN上的会话查找。如果PSN无法在本地会话缓存中找到会话,则必须执行MNT查找(仅基于MAC地址)以查找会话所有者并将所有者名称返回给代理。
由于所有探测都会触发会话查找,第2阶段发现可能会受到因陈旧或幻像会话导致的问题严重影响。
如果PSN移至第2阶段,会话缓存中存在的发现探测将为同一终端创建一个陈旧或幻像条目。这会导致向最终用户返回错误的终端安全评估状态。
此示例显示当PSN保持陈旧会话或幻像会话时状态如何显示:

4.对于虚拟会话场景,ISE终端安全评估模块继续初始终端安全评估请求。此请求包含有关在终端上检测到的所有安全和补丁管理产品的信息。
5. PSN使用来自请求和会话属性的信息来匹配正确的终端安全评估策略。此时,幻像会话缺少属性,并且没有要匹配的策略。在这种情况下,PSN会应答其合规的终端。如果安全评估策略不匹配,这是默认ISE行为。
6. PSN将所选安全评估策略返回给代理。
7.代理会将每个策略/需求的状态返回为“通过”或“失败”。
8.报告评估在ISE上进行,会话状态更改为Compliant。
ISE终端安全评估模块用于监控终端上有限数量的事件以触发发现进程。
触发发现的事件:
在以下情况下,ISE终端安全评估模块无法检测新的身份验证或重新身份验证尝试:
下图描绘了由原始PSN中断导致的不同PSN上的重新身份验证示例。具有负载均衡器的场景看起来类似。在负载均衡器的情况下,由于粘性计时器过期,重新身份验证被定向到不同的PSN。

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

这可以在两种最常见的情形下发生:
确定AnyConnect在重定向状态时是否显示合规性是由过期/幻像会话引起的。当终端处于有问题的状态时,您必须获取对终端的访问权限。
调查系统扫描详细信息
1.单击AnyConnect UI中的齿轮图标。

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

接下来,请注意两个重要因素:

此演示显示了问题识别所需步骤的记录:
上一个示例将陈旧或幻像会话问题与未启动的发现进程问题区分开来。同时,您必须确定触发问题的实际会话,了解它如何变成陈旧或幻像会话问题。虽然在某些情况下无法避免陈旧和幻像会话,但必须确保实施最佳实践,以防止在环境中创建陈旧/幻像会话。
分析从重现问题的终端获取的DART捆绑包。

4.在第一个向导屏幕上,单击下一步。
5.在下一个向导屏幕上,单击Clear All Logs。
6.重现问题后,可以从此处收集DART;单击下一步。
收集DART捆绑包后,将其取消存档,并重点关注Cisco AnyConnect ISE终端安全评估模块文件夹中的AnyConnect_ISEPosture.txt文件。此文件包含所有发现相关事件。

1.开始故障排除并确定发现重启的所有时刻。要搜索的关键字是Restarting Discovery或HTTP Discovery。导航到在问题时刻发生发现重启的行:

2.在发现重新启动后的几行中,有一行包含Probing no MNT stage targets(这是第1阶段发现启动的指示符):

3.建议以不同颜色突出显示从ConnectionData.xml(身份验证状态目标)获取的所有具有相同颜色且先前已连接PSN的基于重定向的探测器。通常,PSN FQDN是相似的,并且可能难以发现差异。
4.阅读日志文件以查看每个探测的结果(这是失败探测的显示示例):

5.在发现重新启动第1阶段或第2阶段后,您会在文件中的某个位置看到一个来自一个或多个PSN的成功回复:

5.后面几行中,有一行带有关键字MSG_NS_SWISS_NEW_SESSION。此行包含实际会话ID,PSN在会话查找后选择了它。使用此会话ID进一步调查ISE,以确定会话如何变成陈旧/幻像:

1.在client-webapp组件启用到DEBUG的guest.log中,PSN使用过期/幻像会话进行回复,可以看到该会话。
2. 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
3.请求包含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
4.在包含关键字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
知道过期/幻像会话的ID后,您可以调查Radius Accounting报告,以便更好地了解导致会话过期/幻像的原因:
2.以下是显示如何在ciscolive-ise2上保留过时会话的报告的示例:

同样的逻辑也适用于上一个问题,但是,唯一的区别是,您必须将焦点放在“Latest Scan Start Time(最新扫描开始时间)”上。对于此类问题,上次扫描的时间戳为过去。
通常,当最终用户发现问题时,会进行扫描。在ISE Radius Live日志中,发现有问题的终端最近的身份验证尝试。
此演示显示了问题识别所需步骤的记录:
此方法类似于高级故障排除陈旧/虚拟会话部分。主要的故障排除要素是DART捆绑调查。
在DART捆绑包中,您可以搜索发现重新启动(如前一个问题中所示),并确认报告问题时没有发现重新启动。
在ISE端,重点查看Radius Live Logs/ Radius身份验证报告,以确认PSN之间存在故障转移或NAD生成了新会话ID。
过去,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实施)。
作为解决方案,实施多个状态挂起授权策略(每个PSN一个)。 每个策略必须包含进行身份验证的PSN名称作为条件之一。在授权配置文件中,必须阻止所有PSN(已进行身份验证的节点除外)。
为两个节点创建授权策略:

下图说明了该方法的工作原理:

负载均衡器最佳实践
确保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上的一个功能,将终端标记为compliant一段时间(1-365天)。 终端安全评估租用值是终端属性,这意味着它存储在ISE数据库上。包括终端安全评估租赁的所有终端属性在ISE部署中的所有节点上复制。
当PSN收到终端的新会话时,可以使用状态租用立即将会话标记为兼容。为了做出此决策,PSN使用3个值,这些值为:

2. PostureExpiry属性的值是包含Epoch时间戳的终端属性。PostureExpiry值最初在ISE管理员启用终端安全评估租约后对终端首次成功进行终端安全评估尝试时填充。稍后,此值会在租期到期后进行的下一次成功安全评估尝试时更新。当打开其中一个状态终端时,您可以在情景可视性>终端中看到PostureExpiry:

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

3.当终端安全评估租用的身份验证到达PSN时,它使用PostureExpiry和系统日期来检索上次成功的状态检查所经过的天数。如果结果值在设置中定义的安全评估租用间隔内,会话将收到Compliant状态。如果结果值大于租用值,则会话会收到Unknown状态。这会触发再次执行安全评估并且可保存新的PostureExpiry值。
下图描述了发生故障切换时的过程:

始终使用RADIUS-Request从ISE推送重新身份验证计时器,在Maintain Connectivity During Reauthentication中选择。此设置确保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会话目录缓存找到会话的所有者。
此功能包含以下元素:
注意:通用RabbitMQ术语和体系结构不在本文档范围之内。
下一个示例解释了COA流如何与RSD缓存配合使用:

要在ISE上排除通过LDD的通信故障,请将Light-Session-Directory组件启用到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]
状态状态共享解决了以下问题:根本原因是过时/幻像会话或在未触发发现重启的其他PSN上重新进行身份验证。当会话变为合规时,此信息会进入会话RSD,以后可由部署中的每个PSN使用。
所述特征还不能解决其它一些角的情况。例如,当NAD在同一PSN上使用不同的会话ID运行重新身份验证时。可以采用本文档中描述的最佳实践处理这些场景。此图显示了用于测试状态共享状态的拓扑:

要创建陈旧会话,最初必须在skuchere-ise26-1上执行身份验证。然后,必须重新配置NAD以将记帐发送到skuchere-ise26-3。在将一个记帐消息转发到错误的PSN后,必须重新配置NAD(再次)以将记帐发送回skuchere-ise26-1。
此图显示一个记帐报告,证明在skuchere-ise26-3上存在幻像会话:

终端连接到网络,但重定向不再有效。在skuchere-ise26-3的PSN的guest.log中,您可以在启用了client-webapp组件的DEBUG中看到以下日志消息:
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不同,则它假定会话(显示在会话缓存中)已过时。
要重现此场景,可在分配给合规状态终端的授权配置文件中启用一个短重新身份验证计时器。之后,重新配置NAD以将身份验证和记帐发送到另一个PSN(skuchere-ise26-3)。重新身份验证计时器到期后,同一会话将在不同PSN上取消身份验证。
下图显示身份验证报告,其中显示从skuchere-ise26-1到skuchere-ise26-3的同一会话的故障切换:

在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
通过在状态选择过程中添加额外逻辑即可解决原始问题。此图显示了所更改的内容(更改以红色突出显示):

| 版本 | 发布日期 | 备注 |
|---|---|---|
3.0 |
25-Aug-2026
|
已更新标题、拼写、语法、插入水平线到各个部分的可读性、固定URL、CCW警报和备用文本。 |
2.0 |
31-May-2023
|
重新认证 |
1.0 |
22-Apr-2020
|
初始版本 |