Ce document décrit le problème courant des services de posture Identity Service Engine (ISE), tel que « AnyConnect ISE posture module shows compliance... »
Ce document décrit le problème courant des services de posture ISE (Identity Service Engine) : "Le module de posture ISE AnyConnect affiche conforme alors que l'état de session sur ISE est en attente."
Bien que les symptômes soient toujours les mêmes, il existe plusieurs causes profondes à ce problème. Souvent, le dépannage d'un problème comme celui-ci prend énormément de temps, ce qui a de graves conséquences.
Ce document explique :
Pour une meilleure explication des concepts décrits plus loin, référez-vous à Comparaison de style de posture ISE pour Pre et Post 2.2
Ce problème se manifeste normalement en l'absence d'accès réseau ou de redirection constante vers le portail de mise à disposition du client ISE dans le navigateur, tandis que, dans le même temps, le module de posture ISE AnyConnect affiche l'état de posture comme Conforme.
Expérience utilisateur type :

Lors du triage initial de ce problème, un administrateur ISE commence une enquête sur les journaux Radius Live pour s'assurer qu'une authentification atteint ISE. Le premier symptôme découvert à cette étape indique une non-correspondance dans un état de posture entre le point d'extrémité et ISE dans les journaux actifs. Ou, l'authentification Radius signale la dernière authentification réussie pour le point de terminaison affiche l'état de la position en attente.
Expérience d'administration ISE type :

Ce problème se manifeste normalement dans deux scénarios problématiques et chacun d'entre eux a plusieurs causes profondes. Les scénarios :
Le module de posture ISE d'AnyConnect comporte un nombre limité d'événements qui déclenchent le processus de détection. Il est possible qu'aucun de ces événements n'ait été détecté lors de l'authentification ou de la nouvelle authentification.
Pour mieux comprendre le problème, étudiez la logique de gestion des sessions ISE et le processus de détection AnyConnect requis.
Dans le déploiement ISE, deux personnes sont responsables du processus de gestion des sessions : PSN et noeud de surveillance (MNT). Pour dépanner et identifier correctement le problème, il est essentiel de comprendre la théorie de la gestion des sessions sur les deux personnes.

Comme expliqué dans cette image, le noeud MNT crée des saisons en fonction des messages Syslog d'authentification passés qui proviennent des PSN. L'état de la session peut être mis à jour ultérieurement par le Syslog pour la comptabilisation.
La suppression de session sur MNT se produit dans trois scénarios :
1. Les sessions sans comptabilité commencent à être supprimées environ 60 minutes après leur création. Une tâche cron est exécutée toutes les 5 minutes pour vérifier l'état de la session et la nettoyer.
2. La session terminée a été supprimée environ 15 minutes après que l'arrêt de la comptabilité a été traité par la même tâche cron.
3. Le même cron à chaque exécution supprime les sessions à l'état « Démarré » pendant plus de 5 jours (120 heures). Un état démarré signifie que le noeud MNT a traité l'authentification et la comptabilité pour démarrer la session Syslog.
Remarque : Il s'agit des minuteurs de nettoyage MnT normaux, et non des délais de suppression d'horloge murale garantis. La suppression peut être retardée si :
Exemples de messages Syslog de PSN :
Les messages sont consignés dans le fichier prt-server.log lorsque le composant runtime-aaa est activé dans DEBUG. Les parties en gras peuvent être utilisées pour construire des expressions régulières de recherche.
Authentification réussie :
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
Début de la comptabilisation :
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
Mise à jour comptable provisoire :
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
Arrêt de la comptabilisation :
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
Le cache de session PSN est une base de données en mémoire qui stocke toutes les sessions actives d'un PSN spécifique. Le cache de session est toujours local au noeud. ISE ne dispose d'aucun mécanisme permettant d'effectuer la réplication des états de session FULL d'un noeud à un autre.
Pour chaque ID de session active, PSN stocke tous les attributs collectés pendant la phase d'authentification/autorisation (par exemple, les groupes d'utilisateurs internes/externes, les attributs NAD (Network Access Device), les attributs de certificat, etc.). Ces attributs sont utilisés par PSN pour sélectionner différents types de stratégie tels que l'authentification, l'autorisation, l'approvisionnement client et la position.
Le cache de session est complètement supprimé lorsque le noeud (ou les services sur le noeud) sont redémarrés.

La logique de traitement de session actuelle crée une nouvelle entrée dans le cache de session dans deux scénarios. Les détails ultérieurs des sessions existantes peuvent être mis à jour à partir des messages de comptabilité, qui proviennent des NAD.
Dans le déploiement ISE, l'arrêt de la gestion des comptes pour une session existante a été traité par le PSN qui n'a pas effectué l'authentification réelle :
Exemple de session obsolète :

Par la suite, ABC est bloqué dans un état d'obsolescence sur PSN1, car aucun message d'arrêt de comptabilité n'est traité sur ce PSN pour le supprimer. La session est supprimée si le déploiement ne fait pas l'objet d'un nombre élevé de tentatives d'authentification.
La session obsolète apparaît dans le cache de session PSN dans les scénarios suivants :
Exemple de session obsolète dans l'environnement d'équilibrage de charge :

La session fantôme est un scénario dans lequel la mise à jour provisoire de comptabilité arrive sur le PSN et n'a pas effectué d'authentification pour cette session. Dans ce scénario, une nouvelle entrée est créée dans le cache de session PSN. Si PSN ne reçoit pas de message d'arrêt de comptabilisation pour cette session, l'entrée n'est pas supprimée sauf si PSN atteint la limite des sessions actives.
Exemple de session fantôme :

La session fantôme apparaît dans le cache de session PSN dans les scénarios suivants :
La capture d'écran suivante est un exemple de session fantôme où des problèmes temporaires sur le chemin du réseau vers PSN1 :

Ceci décrit un scénario de la session fantôme telle que créée pour la connexion VPN à vie longue :

Si PSN1 devient accessible plus tard (14), tous les messages de comptabilité suivants sont transférés (15,16), ce qui laisse la session ABC dans le cache de session PSN2 pendant une durée indéfinie.
Pour comprendre comment les sessions obsolètes et fantômes rompent la posture, vous pouvez consulter le processus de découverte du module de posture ISE AnyConnect :

Étape 1 Découverte :
Au cours de cette étape, le module de posture ISE exécute quatre sondes simultanées pour localiser le PSN qui authentifie le point d'extrémité.
Premièrement, trois sondes sur la figure sont basées sur la redirection (Default GW IP, Discovery host IP (si défini) et enroll.cisco.com IP) ; ces sondes pointent toujours l'agent vers le PSN de droite, car l'URL redirigée est extraite du NAD lui-même.
La sonde 4 est envoyée à tous les serveurs principaux présentés dans le fichier ConnectionData.xml. Ce fichier est créé après la première tentative de positionnement réussie. Le contenu du fichier peut être mis à jour ultérieurement si le client migre entre PSN.
Sur les systèmes Windows, l'emplacement du fichier est C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\ISE Posture\.
Puisque toutes les sondes de l'étape 1 sont exécutées simultanément, les résultats de la sonde 4 sont utilisés uniquement si les trois autres sondes échouent ou si le module de posture ISE ne peut pas établir une communication correcte avec le PSN renvoyé dans l'URL de redirection dans les 5 secondes.
Lorsque la sonde 4 atterrit sur le PSN, elle contient une liste d'adresses IP et MAC actives découvertes sur le point d'extrémité. PSN utilise ces données pour rechercher une session pour ce point de terminaison dans le cache local. Si PSN dispose d'une session obsolète ou fantôme pour un terminal, cela peut entraîner l'affichage d'un état de position incorrect plus tard du côté client.
Lorsqu'un agent reçoit plusieurs réponses pour la quatrième sonde (ConnectionData.xml peut contenir plusieurs PSN principaux), la réponse la plus rapide est toujours utilisée.
Étape 2 Découverte :
Toutes les sondes de détection de l'étape 2 sont sans redirection, ce qui signifie que chaque sonde déclenche une recherche de session sur le PSN de destination. Si le PSN ne peut pas localiser la session dans le cache de session local, il doit effectuer une recherche MNT (basée uniquement sur l'adresse MAC) pour trouver un propriétaire de session et renvoyer le nom du propriétaire à l'agent.
Comme toutes les sondes déclenchent la recherche de session, la détection de l'étape 2 peut être considérablement affectée par des problèmes résultant de sessions obsolètes ou fantômes.
Si PSN passe à l'étape 2, la sonde de détection qui existe dans le cache de session crée une entrée obsolète ou fantôme pour le même terminal. Il en résulte un état de posture incorrect renvoyé à l'utilisateur final.
Cet exemple montre comment la position apparaît lorsque PSN conserve une session obsolète ou une session fantôme :

4. Pour le scénario de session fantôme, le module de posture ISE continue avec la demande de posture initiale. Cette demande contient des informations sur tous les produits de sécurité et de gestion des correctifs détectés sur le terminal.
5. PSN utilise les informations des attributs de requête et de session pour correspondre à la stratégie de position appropriée. La session fantôme ne dispose pas d'attributs à ce stade et il n'existe aucune stratégie à mettre en correspondance. Dans ce cas, PSN répond au terminal qu'il est conforme. Il s'agit du comportement ISE par défaut si la stratégie de position ne correspond pas.
6. PSN renvoie les politiques de posture sélectionnées à l'agent.
7. L'agent renvoie les statuts « réussi » ou « échec » pour chaque règle/condition.
8. L'évaluation du rapport a lieu sur ISE et l'état de la session passe à Conforme.
Le module de posture ISE est conçu pour surveiller un nombre limité d'événements sur le terminal afin de déclencher un processus de détection.
Événements qui déclenchent la découverte :
Le module de posture ISE ne peut pas détecter une nouvelle tentative d'authentification ou de réauthentification dans les scénarios suivants :
Ce schéma illustre un exemple de réauthentification sur un PSN différent causée par la panne du PSN d'origine. Un scénario avec un équilibreur de charge ressemble à cela. Dans le cas d'un équilibreur de charge, la réauthentification est dirigée vers le PSN différent à la suite de l'expiration d'un temporisateur de collage.

L'état de la position initiale est attribué par PSN à la session :

Cela peut se produire dans les deux scénarios les plus courants :
Identifier si AnyConnect affiche la conformité lorsque l'état de redirection est causé par la session obsolète/fantôme. Vous devez obtenir l'accès au point de terminaison lorsque celui-ci est à l'état problématique.
Examiner les détails de l'analyse système
1. Cliquez sur l'icône d'engrenage dans l'interface utilisateur AnyConnect.

2. Dans la nouvelle fenêtre, accédez à Analyse système > Statistiques.

Ensuite, prêtez attention à deux éléments importants :

La démonstration montre l'enregistrement des étapes requises pour l'identification du problème :
L'exemple précédent distingue le problème d'une session obsolète ou fantôme du problème du processus de détection qui n'a pas démarré. En même temps, vous devez identifier la session qui a déclenché le problème pour comprendre comment il devient un problème de session obsolète ou fantôme. Bien que dans certains scénarios, les sessions obsolètes et fantômes ne puissent pas être évitées, vous devez vous assurer que les meilleures pratiques sont mises en oeuvre, afin d'empêcher la création de sessions obsolètes/fantômes dans un environnement.
Analysez un bundle DART pris à partir du terminal qui reproduit le problème.

4. Dans le premier écran de l'Assistant, cliquez sur Suivant.
5. Sur l'écran suivant de l'assistant, cliquez sur Effacer tous les journaux.
6. Une fois le problème reproduit, DART peut être collecté à partir d'ici ; cliquez sur Next.
Une fois l'ensemble DART collecté, désarchivez-le et concentrez-vous sur le fichier AnyConnect_ISEPosture.txt situé dans le dossier Cisco AnyConnect ISE Posture Module. Ce fichier contient tous les événements liés à la détection.

1. Commencez le dépannage et identifiez tous les moments de redémarrage de la détection. Les mots clés à rechercher sont Redémarrage de la détection ou Détection HTTP. Accédez à la ligne avec le redémarrage de la détection qui s'est produit au moment problématique :

2. Plusieurs lignes après le redémarrage de la détection, il y a une ligne qui contient, Probing no MNT stage cibles (il s'agit d'un indicateur de début de la détection de l'étape 1) :

3. Il est recommandé de mettre en surbrillance toutes les sondes basées sur la redirection avec la même couleur et les PSN précédemment connectés provenant de ConnectionData.xml (cibles d'état d'authentification) dans une couleur différente. Normalement, les FQDN PSN sont similaires et peuvent être difficiles à détecter.
4. Lisez les fichiers journaux pour voir les résultats de chaque sonde (il s'agit d'un exemple de l'aspect d'une sonde défaillante) :

5. Quelque part dans le fichier après le redémarrage de la détection pour l'étape 1 ou l'étape 2, vous voyez une réponse positive d'un ou plusieurs PSN :

5. Plusieurs lignes plus loin, il y a une ligne avec le mot clé MSG_NS_SWISS_NEW_SESSION. Cette ligne contient un ID de session réel qui a été sélectionné par PSN à la suite de la recherche de session. Utilisez cet ID de session pour approfondir les recherches sur ISE et déterminer comment la session est devenue obsolète/fantôme :

1. Dans le journal guest.log avec le composant client-webapp activé dans DEBUG, le PSN répond avec la session Stale/Phantom, qui peut être vu.
2. PSN reçoit une demande de l'agent de posture ISE. Il s’agit d’une demande d’AnyConnect en raison de la valeur 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. La requête contient des tableaux d’adresses IP et d’adresses MAC. Dans cet exemple, chaque tableau ne contient qu'une seule valeur. Le journal indique que l'ID de session de la demande est null, ce qui indique qu'il s'agit d'une demande provenant de l'analyseur non basé sur la redirection. Vous pourrez voir plus tard comment les valeurs des tableaux sont utilisées pour localiser un ID de session :
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. Après la ligne contenant les mots clés Sent http response, vous pouvez afficher le contenu de la réponse :
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
Une fois que l'ID de la session obsolète/fantôme est connu, vous pouvez examiner le rapport Radius Accounting pour mieux comprendre ce qui a provoqué l'obsolescence/fantôme de la session :
2. Voici un exemple de rapport qui montre comment la session obsolète a été laissée sur ciscolive-ise2 :

La même logique s'applique au problème précédent, mais la seule différence est que vous devez vous concentrer sur l'heure de début de la dernière analyse. Pour ce type de problème, l'horodatage de la dernière analyse est dans le passé.
Normalement, lorsqu'un utilisateur final découvre un problème, une analyse est effectuée. Dans les journaux ISE Radius Live, les tentatives d'authentification récentes du point d'extrémité problématique sont visibles.
La démonstration montre l'enregistrement des étapes nécessaires à l'identification du problème :
Cette approche est similaire à la section Dépannage avancé des sessions obsolètes/fantômes. L'élément de dépannage principal est l'investigation de l'ensemble DART.
Dans le bundle DART, vous pouvez rechercher des redémarrages de détection (comme indiqué pour le problème précédent) et confirmer qu'il n'y a pas eu de redémarrages de détection au moment où le problème a été signalé.
Côté ISE, concentrez-vous sur le rapport d'authentification Radius Live Logs/Radius pour confirmer qu'il y a eu un basculement entre PSN ou qu'un nouvel ID de session a été généré par NAD.
Auparavant, aucune fonctionnalité d'ISE ne permettait de résoudre les problèmes décrits dans ce document. Par conséquent, le seul moyen était de s'appuyer sur l'ensemble des meilleures pratiques mises en oeuvre sur le réseau et côté ISE pour minimiser les risques.
Toujours implémenter une posture basée sur la redirection si possible
Un contre-argument courant à cette recommandation est qu'une mauvaise expérience utilisateur apparaît dans le système d'exploitation ou les navigateurs sont vus. Cela indique une redirection tandis que le module de posture AnyConnect ISE en arrière-plan effectue un processus d'évaluation.
Pour résoudre ce problème, il est possible de rediriger UNIQUEMENT les sondes de détection de module de posture ISE et d'autoriser sélectivement tout autre trafic. Cet exemple montre une liste de contrôle d’accès de redirection conçue pour rediriger uniquement les requêtes HTTP vers l’hôte de découverte (10.1.1.1 dans cet exemple) et 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
Pour maintenir un niveau de sécurité acceptable, une liste de contrôle d'accès de redirection peut être combinée à une liste de contrôle d'accès attribuée par ISE.
L'état En attente autorise uniquement les connexions à PSN lorsque le point de terminaison a été authentifié
Cette approche est utile pour les environnements où la redirection d'URL n'est pas prise en charge (mises en oeuvre avec les NAD tiers).
En guise de solution, implémentez plusieurs stratégies d'autorisation Posture Pending (une par PSN). Chaque politique doit contenir, parmi les conditions, le nom du PSN où l'authentification a eu lieu. Dans le profil d'autorisation, tous les PSN doivent être bloqués, à l'exception du noeud où l'authentification a eu lieu.
Créez des stratégies d’autorisation pour deux noeuds :

La figure suivante explique le fonctionnement de cette approche :

Meilleures pratiques des équilibreurs de charge
Assurez-vous que l'intervalle de mise à jour intermédiaire de la gestion des comptes est supérieur ou égal à vpn-session-timeout. Cela minimise le battement de compte entre les PSN pendant de longues sessions VPN. Cet exemple montre l'intervalle de mise à jour de la comptabilité intermédiaire configuré pour 20 heures. Cela n'empêche pas la mise à jour intermédiaire initiale qui transporte l'adresse IP attribuée au point d'extrémité.
aaa-server ISE protocol radius
interim-accounting-update periodic 20
group-policy SSL-VPN attributes
vpn-idle-timeout 1200
vpn-session-timeout 1200
Activer le bail de position
Il s'agit d'une fonctionnalité d'ISE qui marque le terminal comme conforme pour une période définie (1 à 365 jours). La valeur de bail de posture est un attribut de point d'extrémité qui signifie qu'il est stocké sur la base de données ISE. Tous les attributs de point de terminaison qui incluent le bail de position sont répliqués sur tous les noeuds du déploiement ISE.
Lorsque PSN reçoit une nouvelle session pour le point d'extrémité, le bail de position peut être utilisé pour marquer la session comme conforme immédiatement. Pour prendre cette décision, PSN utilise 3 valeurs, à savoir :

2. La valeur de l'attribut PostureExpiry est un attribut de point de terminaison qui contient un horodatage Epoch. La valeur PostureExpiry est initialement renseignée lors de la première tentative de posture réussie pour le point de terminaison après l'activation du bail de posture par l'administrateur ISE. Plus tard, cette valeur est mise à jour lors de la prochaine tentative de posture réussie qui se produit après l'expiration du bail. Vous pouvez voir un PostureExpiry dans Context Visibility > Endpoints pendant que l'un des terminaux affichés est ouvert :

3. Cette valeur peut être convertie en l'horodatage lisible par l'utilisateur, par exemple, ici - https://www.epochconverter.com/

3. Lorsque l'authentification d'un point de terminaison avec posture lease atteint PSN, elle utilise PostureExpiry et la date système pour récupérer le nombre de jours écoulés depuis la dernière vérification de posture réussie. Si la valeur de résultat est comprise dans un intervalle de bail de position défini dans les paramètres, la session reçoit un état Conforme. Si la valeur du résultat est supérieure à la valeur du bail, la session reçoit un état Inconnu. Cela déclenche la posture à exécuter à nouveau et la nouvelle valeur PostureExpiry peut être enregistrée.
Ce schéma décrit le processus de basculement :

Poussez toujours le minuteur de réauthentification à partir d'ISE avec la requête RADIUS, qui est sélectionnée dans Maintenir la connectivité pendant la réauthentification. Ce paramètre garantit que NAD conserve le même ID de session lors de la réauthentification.

Le même ensemble de meilleures pratiques (expliqué dans la section session obsolète/fantôme) peut être mis en oeuvre.
Différents sous-réseaux peuvent être utilisés pour les états En attente et Conforme
Lorsque les conceptions de réseau permettent d'utiliser différents sous-réseaux tels que les états En attente et Conforme, cette approche garantit que chaque modification de l'état de la position entraîne une modification de la passerelle par défaut.
Évaluation de la position utilisée dans le même intervalle qu'un minuteur de réauthentification
L'évaluation de la position peut être activée avec un intervalle égal au minuteur de réauthentification. Lorsque le PSN d'origine n'est pas disponible, l'échec PRA redémarre le processus de détection.
Dans le cadre d'une amélioration implémentée (dans l'ID de bogue Cisco CSCvi35647) du patch 6 pour ISE 2.6, il existe une nouvelle fonctionnalité qui implémente le partage de l'état de la position de session sur tous les noeuds du déploiement ISE.
Cette amélioration est intégrée dans les versions futures des correctifs 2 et 3.0 d'ISE 2.7.
Cette nouvelle fonctionnalité est basée sur le mécanisme LSD (Light Session Directory) introduit dans ISE 2.6. Dans les versions plus récentes, cette fonctionnalité a été renommée LDD (Light Data Distribution) Radius Session Directory. Light Data Distribution est activé par défaut et permet le partage d'un contexte de session limité entre les noeuds ISE. Il n'y a pas de réplication de contexte de session complète entre les PSN, seulement une quantité limitée d'attributs partagés pour chaque session.
Light Session Directory supprime la nécessité d'exécuter des appels d'API coûteux en ressources vers MNT lorsque l'un des noeuds du déploiement doit déterminer le propriétaire actuel de la session. La recherche du propriétaire est requise lorsque le flux de certificat d'authenticité démarre. Avec LDD, chaque PSN peut trouver un propriétaire de la session à partir du cache local du répertoire de session Radius.
Cette fonctionnalité contient les éléments suivants :
Remarque : La terminologie et l'architecture de General RabbitMQ ne sont pas abordées dans ce document.
L'exemple suivant explique comment le flux COA fonctionne avec le cache RSD :

Pour dépanner la communication sur LDD sur l'ISE, activez le composant Light-Session-Directory dans DEBUG :

Voici un exemple de message de débogage provenant du fichier lsd.log pour une création et une publication de session sur le PSN d'origine :
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
Sur tous les autres noeuds ISE, vous voyez comment une session a été utilisée :
[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]
Le partage d'état de posture résout les problèmes lorsque la cause principale est une session obsolète/fantôme ou une réauthentification sur un PSN différent qui n'a pas déclenché le redémarrage de la détection. Dès que la session devient conforme, ces informations sont placées dans la session RSD et peuvent ensuite être utilisées par chaque PSN dans le déploiement.
Il existe d'autres cas d'angle que la fonction décrite ne peut pas résoudre. Par exemple, lorsque NAD exécute la réauthentification sur le même PSN mais avec un ID de session différent. Ces scénarios peuvent être traités à l'aide des meilleures pratiques décrites dans ce document. Cette figure illustre la topologie utilisée pour tester le partage de l'état de position :

Pour créer une session obsolète, l'authentification doit d'abord être effectuée sur skuchere-ise26-1. Ensuite, NAD doit être reconfiguré pour envoyer la comptabilisation à skuchere-ise26-3. Après qu'un message de comptabilisation a été transféré au PSN incorrect, NAD doit être reconfiguré (à nouveau) pour renvoyer la comptabilisation à skuchere-ise26-1.
Cette image montre un rapport de comptabilité qui prouve la présence de la session fantôme sur skuchere-ise26-3 :

Le point d'extrémité se connecte au réseau, mais la redirection ne fonctionne plus. Dans le journal guest.log de PSN pour skuchere-ise26-3, vous pouvez voir ces messages de journal avec le composant client-webapp activé dans 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
Lorsque PSN détecte qu'il détient une session obsolète/fantôme pour le terminal, il ne répond pas au module de posture ISE et cela vous permet d'obtenir des informations de PSN où la dernière authentification a eu lieu.
Comme solution au problème de session obsolète/fantôme au moment de la recherche de session, PSN vérifie la présence de toute nouvelle session pour le terminal dans le RSD. Si RSD contient un ID de session différent de celui de PSN dans le cache de session local, il suppose que la session (présentée dans le cache de session) est périmée.
Pour reproduire ce scénario, un temporisateur de réauthentification courte est activé dans le profil d'autorisation affecté au point d'extrémité d'état conforme. Par la suite, NAD est reconfiguré pour envoyer l'authentification et la gestion des comptes à un autre PSN (skuchere-ise26-3). À l'expiration du minuteur de réauthentification, la même session n'est pas authentifiée sur le PSN différent.
La figure suivante illustre un rapport d'authentification qui montre le basculement pour la même session de skuchere-ise26-1 à skuchere-ise26-3 :

La session a l'état de conformité sur le nouveau PSN après le basculement dans ise-psc.log avec les composants epm-pip et nsf-session activés dans DEBUG :
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
Le problème initial est résolu par l'ajout d'une logique supplémentaire dans le processus de sélection de l'état de posture. Cette figure illustre ce qui a été modifié (les modifications sont surlignées en rouge) :

| Révision | Date de publication | Commentaires |
|---|---|---|
3.0 |
25-Aug-2026
|
Mise à jour du titre, de l'orthographe, de la grammaire, des lignes horizontales insérées dans des sections distinctes pour plus de lisibilité, des URL fixes, des alertes CCW et du texte de remplacement. |
2.0 |
31-May-2023
|
Recertification |
1.0 |
22-Apr-2020
|
Première publication |