内容

はじめに

背景説明

問題

エンドユーザエクスペリエンス

ISE管理エクスペリエンス

一般的な問題のあるシナリオ

古い/ファントムセッションの問題

ISEセッション管理ロジック

MNTおよびセッション管理

PSNとセッション管理

はじめに

このドキュメントでは、一般的なIdentity Service Engine(ISE)ポスチャサービスの問題「AnyConnect ISEポスチャモジュールが準拠を示す」について説明します。

背景説明

このドキュメントでは、一般的なIdentity Service Engine(ISE)ポスチャサービスの問題について説明します。ISEのセッションステータスが保留中の間に、AnyConnect ISEポスチャモジュールが準拠を示します。

症状は常に同じですが、この問題には複数の根本原因がある可能性があります。

多くの場合、このような問題のトラブルシューティングには非常に時間がかかり、重大な影響を及ぼします。

このドキュメントでは、次の項目を説明しています。

- エンドユーザとISE管理者の観点からの問題の兆候。

- 一般的な問題のあるシナリオ。

- ISE、AnyConnect、およびネットワークの動作の背後にある理論が、問題を引き起こします。

- 迅速な問題特定のアルゴリズム。

- 一般的な問題のあるシナリオに対する古典的な解決策。

- Radiusセッションディレクトリを介したポスチャステータスの共有。

後述する概念の詳細な説明については、次を参照してください。

ISE ポスチャ スタイルの 2.2 前後の比較

虫眼鏡の下のISE。ISEのトラブルシューティング方法 – BRKSEC-3229

問題

エンドユーザエクスペリエンス

通常、この問題は、ブラウザにISEクライアントプロビジョニングポータルへのネットワークアクセスがないこと、またはリダイレクトが繰り返されていないことによって発生しますが、同時に、AnyConnect ISEポスチャモジュールはポスチャステータスを準拠として示します。

一般的なエンドユーザエクスペリエンス：

ISE管理エクスペリエンス

通常、この問題の初期トリアージでは、ISE管理者がRadiusライブログ調査を実行して、ISEにヒットする実際の認証があることを確認します。

この段階で検出される最初の症状は、ライブログまたはRadius認証レポートでエンドポイントの最後の認証が成功したことが示すように、エンドポイントとISE間のポスチャステータスの不一致を示し、Pendingポスチャステータスを示します。

一般的なISE管理エクスペリエンス：

- Aliceに対する最後の成功した認証。

- セッションのポスチャステータスはPendingです。

- Aliceの最後のセッションイベント。

- セッションイベントでは、ポスチャステータスがCompliantと表示されます。

注:c.およびd.は、問題が発生したときに必ずしもライブログに表示されるわけではありません。ポスチャステータスがCompliantのセッションイベントは、このドキュメントで後述する古いセッションや幻のセッションが原因で発生するシナリオでより一般的です。

一般的な問題のあるシナリオ

通常、この問題は2つの問題のあるシナリオで発生し、それぞれのシナリオには複数の根本原因があります。シナリオ：

- AnyConnect ISEポスチャモジュールが、ポスチャプロセス中にポリシーサービスノード(PSN)から誤った通知を受け、誤ったポスチャステータスが表示された。 この場合、通常はPSNセッションキャッシュ内の古いセッションまたはファントムセッションを処理します。

- AnyConnect ISEは、現在の認証が検出プロセスをトリガーしなかったため、前の検出サイクルの状態をポスチャに表示します。AnyConnectのISEポスチャモジュールには、検出プロセスをトリガーするイベントの数が制限されており、認証または再認証中にいずれのイベントも検出されなかった可能性があります。

古い/ファントムセッションの問題

問題をより深く理解するには、ISEセッション管理ロジックと必要なAnyConnect検出プロセスを調査します。

ISEセッション管理ロジック

ISEの導入では、セッション管理プロセスを担当するPSNとモニタリングノード(MNT)の2人の担当者が存在します。

この問題を適切にトラブルシューティングして特定するには、両方のペルソナのセッション管理の理論を理解することが重要です。

MNTおよびセッション管理

次の図で説明するように、MNTノードは、PSNから送信される渡された認証Syslogメッセージに基づいて季節を作成します。

その後のセッションステータスは、Syslogによってアカウンティング用に更新できます。

MNTでのセッションの削除は、次の3つのシナリオで発生します。

- アカウンティングを使用しないセッションは、作成してから約60分後に削除されます。セッションのステータスとクリーンを確認するために5分ごとに実行されるcronジョブがあります。

- 終了したセッションは、同じcronジョブによってアカウンティングの停止が処理されてから約15分後に削除されました。

- 各実行で同じcronを実行すると、5日（120時間）以上「Started」状態だったセッションも削除されます。開始ステートは、MNTノードがセッションのSyslogを開始するために認証とアカウンティングの両方を処理したことを意味します。

PSNからのSyslogメッセージの例。これらのメッセージは、runtime-aaaコンポーネントがDEBUGに有効になるとprrt-server.logに記録されます。 太字の部分は、検索正規表現の作成に使用できます。

認証の成功：

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

アカウンティング開始：

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

暫定アカウンティングの更新：

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

アカウンティング停止：

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

PSNとセッション管理

PSNセッションキャッシュとは何ですか。

特定のPSNのすべてのアクティブセッションを格納するインメモリデータベース。セッションキャッシュは常にノードに対してローカルであり、あるノードから別のノードへの完全なセッション状態のレプリケーションを実行できるメカニズムはISEにはありません。

すべてのアクティブセッションIDについて、PSNは内部/外部ユーザグループ、ネットワークアクセスデバイス(NAD)属性、証明書属性など、認証/許可フェーズで収集されたすべての属性を格納します。これらの属性は、認証、認可、クライアントプロビジョニング、ポスチャなど、さまざまなポリシータイプを選択するためにPSNによって使用されます。

ノードまたはノード自体のサービスが再起動すると、セッションキャッシュが完全に削除されます。

現在のセッション処理ロジックでは、2つのシナリオでセッションキャッシュに新しいエントリが作成されます。その後、NADから送信されるアカウンティングメッセージから既存のセッションの詳細を更新できます（NADの場合は、新しいエントリが作成されます）。

- セッションはPSNで正常に認証されました。

- PSNは、セッションキャッシュに存在しないセッションのアカウンティング中間更新を取得しました。

セッションの削除に関しては、PSNは次のロジックを実装します。

- アカウンティング停止メッセージを処理した直後にセッションキャッシュエントリが削除されました。

- ノードがアクティブセッションの制限に達すると、PSNは最も最近使用されていないセッションの削除を開始します。

PSN上の古いセッション

ISEの導入では、既存のセッションのアカウンティング停止が、実際の認証を実行しなかったPSNによって処理されています。

古いセッションの例：

1.セッションABCのPSNで認証が成功します。

2. PSNはセッションキャッシュにエントリを作成します。

3.ポスチャ評価が行われます。

4. 準拠としてマークされたセッション。

5.ポスチャステータスの変更によってトリガーされる認可変更(COA)により、エンドポイントの再認証が行われ、次のアクセスレベルが適用されます。

6.セッションABCのアカウンティング停止がPSN2に到着します。

ステップ6セッションの後、ABCはPSN1上で古い状態のままになります。このPSN上でアカウンティング停止メッセージが処理されて削除されないためです。展開で認証の試行回数が多くなければ、セッションは長時間にわたって削除されます。

次のシナリオでは、古いセッションがPSNセッションキャッシュに表示されます。

- ロードバランサーのスティッキネスタイマーの有効期限が切れているため、アカウンティング停止が正しくないPSNに到達しました。

- NADの誤った設定は、認証とアカウンティング用に設定されたPSNとは異なります。

- 次のPSNへのNADフェールオーバーを引き起こす、ネットワークパスの一時的な接続の問題。

ロードバランサ(LB)環境での古いセッションの例：

1. PSN 1によって実行されるセッションABCの初期認証。

2.この認証により、ロードバランサのスティッキネスタイマーが開始されます。

3. PSN 1は、セッションABCのエントリをローカルキャッシュに作成します。

4. MNTノードに転送された成功した認証のsyslogメッセージ。

5.状態AuthenticatedでMNTセッションディレクトリに作成されたセッションABCのエントリ。

6. PSN 1のセッションABCランドの会計開始メッセージ。

7.セッションABCのセッションキャッシュエントリがAccounting-Startからの情報で更新されました。

8. MNTノードに転送されたAccounting-Startのsyslogメッセージ。

9.セッションの状態がStartedに更新されました。

10.ロードバランサのスティッキネスタイマーが期限切れになる。

11.ロードバランサによってPSN 2に転送されたセッションABCのアカウンティング停止。

12. PSN 2によってMNTに転送されたAccounting-StopのSyslogメッセージ。

13. MNTで終了とマークされたセッションABC。

PSNのファントムセッション

ファントムセッションは、この特定のセッションに対して認証を実行しなかったPSNに対してアカウンティングの中間更新が行われるシナリオです。このシナリオでは、新しいエントリがPSNセッションキャッシュに作成され、PSNがこのセッションのアカウンティング停止メッセージを取得しない場合、PSNがアクティブセッションの制限に達しない限り、エントリは削除されません。

ファントムセッションの例：

1.セッションABCのPSN1では、失効したセッションの例で説明したものと同じ手順が実行されます。

2.セッションABCのPSN1セッションキャッシュのステータスはCompliantです。

3.セッションABCの会計中間更新がPSN2にヒットします。

4. PSN2で作成されたセッションABCのセッションエントリ。アカウンティングメッセージから作成されたセッションエントリであるため、属性の数は限られています。たとえば、セッションABCではポスチャステータスは使用できません。ユーザグループやその他の認可固有の属性なども同様です。

ファントムセッションは、次のシナリオでPSNセッションキャッシュに表示されます。

- ネットワークを通過する際の短時間の停止。

- ネットワークアクセスデバイスの誤動作。

- ロードバランサの誤動作または設定の誤り。

PSN1へのネットワークパスに一時的な問題があるシナリオのファントムセッションの例：

1. PSNによって実行されるセッションABCの初期認証。

2. PSN1は、セッションABCのエントリをローカルキャッシュに作成します。

3. MNTノードに転送された成功した認証のsyslogメッセージ。

4.状態がAuthenticatedでTimesTen DBに作成されたセッションABCのエントリ。

5. PSN 1のセッションABCランドの会計開始メッセージ。

6.セッションABCのセッションキャッシュエントリがAccounting-Startからの情報で更新されました。

7. MNTノードに転送されたAccounting-Startのsyslogメッセージ。

8.セッションの状態がStartedに更新されました。

9. PSN2に転送されたセッションABCの暫定アカウンティングアップデート。

10. PSN2は、セッションABCのエントリをローカルキャッシュに作成します。

11. PSN1に転送されたセッションABCのアカウンティング停止。

12. PSN1のセッションキャッシュから削除されたセッションABCのエントリ。

13. PSN 1によってMNTに転送されたAccounting-StopのSyslogメッセージ。

14.セッションABCがMNTで終了したとマークされていること。

長寿命のVPN接続のために作成されたファントムセッションのシナリオは次のとおりです。

1. PSN1での初期認証。

2.セッション・キャッシュ内に作成されたセッションABC。

3.アカウンティングは、PSNによって処理されるメッセージを開始します。

4.バーチャルプライベートネットワーク(VPN)アダプタに割り当てられた新しいIPアドレス。

5. IPアドレス情報を含む暫定アカウンティングアップデートがPSNに到達します。

6.セッションキャッシュに追加されたIPアドレス情報。

7.ポスチャ評価はPSN1で行われます。

8.セッションでポスチャステータスが更新されました。

9. ISEによって実行されるCOAプッシュ。これにより、新しいアクセスレベルが割り当てられます。

10. PSN1をアクセス不能にするネットワークパスの停止。

11.暫定アップデート間隔の満了後、ASA/FTDはPSN1にアクセスできないことを検出します。

12. PSN2に暫定アカウンティングアップデートが到着します。

13. PSN2セッションキャッシュに作成されたファントムセッション。

後のPSN1がアクセス可能になると(14)、後続のすべてのアカウンティングメッセージがそこに転送され(15、16)、セッションABCはPSN2セッションキャッシュに未定義の時間だけ残ります。

古いセッションとファントムセッションによるポスチャプロセスの中断

古いセッションとファントムセッションがどれだけポスチャを中断するかを理解するには、AnyConnect ISEポスチャモジュール検出プロセスを確認します。

ステージ1の検出：

この段階で、ISEポスチャモジュールは4つの問題を同時に実行して、エンドポイントの認証を行ったPSNを特定します。

まず、図の3つのプローブはリダイレクトベース(デフォルトのゲートウェイIP。ディスカバリホストIP（定義されている場合）およびenroll.cisco.com IP：リダイレクトURLがNAD自体から取得されるため、これらのプローブは常にエージェントを正しいPSNにポイントします。

プローブ番号4は、ConnectionData.xmlファイルに示されているすべてのプライマリサーバに送信されます。 クライアントがPSN間で移行する場合に備えて、最初の正常なポスチャ試行の後に作成されたファイルとその後のファイルの内容を更新できます。Windowsシステムでは、ファイルの場所はC:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\ISE Posture\です。

すべてのステージ1プローブが同時に実行されるため、プローブ4の結果は、他の3つのプローブがすべて失敗した場合、またはISEポスチャモジュールが5秒以内にリダイレクトURLで返されたPSNとの適切な通信を確立できなかった場合にのみ使用されます。

プローブ4がPSNに到達すると、エンドポイントで検出されたアクティブなIPアドレスとMACアドレスのリストが含まれます。PSNはこのデータを使用して、ローカルキャッシュ内にあるこのエンドポイントのセッションを検索します。PSNにエンドポイントの古いセッションまたはファントムセッションがある場合、クライアント側で後から誤ったポスチャステータスが表示される可能性があります。

エージェントがプローブ4(ConnectionData.xmlには複数のプライマリPSNを含めることができます)に対して複数の応答を受信すると、常に最速の応答が使用されます。

第2段階の検出：

すべてのステージ2検出プローブはリダイレクトレスです。これは、すべてのプローブが宛先PSNでセッションルックアップをトリガーすることを意味します。PSNがローカルセッションキャッシュでセッションを見つけられない場合、セッションオーナーを見つけてオーナー名をエージェントに返すために、MNTルックアップ（MACアドレスベースのみ）を実行する必要があります。

すべてのプローブがセッションルックアップをトリガーするため、ステージ2ディスカバリは、古いセッションや幻のセッションによる問題の影響をさらに受ける可能性があります。

PSNがステージ2に到達すると、セッションキャッシュに存在する検出プローブによって、同じエンドポイントに対して古いエントリまたはファントムエントリが作成されます。その結果、誤ったポスチャステータスがエンドユーザに返されます。

次の例は、PSNが古いセッションまたはファントムセッションを保持している場合に、ポスチャがどのように発生するかを示しています。

注：この問題が発生するのは、すべてのリダイレクトベースの検出プローブが失敗した場合、または非リダイレクトポスチャが実装されている場合だけであることに注意してください。

1. ISEポスチャモジュールによって発行されたFind my sessionプローブ。

2. PSNは、セッションキャッシュ内でセッションルックアップを実行します。セッションが検出されると、古いセッションまたはファントム・セッションの問題が発生します。

3. PSNはクライアントプロビジョニングポリシー選択を実行します。認証/許可属性がなく、顧客によって設定されたすべてのポリシーが非常に固有である（たとえば、特定のActive Directoryグループに対してポリシーが作成される）ファントムセッションでは、PSNは適切なクライアントプロビジョニングポリシーを割り当てることができません。これは、「Bypassing AnyConnect scan your network is configured to use Cisco NAC Agent」というエラーメッセージで明らかになります。

- クライアントプロビジョニングポリシーが汎用の場合（仮想セッションで使用可能な属性が、ポリシーとAnyConnect設定を一致させるのに十分な場合）、PSNは評価プロセスの続行に必要な詳細を返します。

- このステップでも、古いセッションを処理できる場合は、PSNはポスチャステータスCompliantですぐに応答し、次のステップはすべて実行されません。PSNは、セッションがすでに準拠していると認識しているため、COAを送信しません。RADIUSライブログには、Compliantステータスで表示されるセッションイベントはありません。

4.ファントムセッションシナリオの場合、ISEポスチャモジュールは初期ポスチャ要求を続行します。この要求には、エンドポイントで検出されたすべてのセキュリティおよびパッチ管理製品に関する情報が含まれます。

5. PSNは、要求およびセッション属性の情報を使用して、適切なポスチャポリシーに一致させます。この時点でファントムセッションには属性がないため、照合するポリシーがありません。この場合、ポスチャポリシーが一致しない場合のデフォルトのISE動作であるため、PSNは準拠していることをエンドポイントに応答します。

注：ファントムセッション属性から選択可能な汎用ポリシーがある場合は、手順6に進みます。

6. PSNは選択されたポスチャポリシーをエージェントに返します。

注：ポリシーを選択できない場合、PSNは準拠ステータスを返します。

7.エージェントは、成功または失敗した各ポリシー/要件のステータスを返します。

8. ISEでレポート評価が行われ、セッションステータスが準拠に変更されます。

注：ファントムセッションが原因で発生したポスチャの問題の場合、ISE管理者は、ポスチャCOAが失敗していることに気づく可能性があります。このような場合、COA要求が間違ったPSNから間違ったセッションIDに対して実行されます。

新しい認証の試行時に検出プロセスが開始されない

検出プロセスをトリガーするためにエンドポイントで限定された量のイベントを監視するように設計されたISEポスチャモジュール。検出をトリガーするイベントのリスト：

- ISEポスチャモジュールの初期インストール。

- ユーザログイン。

- 電源イベント。

- インターフェイスのステータス変更。

- スリープ後にOSが再開します。

- デフォルトゲートウェイ(DG)の変更。

- ポスチャ再評価(PRA)の失敗。Cisco Bug ID CSCvo69557を参照してください。

新しいdot1x認証、PCロック解除、IPアドレスの変更がISEポスチャモジュールで検出されない。

ISEポスチャモジュールは、次のシナリオでは新しい認証または再認証の試みを検出できません（ISEポスチャモジュールは新しい認証または再認証の試みを検出できません）。

- 再認証は異なるPSNにヒットします（LBの決定または元のPSNの問題が原因）。

- NADは再認証時に新しいセッションIDを生成します。

別のPSNでの再認証

元のPSNの停止が原因で発生した、別のPSNでの再認証の例。ロードバランサを使用するシナリオも非常によく似ています。LBの場合、スティッキネスタイマーの期限切れの結果として、別のPSNに対する再認証が行われます。

1. PSN1での初期認証。

2. PSN1セッションキャッシュに作成されたセッションABC。

3. PSN1で実行されるポスチャ評価。

4.セッションABSポスチャステータスがCompliantに移行します。

5.ポスチャステータスの変更によってトリガーされるCOAにより、エンドポイントの再認証が行われ、次のアクセスレベルが適用されます。

6. PSN1が使用できなくなります。

7.セッションABCの再認証がPSN2にヒットします。

8.セッションはPSN2ポスチャステータスの新しいセッションであるため、そのセッションはPendingになります。

PSNによってセッションに割り当てられる初期ポスチャステータス：

注:State-machineでは、ポスチャステータスの初期選択だけが説明されています。最初に不明としてマークされた各セッションは、後でISEポスチャモジュールから受信したレポート評価に基づいて準拠または非準拠になる可能性があります。

再認証時にNADが新しいセッションIDを生成する

これは、次の2つの最も一般的なシナリオで発生する可能性があります。

- ISE側で再認証が正しく設定されていません。この問題に対するソリューションは、このドキュメントの後半で説明します。

- NAD側の誤動作：通常、NADは再認証試行中に同じセッションIDを保持します。NADが再認証時にセッションIDを変更したことが判明した場合、これは潜在的にバグのある動作であり、NAD自体で調査する必要があります。

新しいセッションIDは、他のいくつかのコーナーケースのシナリオで生成できます。たとえば、場合によっては、ワイヤレスローミングが原因である可能性があります。ここで重要なことは、ポスチャリースが設定されない限り、ISE PSNは常に新しいセッションをポスチャPending状態にすることです。ポスチャリースについては、このドキュメントの後半で説明します。

古いセッションまたはファントムセッションが原因で問題が発生した時期を簡単に特定する方法

AnyConnectがリダイレクト状態にある間に、古い/ファントムセッションが原因でコンプライアンスを示しているかどうかを確認するには、問題のある状態にあるエンドポイントにアクセスする必要があります。

1. システムスキャンの詳細を調べます。

1. AnyConnect UIの歯車アイコンを押します。

2.新しいウィンドウで、 [System Scan] （システムスキャン）タブに移動し、 [Statistics] （統計）サブタブを開きます

ここでは、次の2つの要素に注意してください。

- Latest Scan Start Time（最新のスキャン開始時間）：このタイムスタンプは、問題が検出された時刻に近い必要があります。

- ポリシーサーバ：このフィールドは、エンドポイントのポスチャ評価を行ったポリシーサーバの名前を示しました。ここからのFQDNは、リダイレクトURLからのFQDN（リダイレクトベースポスチャの場合）、または最後の認証の試行から取得されたPSN名（リダイレクトレスポスチャの場合）と比較する必要があります。

2. システムスキャン統計情報のポリシーサーバFQDNを、エンドポイントの認証を行ったノード名と比較します。

この例では、名前が一致していません。これは、ciscolive-ise2という名前のPSNがこのエンドポイントに対して古いセッションまたはファントムセッションを保持していることを示しています。

このデモでは、問題の特定に必要な手順の記録を示します。

古い/ファントムセッションの高度なトラブルシューティング

前述の例では、古いセッションまたはファントムセッションの問題と、開始されなかった検出プロセスの問題を区別しています。同時に、問題を引き起こした実際のセッションを特定して、古いセッションまたはファントムセッションの問題になる正確な状況を把握する必要があります。

一部のシナリオでは、古いセッションやファントムセッションを回避できない場合があります。ベストプラクティスの一部が実装されていないため、環境に古いセッションやファントムセッションが作成されていないことを確認する必要があります。

DARTバンドルの収集

問題を再現しているエンドポイントから取得したDARTバンドルを分析します。

- 重要なログだけをDARTに保存します。問題が再発する前に、ログをクリアすることを推奨します。

これを実現するには、DARTバンドル・ユーティリティを管理者として起動し、ログのクリーンアップを実行する必要があります。

1. Windowsで、「Start」に移動し、「DART」と入力して右クリックし、「管理者として実行」を選択します。

2. ウィザードの最初の画面で[次へ]を押します

3. 次のウィザード画面で、[すべてのログをクリア]を押します

4. 問題が再現された後、ここからDARTを収集できます。Nextを押します。

DARTバンドルの分析

DARTバンドルが収集された後、アーカイブを解除して、Cisco AnyConnect ISE Posture ModuleフォルダにあるAnyConnect_ISEPosture.txtファイルに注目する必要があります。このファイルには、ディスカバリ関連のすべてのイベントが含まれています。

1.トラブルシューティングを開始し、検出を再開する瞬間をすべて特定します。検索するキーワードは、Restarting DiscoveryまたはHTTP Discoveryです。 ここで、問題が発生した瞬間に検出が再開された行に移動します。

2.ディスカバリの再起動後に、MNT段階ターゲットをプローブしていないという内容の行が数行表示されます。これは、ステージ1のディスカバリ開始を示しています。

通常、PSN FQDNは非常に似ており、違いを見分けるのが困難なため、ConnectionData.xml（認証ステータスのターゲット）から取得した以前に接続されたPSNを異なる色で強調表示する必要がある場合は、すべてのリダイレクトベースのプローブを同じ色で強調表示することを推奨します。

3.ログファイルを読み取り、プローブごとの結果を確認します。 古い/ファントムセッションが原因で発生した問題の場合はすでに述べたように、すべてのリダイレクトベースのプローブは失敗する必要があります。次に、失敗したプローブの例を示します。

4.ステージ1またはステージ2のディスカバリ再起動後にファイルのどこかに、1つ以上のPSNからの正常な応答が表示されます。

5.数行後に、キーワードMSG_NS_SWISS_NEW_SESSIONを含む行があります。 この行には、セッションルックアップの結果としてPSNによって選択された実際のセッションIDが含まれています。このセッションIDを使用してISEの詳細な調査を行い、このセッションが期限切れまたはファントムになる仕組みを調べます。

ISEログの調査

clientwebappコンポーネントがDEBUGに対して有効になっているguest.logでは、Stale/Phantomセッションで応答するPSNを確認できます。

PSNはISEポスチャエージェントから要求を取得します。これは、User-Agentの値が原因でAnyConnectからの要求であることが確認できます。

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

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

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

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

この要求には、IPアドレスとMACアドレスの配列が含まれています。この特定の例では、各配列は1つの値だけを保持します。また、ログには、要求のセッションIDがnullであることが示されます。これは、リダイレクトに基づかないプローブからの要求であることを示します。

後で、配列の値を使用してセッションIDを検索する方法を確認できます。

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

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

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

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

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

キーワードSent http responseの行の後に、実際の応答の内容が表示されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ISEレポートの調査

古い/ファントムセッションのIDがわかったら、RADIUSアカウンティングレポートを調査して、このセッションが古い/ファントムになった原因を詳しく調べることができます。

- [操作] > [レポート] > [エンドポイントとユーザ] > [RADIUSアカウンティング]レポートに移動し、このレポートを7日間実行します。ユーザはフィルタキーとしてエンドポイントIDを使用します。

ciscolive-ise2で古いセッションの残り時間を示すレポートの例：

1. セッションのアカウンティングの開始は、PSN ciscolive-ise2に到達しました

2. セッションの中間更新が同じPSNで処理されました。

3. 問題のあるセッションIDのアカウンティング停止メッセージが異なるPSN(ciscolive-ise1)に送信されました。

検出の再開がないことが原因で問題が発生した時期をすばやく特定する方法

前の問題と同じロジックが適用されます。唯一の違いは、最新のスキャン開始時間に集中する必要があることです。このタイプの問題では、最後のスキャンのタイムスタンプは過去のものです。

通常、エンドユーザが問題を検出すると、以前に発生したスキャンが表示されます。ISE Radiusライブログに、問題のあるエンドポイントからの最近の認証試行が記録されます。

このデモでは、問題の特定に必要な手順の記録を示します。

高度なトラブルシューティング：検出の再起動がない場合

ここでのアプローチは、「古い/ファントムセッションの高度なトラブルシューティング」セクションに非常によく似ています。 主なトラブルシューティング要素は、DARTバンドルの調査です。DARTバンドル内で、前の問題で表示されているような検出の再開を検索し、問題が報告された時点で検出の再開がなかったことを確認できます。

ISE側では、PSN間でフェールオーバーが発生したか、またはNADによって新しいセッションIDが生成されたことを確認するために、Radiusライブログ/RADIUS認証レポートに注目します。

解決方法

従来のアプローチ：問題の回避

従来、このドキュメントで説明されている問題を解決できる機能はISEにはありませんでした。そのため、唯一の方法は、ネットワークに実装されている一連のベストプラクティスに依存し、ISE側のリスクを最小限に抑えることでした。

ISE導入における古いセッションやファントムセッションの数を最小限に抑えるベストプラクティス

可能な場合は常にリダイレクトベースのポスチャを実装する

この推奨事項に対する一般的な反論は、OSまたはブラウザにポップアップが表示され、バックグラウンドのAnyConnect ISEポスチャモジュールが評価プロセスを実行している間のリダイレクトを示すため、ユーザエクスペリエンスが低下することです。

この解決策として、ISEポスチャモジュール検出プローブだけをリダイレクトし、他のすべてのトラフィックを選択的に許可することができます。

HTTP要求のみを検出ホスト（この例では10.1.1.1）およびenroll.cisco.com(172.16.1.80)にリダイレクトするように設計されたリダイレクトACLの例を示します。

ip access-list extended REDIRECT-DH-ENROLL

permit tcp any host 10.1.1.1 eq www

permit tcp any host 172.16.1.80

deny   ip any any

許容レベルのセキュリティを維持するために、このようなリダイレクトACLをISEから割り当てられたDACLと組み合わせることができます。

保留中の状態では、エンドポイントが認証されたPSNへの接続のみが許可される

このアプローチは、urlリダイレクションがサポートされていない環境（サードパーティのNADを使用した実装など）で役立ちます。

解決策として、複数のPosturePending認可ポリシー（PSNごとに1つ）を実装する必要があります。各ポリシーには、認証が行われたPSNの名前が条件の1つとして含まれている必要があります。各ポリシーに割り当てられた認可プロファイルでは、認証が発生したノードを除くすべてのPSNへのアクセスをブロックする必要があります。

2ノード展開の認証ポリシーを作成します。

1. PSN1のポスチャ保留ポリシー。

2.ポリシーで条件として使用されるPSN1名。

3. PSN1以外のすべてのPSNへのアクセスをブロックするACLを持つ認可プロファイル。

4. PSN2のポスチャ保留ポリシー。

5.ポリシーの条件として使用されるPSN2名。

6. PSN2以外のすべてのPSNへのアクセスをブロックするACLを持つ認可プロファイル。

7.ポスチャ「準拠」認証ポリシー。

図は、このアプローチがどのように機能するかを説明しています。

1.認証がPSN1にヒットします。

2.構成された承認ポリシーの結果、PSN1は、PSN1以外のすべてのノードへのアクセスをブロックする承認プロファイルを割り当てます。

3. AnyConnect ISEポスチャモジュールが検出プロセスを再起動します。

4.先に割り当てられたACLのように、NADによってブロックされたPSN2をプローブします。

5. NADで割り当てられたACLによって許可されたPSN1へのプローブ。

ロードバランサのベストプラクティス

- Calling-Station-IDをスティッキーキーとして使用し、認証とアカウンティングのためにLBのスティッキ性を有効にしました。ISEのLBベストプラクティスの詳細については、こちらを参照してください。

- PCがスリープ状態になる瞬間（8時間ではなく10時間など）をカバーするには、平均労働時間よりも長いスティッキネスタイマーを使用します。

- 再認証が実装されている場合は、再認証タイマーをスティッキネスタイマーよりも少し低く設定します（たとえば、スティッキネスタイマーが10時間設定されている場合は8時間）。これにより、再認証によってスティッキ性間隔が確実に延長されます。

VPN上のポスチャの使用例

- accounting-interim update intervalがvpn-session-timeout以上であることを確認します。これにより、長時間のVPNセッションでのPSN間のアカウンティングフラッピングから保護されます。

この例では、20時間に設定された暫定アカウンティング更新間隔を示します。これにより、エンドポイントに割り当てられたIPアドレスを伝送する最初の暫定アップデートが妨げられることはありません。

aaa-server ISE protocol radius

interim-accounting-update periodic 20

group-policy SSL-VPN attributes

vpn-idle-timeout 1200

vpn-session-timeout 1200

ISEポスチャモジュールの検出が再起動しないことによる影響を最小限に抑えるために、ベストプラクティスを実装できます

ポスチャリースの有効化

これは、定義された期間（1 ～ 365日）にエンドポイントを準拠としてマークするISEの機能です。ポスチャリース値はエンドポイント属性で、ISE DBに保存されることを意味します。ポスチャリースを含むすべてのエンドポイント属性は、ISE導入のすべてのノード間で複製されます。

PSNがエンドポイントポスチャリースの新しいセッションを取得すると、そのセッションをすぐに準拠としてマークできます。

この決定を行うために、PSNは3つの値を使用します。これらの値は次のとおりです。

- ISE設定でポスチャリースに対して定義された日数： Administration > System > Posture > General Settingsに移動します。

- PostureExpiry属性の値 – これはエポックタイムスタンプを含む実際のエンドポイント属性です。 PostureExpiryの値は、ISE管理者がポスチャリースを有効にした後、エンドポイントに対して最初に成功したポスチャ試行の際に最初に入力されます。この値は、リースの満了後に発生する次回のポスチャ試行の成功時に更新されます。

PostureExpiryは、ポーズ設定されたエンドポイントの1つが開かれている間に、Context Visibility > Endpointsで確認できます。

この値は、人間が判読可能なタイムスタンプに変換できます(https://www.epochconverter.com/など)。

- 新しい認証が行われる時点のPSNシステム時刻

ポスチャリースを使用したエンドポイントの認証がPSNに到達すると、PostureExpiryとシステム日付を使用して、最後に成功したポスチャチェックから経過した日数を取得します。結果値が設定で定義されたポスチャリース間隔内である場合、セッションは準拠ステータスを取得します。結果値がリース値より大きい場合、セッションのステータスはUnknownになります。これにより、ポスチャが再度実行され、新しいPostureExpiry値を保存できるようになります。

図は、フェールオーバーが発生するプロセスを示しています。

1.初期認証はPSN1で行われます。

2.セッション・キャッシュ内に作成されたセッションABC。

3.ポスチャ評価が行われます。

4.セッション・ステータスがCompliantに変更される

5.ポスチャステータスの変更によってトリガーされるCOAにより、エンドポイントの再認証が行われ、次のアクセスレベルが適用されます。

6.エンドポイントに保存されたPostureExpiry値。

7.展開全体でエンドポイントデータが複製されます。

8.次の認証はPSN2にヒットします。

9. PSN2は、エンドポイントが有効なポスチャリース内にあるかどうかを確認します。

11.セッションが準拠としてセッションキャッシュに追加されました。

12.有効なリースのため、セッションはポスチャステータスCompliantで作成されました。

再認証の実装

再認証時の接続の維持でRADIUS-Requestが選択された状態で、常に再認証タイマーをISEからプッシュします。 この設定により、再認証時にNADが同じセッションIDを維持するようになります。

を参照。

ロードバランサを使用する環境

「古い/幻のセッション」セクションで説明したのと同じ一連のベストプラクティスを実装できます。

保留中の状態と準拠状態に対して異なるサブネットを使用できる

ネットワーク設計で、異なるサブネットのPending状態とCompliant状態を使用できる場合、このアプローチによって、ポスチャステータスのすべての変更がデフォルトゲートウェイの変更につながることが保証されます。

再認証タイマーと同じ間隔で使用されるポスチャアセスメント

ポスチャアセスメントは、再認証タイマーと同じ間隔で有効にできます。このような場合、元のPSNが使用できなくなると、PRA障害によって検出プロセスが再起動されます。

最新のアプローチ：ポスチャ状態の共有

ISE 2.6用のCisco Bug ID CSCvi35647パッチ6で説明されている実装済みの機能拡張の一部として、ISE導入環境のすべてのノード間でセッションポスチャステータスを共有する機能を実装する新機能が追加されました。この機能拡張は、ISE 2.7パッチ2およびISE 3.0の将来のリリースに統合されます。

この新機能は、ISE 2.6で導入されたLight Session Directory(LSD)メカニズムに基づいています。新しいバージョンでは、この機能はLight Data Distribution(LDD)Radius Session Directoryに名前が変更されました。  Light Data Distribution(LDD)はデフォルトで有効になっており、ISEノード間で制限されたセッションコンテキストを共有できます。 PSN間での完全なセッションコンテキストレプリケーションは存在せず、各セッションで共有される属性の量は限られています。

Light Session Directoryの背後にある主な考え方は、展開内のノードの1つが現在のセッションオーナーを特定する必要があるときに、MNTに対してリソースを大量に消費するAPI呼び出しを実行する必要性を排除することです。ほとんどの場合、COAフローの開始時に所有者のルックアップが必要になります。LDDを使用すると、すべてのPSNはローカルRADIUSセッションディレクトリキャッシュからセッションの実際の所有者を見つけることができます。

Light Data Distribution Architecture（光データ分散アーキテクチャ）

この機能には、次の要素が含まれています。

- RADIUSセッションディレクトリ(RSD)キャッシュ：このキャッシュはすべてのISEノードに存在し、ISEの導入で提示されたすべてのアクティブセッションを格納します。各セッションのキャッシュ内のアトリビュートの量は限られています。 各セッションのRadiusセッションディレクトリに保存される属性の例を次に示します。

- Session ID.

- エンドポイントMAC。

- CallingStationID。

- エンドポイントIP。

- PSN IP：認証が行われたPSN。

- PSN FQDN：上記と同じです。

- nas-ip-address.

- NAS-IPv6-Addressです。

- 状態 – 認証済み、開始済み、停止中

- RabbitMQ交換：パブリッシャ、関連するキュー、およびコンシューマがISE導入のすべてのノードに表示される交換が形成されます。これにより、すべてのISEノード間で完全メッシュトポロジが形成されます。

- パブリッシャ：ここで、RADIUSセッションディレクトリはパブリッシャを表します。PSNによって処理された新しい認証が成功すると、新しいセッションがPSNセッションキャッシュに作成されます。このセッションでは、限られた属性セットがRadiusセッションディレクトリに配置されます。

- Consumer：他のすべてのノードでは、Radiusセッションディレクトリはコンシューマを表します。

注：RabbitMQの一般的な用語とアーキテクチャは、このドキュメントの対象範囲外です。

図は、COAフローがRSDキャッシュでどのように動作するかを示しています。

1.初期認証はPSN1で行われます。

2.セッション・キャッシュ内に作成されたセッションABC。

3.必要な属性がRSDに保存されます。

4. RabbitMQを介して他のすべてのISEノードとセッションを共有します。

5.すべてのISEノードのRSDキャッシュにセッションが作成されます。

6.新しいプロファイルデータがPSN2に到着します。

7.エンドポイントがプロファイリングされ、COAの実行を必要とする変更の場合は、PSN2が次のステップに進みます。

8. COAを実行するためにRSDキャッシュに送信された内部API呼び出し。

9.プロキシCOAメッセージの準備に使用されるRSDキャッシュからのデータ（ISEノードから別のノードに送信されるCOA、宛先ノードがNADにCAO要求を返すために使用できるすべての詳細が含まれます）。 COAメッセージは、最初に内部でPRRTランタイム（ISE内の実際のAAAサーバ）に転送されます。

10. PSN2はCOAメッセージをPSN1に送信します。

11. PSN1がCOAメッセージをNADに送信します。

ISEでLDDを介した通信のトラブルシューティングを行うには、Light Session DirectorコンポーネントをDEBUGに設定します。

元のPSNでのセッションの作成と公開のためのlsd.logファイルからのデバッグメッセージの例：

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

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

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

他のすべてのISEノードで、セッションがどのように消費されたかを確認できます。

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

RSDでのポスチャステータスの共有

根本的な原因が古い/ファントムセッション、または元のセッションIDを持つ別のPSNでの再認証でディスカバリの再起動がトリガーされなかった場合に、ノード間でポスチャステータスを共有すると、「AnyConnect ISEポスチャモジュールは準拠を示すが、ISEのセッションステータスは保留中である」などの症状が発生する問題が解決します。セッションがコンプライアンスに適合するとすぐに、この情報がセッションRSDに配置され、後で展開内のすべてのPSNで使用できるようになります。

説明した機能では解決できないその他のコーナーケースが残っています。たとえば、NADが同じPSNでセッションIDが異なる再認証を実行するシナリオがあります。このようなシナリオは、このドキュメントで説明するベストプラクティスを使用して処理できます。

図は、ポスチャステータス共有のテストに使用されるトポロジを示しています。

RSDでのポスチャステータス共有：古い/ファントムセッション

古いセッションを作成するために、最初にskuchere-ise26-1で認証が実行され、その後skuchere-ise26-3にアカウンティングを送信するようにNADが再設定されました。1つのアカウンティングメッセージが誤ったPSNに転送された後、NADが再設定され、アカウンティングがskuchere-ise26-1に戻されます。

図は、skuchere-ise26-3上のファントムセッションの存在を証明するアカウンティングレポートを示します。

1. skuchere-ise26-1で処理されるAccounting-Startメッセージ。

2. skuchere-ise26-3で処理された同一セッションのInterim Accounting-Update。

3.セッションは後にskuchere-ise26-1で終了します。

しばらくすると、エンドポイントは再びネットワークに接続しますが、リダイレクションは機能しなくなります。PSN - skuchere-ise26-3のguest.logでは、client-webappコンポーネントがイネーブルになっている次のログメッセージがDEBUGで表示されます。

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

PSNは、エンドポイントの古い/ファントムセッションを保持していることを検出すると、ISEポスチャモジュールに応答しません。これにより、最新の認証が発生したPSNから正しい応答を取得できます。

セッションルックアップ時に発生する古い/ファントムセッションの問題の解決策として、PSNはRSD内のエンドポイントに対する新しいセッションの存在を確認します。RSDがローカルセッションキャッシュ内のPSNのセッションIDと異なるセッションIDを含む場合、セッションキャッシュ内に提示されたセッションは失効していると見なされます。

RSDでのポスチャステータス共有 – PSN間のフェールオーバー

このシナリオを再現するために、準拠状態のエンドポイントに割り当てられた認証プロファイルで短い再認証タイマーが有効になっています。その後、NADは別のPSN(skuchere-ise26-3)に認証とアカウンティングを送信するように再設定されました。再認証タイマーの期限が切れると、同じセッションが異なるPSN上で非認証になりました。

図は、skuchere-ise26-1からskuchere-ise26-3へのsaneセッションのフェールオーバーを示す認証レポートを示しています。

1. skuchere-ise26-1で認証が行われ、リダイレクションを伴う許可プロファイルが割り当てられます。

2.ポスチャ評価が成功した後のCOA

3.準拠状態の許可プロファイルが割り当てられたときの次の認証。

4.認証は異なるPSNにヒットしますが、準拠した状態の認証プロファイルは引き続き取得されます。

epm-pipおよびnsf-sessionコンポーネントがDEBUGに対して有効にされたise-psc.logでのフェールオーバーの後、セッションは新しいPSNで準拠ステータスを取得します。

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

元の問題は、ポスチャステータス選択プロセスにロジックが追加されたことによって解決されました。図は、変更内容（赤で強調表示された変更）を示しています。