概要
このドキュメントでは、Identity Services Engine(ISE)2.2 で導入された [Maximum Sessions] 機能の設定方法について説明します。 [Maximum Sessions] 機能を使用すると、ユーザごとまたは ID グループごとにライブ セッションを制御および実行することができます。 このドキュメントは RADIUS セッション向けですが、TACACS セッションの場合にも使用できます。
前提条件
要件
次の項目に関する知識が推奨されます。
- RADIUS プロトコル
- ワイヤレス LAN コントローラ(WLC)での 802.1x の構成
- ISE とそのペルソナ(権限)
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づくものです。
- Cisco Identity Service Engine バージョン 2.2
- ワイヤレス LAN コントローラ 8.0.100.0
- Cisco Catalyst スイッチ 3750 15.2(3) E2
- Windows 7 マシン
- 6.0.1 が実行されている Android スマートフォン
- 5.0 が実行されている Android スマートフォン
- Apple iPad iOS 9.1
本書の情報は、特定のラボ環境にあるデバイスに基づいて作成されたものです。 このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。 稼働中のネットワークで作業を行う場合、コマンドの影響について十分に理解したうえで作業してください。
背景説明
ISE バージョン 2.2 では、次の同時セッションに基づいて適用ポリシーを検出し、構築することができます。
- ユーザ アイデンティティ:特定ユーザあたりのセッション数を制限する
- アイデンティティ グループ:特定グループあたりのセッション数を制限する
- グループ内のユーザ:特定のグループに属するユーザあたりのセッション数を制限する
同時セッションの実行およびカウントは、一意であり、ポリシー サービス ノード(PSN)で管理されます。 セッション数に関しては、PSN 間で同期されません。 同時セッション機能はランタイム プロセスで実装され、データはメモリ内にのみ保存されます。 PSN を再起動すると、MaxSessions カウンタがリセットされます。
ユーザ セッション数では、ユーザ名や使用されているネットワーク アクセス デバイスとは関係なく、大文字と小文字が区別されません(ただし、同じ PSN ノードを使用している場合に限ります)。
ネットワーク図

シナリオ
ユーザあたりの最大セッション数
設定
次の図のように、[Administration] > [System] > [Settings] > [Max Sessions] を選択します。

この機能を有効にするには、[Unlimited session per user] チェックボックスをオフにします(デフォルトでオンに設定されています)。 [Maximum per user Sessions] フィールドに、各 PSN で特定のユーザが実行できるセッション数を設定します。 この例では、2 に設定されています。
[External Identity Sources] のユーザ(Active Directory など)は、この構成の影響を受けます。
例
Bob は、ISE サーバに接続されている Active Directory ドメインのアカウントのユーザ名です。 [User Maximum Sessions] は値 2 に設定されています。つまり、同一ユーザがこの数を超える数(PSN あたり)のセッションを実行することはできません。
ユーザ Bob は、図のように、同じクレデンシャルを使用して Android スマートフォンと Windows マシンに接続します。

セッション最大数を超えていないため、両方のセッションを実行できます。 これは、次の図の詳細な RADIUS ライブ ログに示されています。


[22081 Max sessions policy passed] のステップは、[Maximum Concurrent Session] チェックが成功したことを示します。
同じクレデンシャルを使用して、別のデバイスへの 3 回目の接続が行われると、Bob は PermitAccess を受信しますが、オーセンティケータには Access-Reject が送信されます。




RADIUS ライブ ログでは、正しい認証プロファイルに該当することを確認できますが、セッションは許可されていません。 ライブ セッションを確認するには、[Operations] > [Radius] > [Live Sessions] を選択します。

この場合、両方のセッションのステータスが [Started] になります。これは、[Accounting Start] がセッションの ISE に到達したことを示します。 [Max Session] が正常に機能するためには、[Radius Accounting] を受け取る必要があります。ステータス [Authenticated](セッションは許可されたがアカウンティングは許可されていない)はセッション カウント中には考慮されません。

グループあたりの最大セッション数
設定
[Administration] > [System] > [Settings] > [Max Sessions] > [Group] を選択します。

この設定では、内部アイデンティティ グループ GroupTest2 の最大セッション数である 2 つのセッションが実行されます。 グループあたりの実行の設定は、[Internal Groups] の場合にのみ行うことができます。
例
Alice、Pablo、Peter は [Internal ISE User Store] のユーザであり、全員が GroupTest2 という名前のグループのメンバーです。 この例の設定に従い、セッション最大数はグループ メンバーシップに基づいて 2 に設定されます。

Pablo と Peter は GroupTest2 という名前の [Internal Group] のクレデンシャルを使用してネットワークに接続します。

Alice が接続しようとすると、グループごとの MaxSessions の制限が適用されます。


Peter と Pablo だけでグループの [Max Session] に達しているため、Alice はネットワークに接続できません。

コーナーの事例
ユーザの [Maximum Sessions] が設定されている場合は、ユーザとグループの両方の機能がそれぞれ独立して機能します。 この例では、ユーザの [Max Sessions] が 1 に設定され、グループの [Maximum Session] が 2 に設定されています。

Peter は、グループの [Maximum Session](2 セッション)に基づいて許可される必要がありますが、ユーザの [Max Sessions] 設定(1 セッション)が原因でネットワークに接続できません。

ユーザが複数のグループに同時に所属し、グループの [Max Sessions] が設定されている場合、接続されると、ユーザが所属するすべてのグループについて、グループ キャッシュの [Max Session] のカウンタの値が大きくなります。
この例では、Alice と Pablo は GroupTest1 と GroupTest2 の両方のメンバーです。 Veronica は GroupTest1 にのみ属し、Peter は GroupTest2 にのみ属しています。

グループ GroupTest1 および GroupTest2 の [Max Session] は 2 に設定されています。

Alice と Pablo がネットワークに接続されると、両方のグループのセッション最大数を超えます。 グループの [Max Session] が最大値に達したため、GroupTest1 にのみ属する Veronica と GroupTest2 のメンバーである Peter は接続できません。


グループ内のユーザの最大セッション数
設定
[Administration] > [System] > [Settings] > [Max Sessions] > [Group] を選択します。

この設定では、内部アイデンティティ グループ GroupTest2 の最大セッション数である 2 つのセッションが実行されます。
例
Alice は GroupTest2 のメンバーです。

この機能は、ユーザの [Maximum Session] と同様に機能します。つまり、ISE が、指定した内部グループ内のユーザが実行できる同時セッション数を制限します。 この設定は、設定したグループに属するユーザのみに影響します。
Alice は、GroupTest2 のメンバーとして 2 つの同時セッションを実行できます。3 番目のデバイスに接続した時点で、ISE はグループ内のユーザの [Maximum Session] を超過したことに基づいて、PermitAccess および Access-Reject を返します。

詳細な RADIUS ライブ ログ:


[User] の [Maximum Sessions] も有効になっている場合は、両方の機能がそれぞれ独立して機能します。 ユーザ Alice が GroupTest2 グループのメンバーであり、グループ内のユーザの [Maximum Session] が 2 に設定されているのと同時に、ユーザごとに 1 つのセッションしか許可しないようにユーザの [Max Sessions] が設定されている場合は、グループ内のユーザの [Max Session] よりユーザの [Max Session] が優先されます。

Alice が 2 番目のデバイスに接続しようとすると、ユーザの [Max Session] を超過していることに基づいて、ISE は Access-Reject を返します。

拒否の理由は、詳細な RADIUS ライブ ログで確認することができます。 ユーザ [Max Sessions] が原因で拒否されたことが分かります。


グループの最大セッション数とそのグループ内のユーザの最大セッション数
設定
[Administration] > [System] > [Settings] > [Max Sessions] > [Group] を選択します。

この設定では、内部アイデンティティ グループ GroupTest2 の最大セッション数が 3、そのグループ内のユーザの最大セッション数が 2 に設定されます。
例
Alice と Pablo は GroupTest2 のメンバーです。 この例の設定では、GroupTest2 に最大 3 つのセッションが許可されています。 ISE は、このグループ内の単一ユーザが最大 2 つのセッションを実行できるようにします。

Alice は 2 つのデバイスを経由して接続します。どちらのエンドポイントもネットワークに接続されています。

Alice が 3 番目のデバイスを経由して接続しようとすると、グループ内のユーザに設定されている [Maximum Session] を超過するため、アクセスが拒否されます。


Pablo がネットワークにアクセスしようとすると、GroupTest2 グループの [Max Session] にはまだ達していないため、アクセスすることができます。

Pablo が 2 番目のデバイスからネットワークにアクセスしようとすると、グループに設定されている [Max Session] を超過するため、アクセスできません(ただし Pablo は 1 つのセッションしか実行できません)。


前述の例のように、ユーザの [Maximum Sessions] を有効にすると、この機能が独立して動作します。
カウンタ時間制限
設定
[Administration] > [System] > [Settings] > [Max Sessions] > [Counter Time Limit] を選択します。

[Counter Time Limit] は、[Maximum Session] キャッシュに関してセッションをカウントする時間間隔を指定する機能です。 この機能を使用すると、PSN がカウンタからセッションを削除し、新しいセッションを許可するまでの時間を指定できます。
この機能を有効にするには、[Unlimited - no time limit] チェックボックスをオフにする必要があります。このチェックボックスはデフォルトでオンに設定されています。 編集可能なフィールドでは、MaxSession のカウンタでセッションをカウントする時間を設定できます。
設定した時間が経過しても、セッションは、セッション データベースから切断されたり削除されたりしないことに注意してください。 設定した時間が経過した後に、[Terminate Chane of Authorization (CoA)] が実行されることはありません。
例
ユーザの [Max Session] が、ユーザに 1 つのセッションのみを許可するように設定されています。

Alice は 11:00:34 に iPad からネットワークに接続し、2 回目の認証が 11:07 に実行され、ユーザの [Maximum Session] を超過しているにもかかわらず、アクセスすることができます。 [Counter Time limit] の設定に基づき、両方の認証が成功します。

Alice は、最後に接続が成功する 5 分前に別のデバイスへ接続しようとしましたが、ISE が認証を拒否しました。

最後の認証から 5 分後には、Alice は別のデバイスからネットワークに接続できています。

ライブ セッションでは、[Started] 状態の 3 つのセッションすべてを確認することができます。

[Maximum Session] 機能とゲスト アクセス
中央 Web 認証
ユーザの [Maximum Session] 機能でセッション数を 1 に設定しても、引き続き、両方のセッションで Guest1 アカウントを使用して接続できます。

ゲスト アクセスを制限するには、[Guest Type] 設定で [Maximum simultaneous logins] を指定します。
[Work Centers] > [Guest Access] > [Portal & Components] > [Guest Types] を選択し、図のように [Maximum simultaneous logins] オプションを変更します。

ローカル Web 認証
ユーザの [Maximum Session] でセッション数を 1 に設定すると、接続できません。

RADIUS ライブ ログに示されているように、Guest1 はポータル認証に関して必ず正しく認証されます。WLC が Guest1 の 2 番目のセッションを使用して RADIUS 要求を送信すると、ユーザに設定されている上限を超過していることから、ISE はアクセスを拒否します。

トラブルシューティング
RADIUS ライブ ログ
詳細な RADIUS レポートは、MaxSession 機能のトラブルシューティングの開始点です。

この失敗の理由としては、このセッションまたはユーザにグローバルに設定されているユーザの [Max Session] を超過していることが示されています(図を参照)。

この失敗の理由として、このセッションまたはユーザに設定されているグループの [Max Sessions] を超過していることが示されています(図を参照)。

この失敗の理由として、このセッションまたはユーザに設定されているグループ ユーザの [Max Sessions] を超過していることが示されています。
MaxSession キャッシュは、[Authorization Profile] が選択された後でチェックされます。
Success:

失敗:

ISE デバッグ
Max Session ログは、prrt-server.log 内にあります。 これらのログを収集するには、図のようにランタイム AAA コンポーネントを DEBUG レベルに設定します([Administration] > [System] > [Logging] > [Debug Log Configuration] > [PSN] を選択します)。

File prrt-server.log を取得するには、[Operations] > [Troubleshoot] > [Download Logs] > [PSN] > [Debug Logs] を選択します。 [Max Session] ログはエンドポイント デバッグでも収集されます([Operations] > [Troubleshoot] > [Diagnostic Tools] > [Genral Tools] > [EndPoint Debug] を選択します)。
ユーザの [Maximum Session] の確認が成功した場合:
2017-01-29 08:33:11,310 INFO [Thread-83][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,INFO ,0x7fe858867700,cntx=0000001335,sesn=pgruszczise22/275051099/8,CPMSessionID=0a3e944f00000e7d588da8a0,user=Bob,CallingStationID=c0-4a-00-14-56-f4,SessionCache::onMaxSessionsAznEvent: current global configuration data: auditSessionTtl=[3600], maxUserSessions=[2],SessionCache.cpp:283
2017-01-29 08:33:11,311 INFO [Thread-83][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,INFO ,0x7fe858867700,cntx=0000001335,sesn=pgruszczise22/275051099/8,CPMSessionID=0a3e944f00000e7d588da8a0,user=Bob,CallingStationID=c0-4a-00-14-56-f4,SessionCache::checkMaxSessions: user=[Bob] not found in cache due to first time authorization,SessionCache.cpp:1025
2017-01-29 08:33:11,311 DEBUG [Thread-83][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,DEBUG,0x7fe858867700,cntx=0000001335,sesn=pgruszczise22/275051099/8,CPMSessionID=0a3e944f00000e7d588da8a0,user=Bob,CallingStationID=c0-4a-00-14-56-f4,SessionCache::onMaxSessionsAznEvent: sessionID=[0a3e944f00000e7d588da8a0]; user=[Bob] - checkMaxSessions passed,SessionCache.cpp:360
2017-01-29 08:33:11,311 INFO [Thread-83][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,INFO ,0x7fe858867700,cntx=0000001335,sesn=pgruszczise22/275051099/8,CPMSessionID=0a3e944f00000e7d588da8a0,user=Bob,CallingStationID=c0-4a-00-14-56-f4,SessionCache::onMaxSessionsAznEvent: create a new session object sessionID=[0a3e944f00000e7d588da8a0]; user=[Bob],SessionCache.cpp:375
ISE は、セッションの Accounting Start を受信した後で、SessionCounter を増分します。
2017-01-29 08:33:11,619 DEBUG [Thread-90][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- Radius,DEBUG,0x7fe858766700,cntx=0000001503,sesn=pgruszczise22/275051099/9,CPMSessionID=0a3e944f00000e7d588da8a0,CallingStationID=c0-4a-00-14-56-f4,FramedIPAddress=10.62.148.141,RADIUS PACKET:: Code=4(AccountingRequest) Identifier=0 Length=279
[1] User-Name - value: [Bob]
[4] NAS-IP-Address - value: [10.62.148.79]
[5] NAS-Port - value: [1]
[8] Framed-IP-Address - value: [10.62.148.141]
[25] Class - value: [****]
[30] Called-Station-ID - value: [80-e0-1d-8b-72-00]
[31] Calling-Station-ID - value: [c0-4a-00-14-56-f4]
[32] NAS-Identifier - value: [WLC7]
[40] Acct-Status-Type - value: [Start]
[44] Acct-Session-Id - value: [588da8a0/c0:4a:00:14:56:f4/3789]
[45] Acct-Authentic - value: [RADIUS]
[55] Event-Timestamp - value: [1485678753]
[61] NAS-Port-Type - value: [Wireless - IEEE 802.11]
[64] Tunnel-Type - value: [(tag=0) VLAN]
[65] Tunnel-Medium-Type - value: [(tag=0) 802]
[81] Tunnel-Private-Group-ID - value: [(tag=0) 481]
[26] cisco-av-pair - value: [audit-session-id=0a3e944f00000e7d588da8a0]
[26] Airespace-Wlan-Id - value: [4] ,RADIUSHandler.cpp:2003
(...)
2017-01-29 08:33:11,654 DEBUG [Thread-83][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,DEBUG,0x7fe858867700,cntx=0000001503,sesn=pgruszczise22/275051099/9,CPMSessionID=0a3e944f00000e7d588da8a0,user=Bob,CallingStationID=c0-4a-00-14-56-f4,FramedIPAddress=10.62.148.141,SessionCache::onAccountingStart: user=[Bob]; sessionID=[0a3e944f00000e7d588da8a0],SessionCache.cpp:537
2017-01-29 08:33:11,655 DEBUG [Thread-83][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,DEBUG,0x7fe858867700,cntx=0000001503,sesn=pgruszczise22/275051099/9,CPMSessionID=0a3e944f00000e7d588da8a0,user=Bob,CallingStationID=c0-4a-00-14-56-f4,FramedIPAddress=10.62.148.141,SessionCache::incrementSessionCounters: user=[Bob] current user session count=[1],SessionCache.cpp:862
ユーザの [Maximum Session] の確認に失敗した場合:
2017-01-29 08:37:00,534 INFO [Thread-75][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,INFO ,0x7fe858a69700,cntx=0000005011,sesn=pgruszczise22/275051099/15,CPMSessionID=0a3e944f00000e7f588da966,user=Bob,CallingStationID=34-ab-37-60-63-88,SessionCache::onMaxSessionsAznEvent: current global configuration data: auditSessionTtl=[3600], maxUserSessions=[2],SessionCache.cpp:283
2017-01-29 08:37:00,535 INFO [Thread-75][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,INFO ,0x7fe858a69700,cntx=0000005011,sesn=pgruszczise22/275051099/15,CPMSessionID=0a3e944f00000e7f588da966,user=Bob,CallingStationID=34-ab-37-60-63-88,SessionCache::checkMaxSessions: user=[Bob] is not authorized because current active user sessions=[2] >= max-user-sessions=[2],SessionCache.cpp:1010
2017-01-29 08:37:00,535 DEBUG [Thread-75][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- SessionCache,DEBUG,0x7fe858a69700,cntx=0000005011,sesn=pgruszczise22/275051099/15,CPMSessionID=0a3e944f00000e7f588da966,user=Bob,CallingStationID=34-ab-37-60-63-88,SessionCache::onMaxSessionsAznEvent: sessionID=[0a3e944f00000e7f588da966]; user=[Bob] - checkMaxSessions failed,SessionCache.cpp:341
2017-01-29 08:37:00,535 DEBUG [Thread-75][] cisco.cpm.prrt.impl.PrRTLoggerImpl -:::::- RadiusAuthorization,DEBUG,0x7fe858a69700,cntx=0000005011,sesn=pgruszczise22/275051099/15,CPMSessionID=0a3e944f00000e7f588da966,user=Bob,CallingStationID=34-ab-37-60-63-88,RadiusAuthorization::onResponseMaxSessionsAznEvent return from SessionCache,RadiusAuthorization.cpp:371