O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este documento descreve o problema comum de serviços de postura do Identity Service Engine (ISE): "O módulo de postura do ISE do AnyConnect mostra compatível..."
Este documento descreve o problema comum de serviços de postura do Identity Service Engine (ISE) - O módulo de postura do AnyConnect ISE mostra compatível enquanto o status da sessão no ISE está pendente.
Embora os sintomas sejam sempre os mesmos, há várias causas raiz para esse problema.
Frequentemente, a solução de problemas desse tipo consome muito tempo, o que causa um impacto sério.
Este documento explica:
Para obter uma melhor explicação dos conceitos descritos mais adiante, consulte:
Esse problema normalmente se manifesta na ausência de acesso à rede ou redirecionamento constante para o portal de provisão do cliente ISE no navegador enquanto, ao mesmo tempo, o módulo de postura do AnyConect ISE mostra o status de postura como Compatível.
Experiência de usuário final típica:
Normalmente, na triagem inicial desse problema, o administrador do ISE executa a investigação de registros do Radius Live para garantir que haja uma autenticação real que atinja o ISE.
O primeiro sintoma descoberto nesse estágio indica uma incompatibilidade em um status de postura entre o endpoint e o ISE, como nos registros em tempo real ou nos relatórios de autenticação Radius da última autenticação bem-sucedida para o endpoint mostra o status de postura Pending.
Experiência típica do administrador do ISE:
Observação: c. e d. nem sempre são apresentados nos registros em tempo real quando o problema descrito se manifesta. Um evento de sessão com um status de postura de Compatível é mais comum para cenários causados pelas sessões obsoletas ou fantasmas (descrito mais adiante neste documento).
Esse problema normalmente se manifesta em dois cenários problemáticos e cada um deles tem várias causas raiz. Os cenários:
Nesse caso, normalmente lidamos com uma sessão obsoleta ou fantasma no cache da sessão PSN.
O módulo de postura do ISE no AnyConnect tem um número limitado de eventos que acionam o processo de descoberta. É possível que, durante a autenticação ou a reautenticação, nenhum desses eventos tenha sido detectado.
Para entender melhor o problema, investigue a lógica de gerenciamento de sessão do ISE necessária e o processo de descoberta do AnyConnect.
Na implantação do ISE, há duas pessoas responsáveis pelo processo de gerenciamento de sessão: PSN e Nó de monitoramento (MNT).
Para solucionar e identificar esse problema corretamente, é essencial entender a teoria do gerenciamento de sessão em ambas as personas.
Como explicado nesta imagem, o nó MNT cria estações com base nas mensagens de Syslog de autenticação aprovadas que vêm de PSNs.
O status da sessão pode ser atualizado posteriormente pelo Syslog para contabilização.
A remoção de sessão no MNT acontece em 3 cenários:
1. Sessões sem início de contabilização removidas aproximadamente 60 minutos após terem sido criadas: Há um trabalho cron executado a cada 5 minutos para verificar o status da sessão e limpá-la.
2. A sessão encerrada foi removida aproximadamente 15 minutos após a interrupção da contabilidade ter sido processada pelo mesmo trabalho cron.
3. O mesmo cron em cada execução também remove as sessões que estiveram no estado 'Iniciado' por mais de 5 dias (120 horas). Um estado iniciado significa que o nó MNT processou tanto a autenticação quanto a contabilidade para iniciar o Syslog para a sessão.
Exemplos de mensagens de Syslog do PSN:
Essas mensagens são registradas no prt-server.log quando o componente runtime-aaa é habilitado no DEBUG. As partes em negrito podem ser usadas para construir expressões regulares de pesquisa.
Autenticação aprovada:
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
Início da Contabilização:
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
Atualização Provisória de Contabilidade:
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
Interrupção da Contabilização:
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
O cache da sessão PSN é um banco de dados na memória que armazena todas as sessões ativas de PSN específicas. O cache da sessão é sempre local para o nó.
Não há nenhum mecanismo no ISE que possa executar a replicação do estado de sessão FULL de um nó para outro.
Para cada ID de sessão ativa, o PSN armazena todos os atributos que foram coletados durante a fase de autenticação/autorização (por exemplo, grupos de usuários internos/externos, atributos de dispositivo de acesso à rede (NAD), atributos de certificado e assim por diante). Esses atributos são usados pela PSN para selecionar diferentes tipos de política (como Autenticação, Autorização, Provisionamento de Cliente e Postura).
O cache da sessão é completamente removido quando o nó (ou serviços no nó) são reiniciados.
A lógica de processamento da sessão atual cria uma nova entrada no cache de sessão em dois cenários. Detalhes posteriores de sessões existentes podem ser atualizados a partir de mensagens de relatório que vêm de NADs.
Quando se trata de remoção de sessão, a PSN implementa esta lógica:
Na implantação do ISE, a interrupção da contabilização de uma sessão existente foi processada pelo PSN que não executou a autenticação real:
Exemplo da sessão obsoleta:
1. A autenticação bem-sucedida acontece no PSN para a sessão ABC.
2. A PSN cria uma entrada no cache da sessão.
3. Ocorre a avaliação de postura.
4. A sessão está marcada como Compatível.
5. A alteração de autorização (COA) (acionada pela alteração de status de postura) leva à reautenticação do ponto final para aplicar o próximo nível de acesso.
6. A parada contábil para a sessão ABC chega ao PSN2.
Depois disso, o ABC fica preso no estado obsoleto no PSN1 porque não há nenhuma mensagem de parada de contabilidade processada nesse PSN para removê-lo.
A sessão será removida por muito tempo se a implantação não tiver um número alto de tentativas de autenticação.
A sessão obsoleta aparece no cache da sessão PSN nestes cenários:
Exemplo da sessão obsoleta no ambiente do Balanceador de Carga (LB):
1. A autenticação inicial para a Sessão ABC é realizada pela PSN 1.
2. Esta autenticação inicia um temporizador de adesão no balanceador de carga.
3. A PSN 1 cria uma entrada para a sessão ABC no cache local.
4. Mensagem de syslog para autenticação passada transferida para o nó MNT.
5. A entrada para a sessão ABC é criada no diretório de sessão MNT com o estado Autenticado.
6. A mensagem de início contábil para a sessão ABC chega ao PSN 1.
7. A entrada de cache de sessão para a sessão ABC é atualizada com informações de Contabilidade-Início.
8. A mensagem de Syslog para Accounting-Start é transferida para o nó MNT.
9. O estado da sessão é atualizado para Iniciado.
10. O temporizador de adesão expira no balanceador de carga.
11. Accounting-Stop para a sessão ABC é encaminhado pelo balanceador de carga para a PSN 2.
12. A mensagem de syslog para Accounting-Stop é encaminhada pela PSN 2 à MNT.
13. A Sessão ABC está marcada como terminada no MNT.
A sessão fantasma é um cenário em que a atualização temporária de contabilidade chega ao PSN que não executou autenticação para essa sessão específica. Neste cenário, uma nova entrada é criada no cache da sessão PSN.
Se o PSN não receber uma mensagem de interrupção de contabilização para esta sessão, a entrada não será removida, a menos que o PSN atinja o limite de sessões ativas.
Exemplo da sessão fantasma:
1. As mesmas etapas descritas no exemplo de sessão obsoleta acontecem em PSN1 para a sessão ABC.
2. A Sessão ABC tem um status Compatível no cache da sessão PSN1.
3. Uma atualização contábil provisória para a sessão ABC atinge PSN2.
4. Uma entrada de sessão para a sessão ABC é criada no PSN2. Como a entrada de sessão é criada a partir da mensagem de relatório, ela tem números limitados de atributos. Por exemplo, o status da postura não está disponível para a sessão ABC. Coisas como grupos de usuários e outros atributos específicos de autorização também estão ausentes.
A sessão fantasma aparece no cache da sessão PSN nestes cenários:
Aqui está um exemplo de uma sessão fantasma para o cenário com problemas temporários no caminho da rede em direção ao PSN1:
1. A autenticação inicial para a Sessão ABC é realizada pelo PSN.
2. PSN1 cria uma entrada para a sessão ABC no cache local.
3. A mensagem de syslog para a autenticação passada é transferida para o nó MNT.
4. Uma entrada para a sessão ABC é criada no TimesTen DB com o estado Autenticado.
5. A mensagem de início contábil para a sessão ABC chega à PSN 1.
6. Uma entrada de cache de sessão para a sessão ABC é atualizada com informações de Contabilidade-Início.
7. A mensagem de Syslog para Accounting-Start é transferida para o nó MNT.
8. O estado da sessão é atualizado para Iniciado.
9. A atualização de Contabilidade Provisória para a sessão ABC será encaminhada ao PSN2.
10. PSN2 cria uma entrada para a sessão ABC no cache local.
11. O Accounting-Stop da sessão ABC é encaminhado ao PSN1.
12. A entrada para a sessão ABC é removida do cache de sessão em PSN1.
13. Uma mensagem de syslog para Accounting-Stop é encaminhada pela PSN 1 à MNT.
14. A Sessão ABC é marcada como terminada no MNT.
Isso representa um cenário da sessão fantasma criada para a conexão VPN de longa duração:
1. Autenticação inicial no PSN1.
2. A Sessão ABC é criada no cache da sessão.
3. A contabilidade inicia a mensagem processada pelo PSN.
4. O novo endereço IP é atribuído ao adaptador de Rede Virtual Privada (VPN).
5. Uma atualização contábil provisória com informações de endereço IP chega ao PSN.
6. As informações de endereço IP são adicionadas ao cache da sessão.
7. A avaliação de postura ocorre com a PSN1.
8. O status da postura é atualizado na sessão.
9. Um envio de COA é executado pelo ISE; isso dispara um novo nível de acesso a ser atribuído.
10. Há uma falha no caminho da rede que torna o PSN1 inacessível.
11. Após a expiração de um intervalo de atualização temporário, o ASA/FTD detecta que o PSN1 está inacessível.
12. A atualização contábil provisória chega à PSN2.
13. A sessão fantasma é criada no cache da sessão PSN2.
Se a PSN1 se tornar acessível posteriormente (14), todas as mensagens de relatório subsequentes serão encaminhadas (15,16) lá e isso deixará a sessão ABC no cache da sessão PSN2 por um tempo indefinido.
Para entender como a sessão obsoleta e a sessão fantasma interrompem a postura, você pode rever o processo de descoberta do módulo de postura do AnyConnect ISE:
Estágio 1 Descoberta:
Durante esse estágio, o módulo de postura do ISE executa 4 problemas simultâneos para localizar a PSN que fez uma autenticação para o endpoint.
Primeiro, 3 testes na figura são baseados em redirecionamento (IP GW padrão. Discovery host IP (se definido) e enroll.cisco.com IP) ; Essas sondas sempre apontam o agente para a PSN direita, pois a URL redirecionada é retirada do próprio NAD.
A sonda número 4 é enviada a todos os servidores primários apresentados no arquivo ConnectionData.xml. Esse arquivo é criado após a primeira tentativa de postura bem-sucedida. O conteúdo do arquivo pode ser atualizado posteriormente caso o cliente migre entre PSNs.
Em sistemas Windows, o local do arquivo é C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\ISE Posture\.
Como todos os testes do estágio 1 são executados simultaneamente, o resultado do teste 4 é usado somente se todos os outros 3 testes falharem ou se o módulo de postura do ISE não conseguir estabelecer comunicação adequada com a PSN retornada na URL de redirecionamento em 5 segundos.
Quando a sonda 4 chega à PSN, ela contém uma lista de endereços IP e MAC ativos descobertos no ponto final. A PSN usa esses dados para localizar uma sessão para esse ponto final no cache local.
Se a PSN tiver uma sessão obsoleta ou fantasma para um endpoint, isso pode resultar em um status de postura incorreto exibido posteriormente no lado do cliente.
Quando um agente obtém várias respostas para a prova 4 (ConnectionData.xml pode conter mais de uma PSN primária), a resposta mais rápida é sempre usada.
Estágio 2 Descoberta:
Todos os testes de detecção do estágio 2 são sem redirecionamento, o que significa que cada teste dispara uma pesquisa de sessão na PSN de destino.
Se o PSN não puder localizar a sessão no cache da sessão local, ele deverá executar uma pesquisa MNT (somente com base no endereço MAC) para localizar um proprietário da sessão e retornar o nome do proprietário para o agente.
Como todos os testes acionam a pesquisa de sessão, a descoberta do estágio 2 pode ser ainda mais afetada por problemas como resultado de sessões obsoletas ou fantasmas.
Se a PSN chegar ao estágio 2, a investigação de descoberta que existe no cache de sessão criará uma entrada obsoleta ou fantasma para o mesmo ponto final. Isso resulta no status de postura incorreto retornado ao usuário final.
O exemplo mostra como a postura ocorre quando o PSN mantém uma sessão obsoleta ou uma sessão fantasma:
Observação: esse problema pode se manifestar somente quando todos os testes de descoberta baseados em redirecionamento falham ou quando a postura de não-redirecionamento é implementada.
1. Qualquer um dos testes Find my session emitidos pelo módulo de postura do ISE.
2. A PSN realiza uma pesquisa de sessão no cache de sessão. Se a sessão for encontrada, ocorrerá um problema de sessão obsoleta ou fantasma.
3. A PSN executa a seleção da política de provisionamento do cliente. Em um caso em que uma sessão fantasma que tem uma falta de atributos de autenticação/autorização e todas as políticas configuradas pelo cliente são muito específicas (por exemplo, as políticas são criadas para grupos específicos do Ative Diretory), a PSN não pode atribuir uma política de provisionamento de cliente correta. Isso pode se manifestar na mensagem de erro: "Ignorando a verificação do AnyConnect, sua rede está configurada para usar o Cisco NAC Agent".
4. Para o cenário de sessão fantasma, o módulo de postura do ISE continua com a solicitação de postura inicial. Essa solicitação contém informações sobre todos os produtos de gerenciamento de segurança e patches detectados no endpoint.
5. A PSN usa as informações dos atributos request e session para corresponder à política de postura apropriada. Como a sessão fantasma tem uma falta de atributos neste ponto, não temos nenhuma política para corresponder. Nesse caso, a PSN responde ao endpoint que está em conformidade. Esse é um comportamento padrão do ISE no caso de uma política de postura não correspondente.
Observação: quando há alguma política genérica que pode ser selecionada nos atributos da sessão fantasma, continuamos com a etapa 6.
6. A PSN retorna as políticas de postura selecionadas de volta para o agente.
Observação: quando nenhuma política pode ser selecionada, a PSN retorna o status Compliant (Compatível).
7. O agente retorna status para cada política/requisito como "aprovado" ou "com falha".
8. A avaliação do relatório acontece no ISE e o status da sessão muda para Compatível.
Observação: no caso de problemas de postura causados pela sessão fantasma, o administrador do ISE possivelmente percebe alguns COAs de postura com falha. Nesses casos, as solicitações de COA são executadas a partir de PSNs erradas e para IDs de sessão erradas.
O módulo de postura do ISE foi projetado para monitorar uma quantidade limitada de eventos no endpoint para acionar um processo de descoberta.
Eventos que disparam a descoberta:
A nova autenticação dot1x, desbloqueio de PC e alteração de endereço IP não são detectados pelo módulo de postura do ISE.
O módulo de postura do ISE não pode detectar uma nova tentativa de autenticação ou reautenticação nestes cenários:
Este diagrama representa um exemplo de reautenticação em diferentes PSNs causada pela interrupção da PSN original. Um cenário com um balanceador de carga é muito semelhante.
No caso de um balanceador de carga, a reautenticação é direcionada para a PSN diferente como resultado de uma expiração do temporizador de adesão.
1. Autenticação inicial no PSN1
2. A Sessão ABC é criada no cache da sessão PSN1.
3. A avaliação de postura é realizada com PSN1.
4. O status da postura do ABS da sessão passa para Compatível.
5. O COA é acionado pela alteração do status da postura e leva à reautenticação do endpoint para aplicar o próximo nível de acesso.
6. A PSN1 fica indisponível.
7. Reautenticação para sessão ABC atinge PSN2.
8. Como é uma nova sessão para PSN2, o status de postura da sessão torna-se Pendente.
O status de postura inicial é atribuído pela PSN à sessão:
Observação: a máquina de estado descreve apenas uma seleção inicial do status da postura. Cada sessão que é inicialmente marcada como Desconhecida pode mais tarde se tornar Compatível ou Não Compatível com base na avaliação do relatório recebida do módulo de postura do ISE.
Isso pode acontecer nos dois cenários mais comuns:
A nova ID de sessão pode ser gerada em alguns outros cenários de casos de canto. Por exemplo, em alguns casos, o roaming sem fio pode ser a causa disso.
O principal aqui é que o ISE PSN sempre coloca uma nova sessão no estado Pending, a menos que o aluguel de postura seja configurado. O aluguel de postura é explicado mais adiante neste documento.
Identificar se o AnyConnect mostra conformidade enquanto está no estado de redirecionamento é causado pela sessão obsoleta/fantasma. Precisamos obter acesso ao endpoint enquanto ele estiver em um estado problemático.
1. Clique no ícone de engrenagem na interface do usuário do AnyConnect
2. Na nova janela, navegue até Varredura do sistema > Estatísticas
Aqui, preste atenção a dois elementos:
A demonstração mostra o registro das etapas necessárias para a identificação do problema:
O exemplo anterior serve para diferenciar o problema de uma sessão obsoleta ou fantasma do problema do processo de descoberta que não começou.
Ao mesmo tempo, precisamos identificar a sessão real que disparou o problema para entender melhor como exatamente ele se torna um problema de sessão obsoleta ou fantasma.
Embora em alguns cenários as sessões obsoletas e fantasma não possam ser evitadas, precisamos garantir que as melhores práticas sejam implementadas para que nenhuma sessão obsoleta/fantasma seja criada no ambiente.
Analise um pacote DART retirado do endpoint que reproduz o problema.
Para conseguir isso, o utilitário do pacote DART precisa ser iniciado como um administrador e realizar a limpeza do registro.
Depois que o pacote DART tiver sido coletado, desarquive-o e concentre-se no arquivo AnyConnect_ISEPosture.txt localizado na pasta Cisco AnyConnect ISE Posture Module. Este arquivo contém todos os eventos relacionados à descoberta.
1. Inicie a solução de problemas e identifique todos os momentos de reinicialização da descoberta. As palavras-chave a serem pesquisadas são Reiniciando a Descoberta ou Descoberta HTTP. Aqui, navegue até a linha com reinicialização de descoberta que aconteceu no momento problemático:
2. Várias linhas após a reinicialização da descoberta, há uma linha que contém - Sondando destinos de estágio MNT. Este é um indicador do início da descoberta do estágio 1:
Recomenda-se realçar todos os testes baseados em redirecionamento com a mesma cor e PSNs previamente conectados tirados de ConnectionData.xml (alvos de status de autenticação) em uma cor diferente.
Normalmente, os FQDNs PSN são muito semelhantes e é difícil detectar a diferença.
3. Leia os arquivos de registro para ver um resultado para cada sonda. Este é um exemplo de como o teste falho se parece:
4. Em algum lugar do arquivo após a reinicialização da descoberta para o estágio 1 ou estágio 2, você verá uma resposta bem-sucedida de um ou mais PSNs:
5. Várias linhas depois, há uma linha com a palavra-chave MSG_NS_SWISS_NEW_SESSION.
Essa linha contém uma ID de sessão real que foi selecionada pelo PSN como resultado da pesquisa de sessão.
Use esta ID de sessão para investigar mais no ISE para determinar como esta sessão se torna obsoleta/fantasma:
No guest.log com o componente clientwebapp habilitado em DEBUG, o PSN que responde com a sessão Obsoleta/Fantasma pode ser visto.
A PSN recebe uma solicitação do agente de postura do ISE. Esta é uma solicitação do AnyConnect devido ao valor de agente de usuário:
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
A solicitação contém matrizes de endereços IP e endereços MAC. Neste exemplo específico, cada matriz contém apenas um valor.
O log mostra que o ID da sessão da solicitação é nulo, o que indica que essa é uma solicitação da sonda baseada em não-redirecionamento.
Mais tarde, você pode ver como os valores de arrays são usados para localizar um ID de sessão:
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
Após a linha com as palavras-chave Sent http response, você pode ver o conteúdo da resposta real:
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
Depois de saber a ID da sessão obsoleta/fantasma, você pode investigar o relatório de Contabilidade Radius para obter uma melhor compreensão do que fez com que essa sessão se tornasse obsoleta/fantasma:
Aqui está um exemplo de um relatório que mostra como uma sessão obsoleta foi deixada em ciscolive-ise2:
Aqui, aplica-se a mesma lógica que para a edição anterior. A única diferença é que você precisa se concentrar na Hora de início da verificação mais recente. Para esse tipo de problema, o carimbo de data/hora da última verificação está em algum lugar no passado.
Normalmente, quando o usuário final descobre um problema, uma verificação que aconteceu há algum tempo é vista. Nos registros ISE Radius Live, são vistas tentativas recentes de autenticação do endpoint problemático.
A demonstração mostra o registro das etapas necessárias para a identificação do problema:
A abordagem aqui é muito semelhante à seção Advanced Troubleshoot Stale/Phantom Session. O principal elemento de solução de problemas é a investigação do pacote DART.
Dentro do pacote DART, você pode pesquisar reinicializações de descoberta (como mostrado para o problema anterior) e confirmar que não houve reinicialização de descoberta no momento em que o problema foi relatado.
No lado do ISE, concentre-se no relatório de autenticação Radius Live Logs/ Radius para confirmar que houve failover entre PSNs ou que uma nova ID de sessão foi gerada pelo NAD.
Historicamente, não havia nenhum recurso no ISE que pudesse resolver problemas descritos neste documento, portanto, a única maneira era confiar no conjunto de práticas recomendadas implementadas na rede e no ISE para minimizar os riscos.
Sempre Implementar Postura Baseada em Redirecionamento Quando Possível
Um contra-argumento comum para essa recomendação é uma experiência de usuário ruim; pop-ups no SO ou navegadores são vistos. Isso indica redirecionamento enquanto o módulo de postura do AnyConnect ISE em segundo plano executa um processo de avaliação.
Como uma solução para isso, é possível redirecionar SOMENTE sondas de descoberta de módulo de postura do ISE e permitir seletivamente qualquer outro tráfego.
Este exemplo mostra a ACL de redirecionamento projetada para redirecionar somente solicitações HTTP para o Host de Descoberta (10.1.1.1 neste exemplo) e 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
Para manter um nível aceitável de segurança, essa ACL de redirecionamento pode ser combinada com a DACL atribuída do ISE.
O Estado Pendente Permite Conexões Somente com a PSN em que o Ponto de Extremidade foi Autenticado
Essa abordagem é útil para ambientes onde o redirecionamento de url não é suportado (por exemplo, implementações com NADs de terceiros).
Como solução, implemente várias políticas de autorização PosturePending (uma por PSN). Cada política precisa conter como uma das condições o nome da PSN onde a autenticação ocorreu.
No perfil de autorização atribuído a cada política, o acesso a todas as PSNs deve ser bloqueado, exceto ao nó onde ocorreu a autenticação.
Criar políticas de autorização para implantação de 2 nós:
1. Política de Postura Pendente para PSN1
2. Nome PSN1 usado como uma condição na política.
3. Perfil de autorização com ACL que bloqueia o acesso a todas as PSNs, exceto a PSN1.
4. Postura Pendente política para PSN2.
5. Nome PSN2 usado como uma condição na política.
6. Perfil de autorização com ACL que bloqueia o acesso a todas as PSNs, exceto a PSN2.
7. Política de autorização de conformidade.
A figura explica como essa abordagem funciona:
1. A autenticação atinge o PSN1.
2. Como resultado das políticas de autorização configuradas, o PSN1 atribui um perfil de autorização que bloqueia o acesso a todos os outros nós, exceto o PSN1.
3. O módulo de postura do AnyConnect ISE reinicia o processo de descoberta.
4. A sonda para PSN2 está bloqueada pelo NAD como por uma ACL atribuída anteriormente.
5. A sonda para PSN1 é permitida pela ACL atribuída no NAD.
Práticas recomendadas de balanceador de carga
Caso de uso de postura sobre VPN
Este exemplo mostra o intervalo de atualização da contabilidade provisória configurado para 20 horas. Isso não impede a atualização temporária inicial que transporta o endereço IP atribuído ao ponto final.
aaa-server ISE protocol radius
interim-accounting-update periodic 20
group-policy SSL-VPN attributes
vpn-idle-timeout 1200
vpn-session-timeout 1200
Habilitar concessão de postura
Esse é um recurso no ISE que marca o endpoint como compatível por um período definido (1 a 365 dias). O valor de concessão de postura é um atributo de ponto final, o que significa que ele está armazenado no ISE DB.
Todos os atributos de endpoint que incluem leasing de postura são replicados em todos os nós na implantação do ISE.
Quando a PSN obtém uma nova sessão para a postura do endpoint, o leasing pode ser utilizado para marcar a sessão como Compatível imediatamente.
Para tomar essa decisão, a PSN usa 3 valores. Esses valores são:
1. Quantidade de dias definida para locação de postura nas configurações do ISE: Navegue até Administração > Sistema > Postura > Configurações Gerais:
2. O valor do atributo PostureExpiry é um atributo de ponto final real que contém um carimbo de data/hora Epoch. O valor PostureExpiry é preenchido inicialmente na primeira tentativa de postura bem-sucedida para o ponto de extremidade após a concessão de postura habilitada pelo administrador do ISE.
Posteriormente, esse valor é atualizado na próxima tentativa de postura bem-sucedida que ocorre após o vencimento da concessão.
Você pode ver PostureExpiry em Visibilidade de contexto > Pontos de extremidade enquanto um dos pontos de extremidade postulados está aberto:
Esse valor pode ser convertido no timestamp legível por humanos, por exemplo, aqui - https://www.epochconverter.com/
3. Hora do sistema PSN no momento em que ocorre a nova autenticação
Quando a autenticação de um endpoint com concessão de postura atinge a PSN, ela usa PostureExpiry e a data do sistema para obter o número de dias decorridos da última verificação de postura bem-sucedida.
Se o valor do resultado estiver dentro de um intervalo de concessão de postura definido nas configurações, a sessão obterá um status Compatível.
Se o valor do resultado for maior que o valor do aluguel, a sessão obterá um status Desconhecido.
Isso dispara a postura para ser executada novamente e o novo valor PostureExpiry pode ser salvo.
Este diagrama descreve o processo quando ocorre o failover:
1. A autenticação inicial acontece com o PSN1.
2. A Sessão ABC é criada no cache da sessão.
3. Ocorre a avaliação de postura.
4. O status da sessão muda para Compatível
5. O COA é acionado pela alteração do status da postura e leva à reautenticação do endpoint para aplicar o próximo nível de acesso.
6. O valor PostureExpiry é salvo no ponto final.
7. Os dados do endpoint são replicados durante a implantação.
8. Próxima autenticação atinge PSN2.
9. A PSN2 verifica se o endpoint está dentro de um aluguel de postura válido.
11. A sessão é adicionada ao cache de sessão como Compatível.
12. Devido ao aluguel válido, a sessão é criada com o status de postura Compatível.
Implementação de reautenticação
Sempre enviar por push o temporizador de reautenticação do ISE com RADIUS-Request, selecionado em Manter a conectividade durante a reautenticação. Essa configuração garante que o NAD mantenha a mesma ID de sessão na reautenticação.
.
Ambientes com balanceadores de carga
O mesmo conjunto de práticas recomendadas (explicado na seção de sessão obsoleta/fantasma) pode ser implementado.
Sub-redes Diferentes Podem Ser Usadas para Estados Pendente e Em Conformidade
Quando o projeto de rede fornece a oportunidade de usar diferentes sub-redes nos estados Pendente e Compatível, essa abordagem garante que cada alteração no status da postura resulte na alteração do Gateway Padrão.
Avaliação de postura usada no mesmo intervalo que um temporizador de reautenticação
A Avaliação de postura pode ser habilitada com o intervalo igual ao temporizador de reautenticação. Nesse caso, quando a PSN original não estiver disponível, a falha PRA reiniciará o processo de descoberta.
Como parte de um aprimoramento implementado (descrito no bug da Cisco ID CSCvi35647 ), o patch 6 do ISE 2.6 tem um novo recurso que implementa o compartilhamento do status da postura da sessão em todos os nós na implantação do ISE.
Esse aprimoramento está integrado em versões futuras: ISE 2.7 patches 2 e ISE 3.0.
Esse novo recurso é baseado no mecanismo Light Session Diretory (LSD), que foi introduzido no ISE 2.6. Nas versões mais recentes, esta funcionalidade foi renomeada para Light Data Distribution (LDD) Radius Session Diretory. A Distribuição de dados leves é ativada por padrão e permite o compartilhamento de um contexto de sessão limitado entre nós do ISE. Não há replicação de contexto de sessão completa entre PSNs, apenas uma quantidade limitada de atributos compartilhados para cada sessão.
O Diretório de Sessão Leve elimina a necessidade de executar chamadas de API de recursos dispendiosas para o MNT quando um dos nós na implantação tiver que determinar o proprietário da sessão atual.
Em geral, a consulta do proprietário é necessária quando o fluxo de COA é iniciado. Com o LDD, cada PSN pode encontrar um proprietário real da sessão no cache local do Diretório de sessão do Radius.
Essa funcionalidade contém os seguintes elementos:
Esse cache existe em cada nó do ISE e armazena todas as sessões ativas apresentadas na implantação do ISE. Cada sessão tem uma quantidade limitada de atributos no cache.
Aqui estão exemplos dos atributos armazenados no Diretório de sessão Radius para cada sessão:
Há uma troca formada na qual o Publicador, a Fila relacionada e o Consumidor são apresentados em todos os nós na implantação do ISE. Isso garante que a topologia de malha completa seja formada entre todos os nós do ISE.
O Diretório de Sessão Radius representa um editor aqui. Quando uma nova autenticação bem-sucedida é processada por um PSN, uma nova sessão é criada no cache da sessão PSN.
Para esta sessão, um conjunto limitado de atributos é colocado no Diretório de sessão Radius.
Observação: a terminologia e a arquitetura do General RabbitMQ estão fora do escopo deste documento.
A figura explica como o fluxo do COA funciona com o cache RSD:
1. A autenticação inicial acontece com o PSN1.
2. A Sessão ABC é criada no cache da sessão.
3. Os atributos obrigatórios são salvos no RSD.
4. A sessão é compartilhada por RabbitMQ com todos os outros nós do ISE.
5. A sessão é criada no cache RSD em todos os nós do ISE.
6. Novos dados de perfil chegam ao PSN2.
7. O endpoint é recriado e (no caso de uma alteração que exija a execução do COA PSN2) continua com a próxima etapa.
8. Uma chamada API interna é enviada para o cache RSD para executar o COA.
9. Os dados do cache RSD são usados para preparar uma mensagem de Proxy COA. Ele vai de um nó ISE para outro e contém todos os detalhes que o nó de destino pode usar para emitir uma solicitação CAO de volta ao NAD. A mensagem do COA é transferida internamente primeiro para o PRRT Runtime (servidor AAA real dentro do ISE).
10. PSN2 envia uma mensagem COA para PSN1.
11. PSN1 envia uma mensagem COA ao NAD.
Para solucionar problemas de comunicação por LDD no ISE, habilite o componente Light Session Diretor no DEBUG:
Aqui está um exemplo de uma mensagem de depuração do arquivo lsd.log para criação de sessão e publicação no PSN original:
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
Em todos os outros nós do ISE, você verá como uma sessão foi consumida:
[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]
O compartilhamento de status de postura resolve problemas quando a causa raiz é uma sessão Obsoleta/Fantasma ou uma Reautenticação em uma PSN diferente que não acionou a reinicialização da descoberta.
Assim que a sessão estiver em conformidade, essas informações serão inseridas no RSD da sessão e, posteriormente, poderão ser usadas por cada PSN na implantação.
Ainda há alguns outros casos de canto que o recurso descrito não pode resolver. Por exemplo, um cenário em que o NAD executa uma nova autenticação no mesmo PSN, mas com um ID de sessão diferente.
Tais cenários podem ser tratados com as práticas recomendadas descritas neste documento.
Esta figura demonstra a topologia usada para um teste de compartilhamento de status de postura:
Para criar uma sessão obsoleta, a autenticação deve ser executada inicialmente no skuchere-ise26-1. Em seguida, o NAD deve ser reconfigurado para enviar a contabilidade para skuchere-ise26-3.
Depois que uma mensagem de relatório tiver sido encaminhada para a PSN incorreta, o NAD deverá ser reconfigurado (novamente) para enviar a contabilidade de volta para skuchere-ise26-1.
A figura demonstra um relatório de contabilidade que comprova a presença da sessão fantasma no skuchere-ise26-3:
1. Mensagens Accounting-Start processadas pelo skuchere-ise26-1.
2. Contabilidade Provisória - Atualização para a mesma sessão processada por skuchere-ise26-3.
3. A sessão termina mais tarde no skuchere-ise26-1.
Depois de algum tempo, o endpoint se conecta novamente à rede, mas o redirecionamento não funciona mais. No guest.log de PSN - skuchere-ise26-3, você pode ver essas mensagens de log com o componente client-webapp habilitado em 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
Quando a PSN detecta que mantém uma sessão obsoleta/fantasma para o endpoint, ela não responde ao módulo de postura do ISE e isso nos permite obter a resposta correta da PSN onde a autenticação mais recente aconteceu.
Como uma solução para o problema de sessão obsoleta/fantasma no momento da consulta da sessão, a PSN verifica a presença de qualquer nova sessão para o endpoint no RSD.
Caso o RSD contenha um ID de sessão diferente do que o PSN possui no cache de sessão local, ele presume que a sessão (apresentada no cache de sessão) está obsoleta.
Para reproduzir esse cenário, um temporizador de reautenticação curto é ativado no perfil de autorização atribuído ao ponto de extremidade de estado compatível.
Mais tarde, o NAD é reconfigurado para enviar autenticação e contabilização para outra PSN (skuchere-ise26-3).
Após a expiração do temporizador de reautenticação, a mesma sessão não é autenticada na PSN diferente.
A figura demonstra um relatório de autenticação que mostra failover para a mesma sessão de skuchere-ise26-1 a skuchere-ise26-3:
1. A autenticação acontece no skuchere-ise26-1, o perfil de autorização com redirecionamento é atribuído.
2. COA após avaliação de postura bem-sucedida.
3. Próxima autenticação quando o perfil de autorização para o estado de conformidade for atribuído.
4. A autenticação atinge diferentes PSNs, mas ainda obtém o perfil de autorização para o estado de conformidade.
A sessão tem status de conformidade na nova PSN após o failover em ise-psc.log com os componentes epm-pip e nsf-session habilitados para 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
O problema original é resolvido com a adição de lógica extra no processo de seleção do status da postura.
Esta figura demonstra o que foi alterado (alterações destacadas em vermelho):
Revisão | Data de publicação | Comentários |
---|---|---|
2.0 |
31-May-2023 |
Recertificação |
1.0 |
22-Apr-2020 |
Versão inicial |