소개
이 문서에서는 ISE(Identity Services Engine) 2.2에 도입된 최대 세션 기능을 구성하는 방법에 대해 설명합니다.
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- RADIUS 프로토콜
- WLC(Wireless LAN Controller)의 802.1x 컨피그레이션
- ISE 및 해당 페르소나(역할)
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- Cisco Identity Service Engine 버전 2.2
- Wireless LAN Controller 8.0.100.0
- Cisco Catalyst Switch 3750 15.2(3)E2
- Windows 7 시스템
- 6.0.1을 실행하는 Android Phone
- Android Phone 실행 5.0
- Apple iPad iOS 9.1
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
Maximum Sessions(최대 세션) 기능은 사용자 또는 ID 그룹별로 라이브 세션을 제어하고 적용하는 방법을 제공합니다. 이 문서는 RADIUS 세션용이지만 TACACS 세션에도 사용할 수 있습니다.
ISE 버전 2.2는 다음 항목의 동시 세션을 기반으로 시행 정책을 탐지하고 구축할 수 있습니다.
- 사용자 ID - 특정 사용자당 세션 수 제한
- ID 그룹 - 특정 그룹당 세션 수 제한
- User in a Group(그룹의 사용자) - 특정 그룹에 속하는 사용자당 세션 수 제한
동시 세션의 시행 및 수는 각 PSN(Policy Service Node)에서 고유하고 관리합니다. 세션 수 측면에서 PSN 간의 동기화는 없습니다. 동시 세션 기능은 런타임 프로세스에서 구현되며 데이터는 메모리에만 저장됩니다. PSN이 다시 시작되는 경우 MaxSessions 카운터가 재설정됩니다.
사용자 세션 수는 사용자 이름과 관련해서는 대/소문자를 구분하지 않으며, 사용된 네트워크 액세스 디바이스(동일한 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 Phone 및 Windows 시스템에 연결합니다.
최대 세션 제한을 초과하지 않으므로 두 세션이 모두 허용됩니다. 자세한 Radius 라이브 로그를 참조 하십시오. 이미지:
22081 Max sessions policy passed 단계는 Maximum Concurrent Session(최대 동시 세션 수) 검사가 성공했음을 알려줍니다.
다른 디바이스 및 동일한 자격 증명과의 세 번째 연결이 시작되면 Bob은 PermitAccess를 수신하지만 Access-Reject가 인증자에게 전송됩니다.
Radius 라이브 로그에서 올바른 권한 부여 프로파일에 도달했음을 확인할 수 있지만 세션은 허용되지 않습니다. 라이브 세션을 확인하려면 Operations(운영) > Radius > Live Sessions(라이브 세션)로 이동합니다.
이 경우 두 세션 모두 Started 상태가 있으며, 이는 세션에 대한 ISE에 Accounting Start가 도착했음을 나타냅니다. Radius Accounting for Max Session(최대 세션 어카운팅)이 올바르게 작동하려면 받아야 합니다. Authenticated(인증된 세션) 상태는 세션 수 중에 고려되지 않습니다.
그룹에 대한 최대 세션
구성
Administration(관리) > System(시스템) > Settings(설정) > Max Sessions(최대 세션) > Group(그룹)으로 이동합니다.
이 컨피그레이션은 내부 ID 그룹 GroupTest2에 대해 최대 2개의 세션을 적용합니다. 내부 그룹에 대해서만 그룹당 시행을 구성할 수 있습니다.
예
Alice, Pablo, Peter는 Internal ISE User Store의 사용자입니다. 모두 GroupTest2라는 그룹의 멤버입니다. 이 예의 컨피그레이션에 따라 세션의 최대값은 그룹 멤버십을 기준으로 2로 설정됩니다.
Pablo와 Peter는 GroupTest2라는 내부 그룹의 자격 증명을 사용하여 네트워크에 연결합니다.
Alice가 연결을 시도하면 그룹당 MaxSessions 제한이 적용됩니다.
Peter와 Pablo는 최대 세션 그룹 제한을 모두 사용하므로 Alice는 네트워크에 연결할 수 없습니다.
코너 케이스
User Maximum Sessions(사용자 최대 세션)가 구성된 경우 두 기능이 모두 독립적으로 작동합니다. 이 예에서는 User Max Sessions(사용자 최대 세션)가 1로 설정되고 Maximum Session for Group(그룹에 대한 최대 세션)이 2로 설정됩니다.
Peter는 Maximum Session for Group(최대 세션 수 2개)에 따라 허용되지만 User Max Sessions(최대 세션 수 1개) 컨피그레이션 때문에 네트워크에 연결할 수 없습니다.
사용자가 동시에 둘 이상의 그룹에 속한 구성원이고 해당 그룹에 대해 구성된 Max Sessions for Group이 연결된 경우 ISE는 사용자가 속한 모든 그룹의 Max Session for Group cache 카운터를 늘립니다.
이 예제에서 Alice와 Pablo는 GroupTest1과 GroupTest2의 멤버입니다. Veronica는 GroupTest1에만 속하고 Peter는 GroupTest2에만 속합니다.
GroupTest1 및 GroupTest2에 대한 Max Session for Group은 2로 설정됩니다.
Alice와 Pablo가 네트워크에 연결되면 두 그룹의 세션 제한을 초과합니다. GroupTest1 및 Peter에만 속하는 Veronica는 GroupTest2의 구성원인 그룹에 대한 최대 세션 수가 구성된 최대값에 도달했기 때문에 연결할 수 없습니다.
그룹의 사용자에 대한 최대 세션 수
구성
Administration(관리) > System(시스템) > Settings(설정) > Max Sessions(최대 세션) > Group(그룹)으로 이동합니다.
이 컨피그레이션에서는 내부 ID 그룹 GroupTest2에 대해 최대 2개의 세션을 적용합니다.
예
Alice가 GroupTest2의 멤버입니다.
이 기능은 User Maximum Session(사용자 최대 세션)과 비슷하게 작동합니다. ISE는 지정된 내부 그룹 내의 사용자가 가질 수 있는 동시 세션 수를 제한합니다. 이 컨피그레이션은 구성된 그룹에 속하는 사용자만 영향을 받습니다.
Alice는 GroupTest2의 멤버로서 2개의 동시 세션을 가질 수 있습니다. 세 번째 디바이스와 연결되면 ISE는 그룹의 사용자에 대해 초과된 최대 세션을 기반으로 PermitAccess 및 Access-Reject를 반환합니다.
자세한 Radius 라이브 로그:
User Maximum Sessions(사용자 최대 세션)도 활성화된 경우 두 기능이 개별적으로 작동합니다. 사용자 Alice가 GroupTest2 그룹의 구성원이며 Maximum Session for User in Group in Group이 2로 구성된 경우 동시에 User Max Sessions가 사용자당 하나의 세션만 허용하도록 구성된 경우 User Max Sessions가 우선합니다.
Alice가 두 번째 디바이스에 연결하려고 하면 ISE는 최대 세션 사용자 제한 초과에 따라 Access-Reject를 반환합니다.
자세한 Radius Live-Log에서 거부 이유를 확인할 수 있습니다. 최대 세션 사용자 제한이 실패 사유입니다.
그룹에 대한 최대 세션 및 해당 그룹의 사용자에 대한 최대 세션
구성
Administration(관리) > System(시스템) > Settings(설정) > Max Sessions(최대 세션) > Group(그룹)으로 이동합니다.
이 컨피그레이션은 내부 ID 그룹 GroupTest2에서 최대 세션 3을 시행하고, 해당 그룹의 사용자에 대해 최대 세션 2를 적용합니다.
예
Alice와 Pablo는 GroupTest2의 멤버입니다. 이 예의 컨피그레이션에 따라 GroupTest2에서는 최대 3개의 세션이 허용됩니다. ISE는 단일 사용자가 이 그룹 내에서 최대 2개의 세션을 가질 수 있도록 합니다.
Alice는 두 개의 디바이스를 통해 연결합니다. 두 엔드포인트가 모두 네트워크에 연결되어 있습니다.
Alice가 세 번째 디바이스를 통해 연결을 시도할 때 액세스가 거부됩니다. Maximum Session for User in Group(그룹의 사용자에 대한 최대 세션 수 제한)이 초과되었습니다.
Pablo가 네트워크에 액세스하려고 하면 GroupTest2의 Max Session이 아직 가득 차지 않았으므로 Pablo는 네트워크에 액세스할 수 있습니다.
Pablo가 두 번째 디바이스에서 네트워크에 액세스하려고 하면 그룹의 최대 세션 제한을 초과했기 때문에 실패합니다(단, 세션 수는 1개임).
이전 예와 같이 User Maximum Sessions(사용자 최대 세션)를 활성화하면 독립적으로 작동합니다.
카운터 시간 제한
구성
Administration(관리) > System(시스템) > Settings(설정) > Max Sessions(최대 세션) > Counter Time Limit(카운터 시간 제한)으로 이동합니다.
Counter Time limit(카운터 시간 제한)은 세션이 최대 세션 캐시로 계산되는 시간 간격을 지정하는 기능입니다. 이 기능을 사용하면 PSN이 카운터에서 세션을 삭제하는 시간을 지정하고 새 세션을 허용할 수 있습니다.
이 기능을 활성화하려면 기본적으로 선택되어 있는 Unlimited - no time limitcheckbox의 선택을 취소해야 합니다. 편집 가능 필드에서는 MaxSession의 카운터에서 세션을 고려할 시간을 설정할 수 있습니다.
구성된 시간 이후의 세션은 세션 데이터베이스에서 연결 해제되거나 제거되지 않습니다. 구성된 시간 후에는 CoA(Terminate Chain of Authorization)가 없습니다.
예
User Max Session(사용자 최대 세션)은 사용자에 대해 하나의 세션만 허용하도록 설정되어 있습니다.
Alice는 11:00:34에 IPad를 사용하여 네트워크에 연결하고 11:07에 두 번째 인증을 수행하며, User Maximum Session(사용자 최대 세션) 값을 초과하더라도 액세스가 허용됩니다. 두 인증 모두 카운터 시간 제한 때문에 성공 합니다.
Alice는 마지막으로 성공한 연결이 성공한 후 5분 전에 다른 디바이스와의 연결을 시도합니다. ISE는 인증을 거부합니다.
마지막 인증 후 5분 후에 Alice는 추가 디바이스를 사용하여 네트워크에 연결할 수 있습니다.
라이브 세션에서는 Started 상태의 세 세션을 모두 볼 수 있습니다.
최대 세션 기능 및 게스트 액세스
중앙 웹 인증
User Maximum Session(사용자 최대 세션) 기능에서 하나의 세션이 구성된 경우에도 두 세션 모두에 대해 Guest1 계정에 연결할 수 있습니다.
게스트 액세스를 제한 하기 위해 게스트 유형 구성에서 최대 동시 로그인을 지정 할 수 있습니다.
이미지에 표시된 대로 Work Centers(작업 센터) > Guest Access(게스트 액세스) > Portal & Components(포털 및 구성 요소) > Guest Types(게스트 유형)로 이동하고 Maximum simultaneous logins(최대 동시 로그인 수) 옵션을 변경합니다.
로컬 웹 인증
User Maximum Session(사용자 최대 세션) 아래에 하나의 세션이 구성되어 있으면 연결할 수 없습니다.
Radius Live-logs에 따라 Guest1은 포털 인증의 관점에서 항상 올바르게 인증됩니다. WLC가 Guest1에 대한 두 번째 세션과 함께 RADIUS 요청을 전송하면 ISE는 사용자 제한을 초과하여 액세스를 거부합니다.
문제 해결
Radius 라이브 로그
자세한 Radius 보고서는 MaxSession 기능의 문제를 해결할 수 있는 첫 번째 장소입니다.
이 실패 이유는 이미지에 표시된 대로 이 세션/사용자에 대해 전역 최대 사용자 세션 제한이 초과되었음을 나타냅니다.
이 실패 이유는 이미지에 표시된 대로 이 세션/사용자에 대해 그룹 최대 세션 제한이 초과되었음을 나타냅니다.
이 실패 이유는 이 세션/사용자에 대한 그룹 사용자 최대 세션 제한이 초과되었음을 나타냅니다.
MaxSession 캐시 확인은 Authorization Profile(권한 부여 프로파일)을 선택한 후에 수행됩니다.
성공:
실패:
ISE 디버깅
최대 세션 로그는 prrt-server.log에 있습니다. 이를 수집하려면 이미지에 표시된 대로 runtime-AAA 구성 요소를 DEBUG 레벨로 설정합니다( Administration > System > Logging > Debug Log Configuration > PSN으로 이동).
File prrt-server.log를 가져오려면 Operations(운영) > Troubleshoot(문제 해결) > Download Logs(로그 다운로드) > PSN > Debug Logs(디버그 로그)로 이동합니다. 최대 세션 로그는 엔드포인트 디버그에서도 수집됩니다(Operations(운영) > Troubleshoot(문제 해결) > Diagnostic Tools(진단 도구) > General Tools(일반 도구) > EndPoint Debug).
사용자 최대 세션 확인이 올바르게 전달되었습니다.
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
사용자 최대 세션 확인 실패:
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