はじめに
このドキュメントでは、Identity Services Engine(ISE)2.2で導入された最大セッション数の機能を設定する方法について説明します。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- 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
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
最大セッション機能を使用すると、ユーザまたはIDグループごとにライブセッションを制御および適用できます。このドキュメントは RADIUS セッション向けですが、TACACS セッションの場合にも使用できます。
ISE バージョン 2.2 では、次の同時セッションに基づいて適用ポリシーを検出し、構築することができます。
- ユーザ アイデンティティ:特定ユーザあたりのセッション数を制限する
- アイデンティティ グループ:特定グループあたりのセッション数を制限する
- グループ内のユーザ:特定のグループに属するユーザあたりのセッション数を制限する
同時セッションの実行およびカウントは、一意であり、ポリシー サービス ノード(PSN)で管理されます。セッション数に関しては、PSN 間で同期されません。コンカレント・セッション機能はランタイム・プロセスで実装され、データはメモリーにのみ格納されます。PSN を再起動すると、MaxSessions カウンタがリセットされます。
ユーザセッション数は、ユーザ名に関しては大文字と小文字が区別されず、使用されているNetwork Access Device(NAD;ネットワークアクセスデバイス)には依存しません(同じPSNノードを使用している場合)。
ネットワーク図
シナリオ
ユーザあたりの最大セッション数
コンフィギュレーション
図に示すように、Administration > System > Settings > Max Sessionsの順に移動します。
この機能を有効にするには、[Unlimited session per user] チェックボックスをオフにします(デフォルトでオンに設定されています)。Maximum per user Sessionsフィールドで、各PSNで特定のユーザが持つことができるセッションの数を設定します。この例では、2 に設定されています。
外部IDソース(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つのセッションが強制されます。グループごとに強制を設定できるのは、内部グループだけです。
例
Alice、Pablo、およびPeterは、内部ISEユーザストアのユーザです。これらはすべて、GroupTest2という名前のグループのメンバーです。この例の設定に従い、セッション最大数はグループ メンバーシップに基づいて 2 に設定されます。
Pablo と Peter は GroupTest2 という名前の [Internal Group] のクレデンシャルを使用してネットワークに接続します。
Alice が接続しようとすると、グループごとの MaxSessions の制限が適用されます。
Peter と Pablo だけでグループの [Max Session] に達しているため、Alice はネットワークに接続できません。
コーナーの事例
User Maximum Sessionsが設定されている場合は、両方の機能が独立して動作します。この例では、ユーザの [Max Sessions] が 1 に設定され、グループの [Maximum Session] が 2 に設定されています。
ピーターはグループの最大セッション(2セッション)に基づいて許可されますが、ユーザの最大セッション設定(1セッション)のために、ネットワークへの接続に失敗します。
ユーザが同時に複数のグループのメンバーであり、グループの最大セッション数がそれらに設定されている場合、接続すると、ISEはユーザが属するすべてのグループのグループキャッシュの最大セッション数のカウンタを増加させます。
この例では、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はグループ内のユーザの最大セッションの超過に基づいて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ライブログで確認できます。最大セッションユーザ数の制限が失敗の理由です。
グループの最大セッション数とそのグループ内のユーザの最大セッション数
設定
[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 Chain of Authorization(CoA)は実行されません。
例
ユーザの [Max Session] が、ユーザに 1 つのセッションのみを許可するように設定されています。
Aliceは11:00:34にIPadを使用してネットワークに接続し、2番目の認証は11:07に行われ、User Maximum Session値を超えていてもアクセスが許可されます。[Counter Time limit] の設定に基づき、両方の認証が成功します。
Aliceは、最後に接続に成功してから5分前に別のデバイスへの接続を試行し、ISEは認証を拒否します。
最後の認証から 5 分後には、Alice は別のデバイスからネットワークに接続できています。
ライブセッションでは、次の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 認証
User Maximum Sessionの下に1つのセッションが設定されていると、接続できません。
Radiusライブログに従って、Guest1はポータル認証に関して常に正しく認証されます。WLCがGuest1に対する2番目のセッションでRADIUS要求を送信すると、ISEはユーザ制限の超過のためにアクセスを拒否します。
トラブルシュート
RADIUS ライブ ログ
Detailed Radius Reportは、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ログは、Endpoint Debugsでも収集されます(Operations > Troubleshoot > Diagnostic Tools > General 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