本帖最后由 小乔 于 2022-12-30 10:36 编辑
简介
本文档介绍如何配置身份服务引擎(ISE)2.2中引入的最大会话功能。最大会话功能提供了一种控制和实施每个用户或每个身份组实时会话的方法。本文档适用于RADIUS会话,但也可用于TACACS会话。 先决条件
要求
Cisco 建议您了解以下主题: - RADIUS协议
- 无线局域网控制器(WLC)上的802.1x配置
- ISE及其角色(角色)
使用的组件
本文档中的信息基于以下软件和硬件版本:
- 思科身份服务引擎版本2.2
- 无线局域网控制器8.0.100.0
- 思科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节点)。
网络图场景每用户最大会话数
配置
要启用该功能,请取消选中Unlimited session per user复选框,该复选框在默认情况下处于选中状态。在Maximum per user Sessions字段中,配置特定用户在每个PSN上可以拥有的会话数。在本例中,它设置为2。
外部身份源(例如Active Directory)的用户也受此配置的影响。 示例Bob是Active Directory域中连接并加入ISE服务器的帐户的用户名。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,表示会话的Accounting Start到达ISE。必须接收Radius Accounting for Max Session才能正常工作,会话计数期间不考虑状态Authenticated(允许会话,但不考虑记帐):
组的最大会话数配置
导航至管理>System>设置>最大会话数>组:
此配置强制内部身份组GroupTest2最多执行2个会话:您只能为内部组按组配置实施。 示例Alice、Pablo和Peter是内部ISE用户存储的用户,他们都是名为GroupTest2的组的成员。根据本例中的配置,会话的最大值根据组成员身份设置为2。
Pablo和Peter使用其来自名为GroupTest2的内部组的凭据连接到网络:
一旦Alice尝试连接,将强制执行每个组的MaxSessions限制:
不允许Alice连接到网络,因为Peter和Pablo已用完最大会话组限制:
拐角机箱
如果配置了User Maximum Sessions,则两个功能独立工作。在本例中,用户最大会话数设置为1,组的最大会话数设置为2。
应根据组(2个会话)的最大会话数允许Peter,但由于用户最大会话数配置(一个会话),他无法连接到网络:
如果用户同时是多个组的成员,并且为其配置了组的最大会话数,则连接后,ISE会增加用户所属的每个组的组最大会话数缓存计数。
在本例中,Alice和Pablo都是GroupTest1和GroupTest2的成员。Veronica仅属于GroupTest1,而Peter则属于GroupTest2 对于GroupTest1和GroupTest2,组的最大会话数设置为2: 当Alice和Pablo连接到网络时,它们会超出两个组的会话限制。Veronica(仅属于GroupTest1)和Peter(GroupTest2的成员)无法连接,因为Group Max Session已达到最大配置值:
组中用户的最大会话数配置导航至管理>系统>设置>最大会话数>组。
此配置对内部身份组GroupTest2强制执行最多2个会话。
示例Alice是GroupTest2的成员:
此功能的工作方式类似于用户最大会话 — ISE限制指定内部组内用户可以拥有的并发会话数。此配置仅影响属于已配置组的用户。
作为GroupTest2的成员,Alice可以同时设置2个会话,一旦连接到第三台设备,ISE将根据超出的Maximum Session for User in Group返回PermitAccess和Access-Reject:
详细的Radius-Live日志:
如果同时启用了“用户最大会话数”,则两个功能可独立工作。如果用户Alice是组GroupTest2的成员,且组中为2配置了用户的最大会话数,并且同时将用户最大会话数配置为只允许每个用户一个会话,则优先选择用户最大会话数:
当Alice尝试与第二台设备连接时,ISE根据超出的最大会话用户限制返回Access-Reject:
拒绝的原因可能是在详细的Radius实时日志下检查。最大会话用户限制是失败的原因:
组的最大会话数和该组中用户的最大会话数配置此配置强制内部身份组GroupTest2中的最大会话数为3,该组中的用户的最大会话数为2。
示例Alice和Pablo是GroupTest2的成员。根据本例中的配置,GroupTest2中最多允许3个会话。ISE确保单个用户在此组中最多可以有2个会话。
Alice通过两台设备连接,两个终端都连接到网络:
当Alice尝试通过第三台设备连接时,访问被拒绝,超出“组中用户的最大会话数”限制:
I如果Pablo尝试访问网络,则他能够访问网络,因为GroupGroupTest2的Max Session尚未满:
当Pablo尝试从第二台设备访问网络时,他会失败,因为他超过了组的最大会话限制(即使他只有1个会话):
如前面的示例所示,如果启用“用户最大会话数”,则它独立工作。
计数器时间限制配置
导航至管理>System >设置>最大会话数>计数器时间限制。
Counter Time limit是指定根据最大会话缓存计算会话的时间间隔的功能。此功能允许您指定PSN从计数器中删除会话的时间,并允许新会话。
要启用该功能,您需要取消选中Unlimited - no time limit复选框,该复选框默认选中。在可编辑字段中,可以设置在MaxSession计数器中应考虑会话的时长。
请记住,配置后的会话不会断开或从会话数据库中删除。在配置后,没有授权终止更改(CoA)。
示例Alice使用IPad 11:00:34连接到网络,第二次身份验证在11:07进行,甚至允许超出用户最大会话值访问。由于计数器时间限制,两个身份验证都成功。
Alice尝试连接另一台设备,在上次成功连接通过后5分钟之前,ISE拒绝身份验证:
从上次身份验证开始5分钟后,Alice可以使用其他设备连接到网络。
在实时会话中,您可以看到所有三个会话都处于“已启动”状态:
最大会话功能和访客访问集中Web身份验证
在用户最大会话功能下配置一个会话后,您仍然可以与Guest1帐户连接两个会话:
为了限制访客访问,可以在访客类型配置中指定最大同时登录数。
导航到工作中心>访客接入>门户和组件>访客类型并更改最大同步登录选项,如图所示:
本地Web身份验证如果在用户最大会话下配置了一个会话,则无法连接: 根据Radius实时日志,Guest1始终在门户身份验证方面进行正确的身份验证,一旦WLC向Guest1发送具有第二个会话的RADIUS请求,ISE会由于超出用户限制而拒绝访问:
故障排除Radius实时日志详细的Radius报告是排除MaxSession功能故障的首选位置。
此失败原因表示此会话/用户已超出全局最大用户会话限制,如图所示:
此失败原因表示此会话/用户超出组最大会话数限制,如图所示: 此失败原因表示此会话/用户超出组用户最大会话数限制。
在选择授权配置文件后,将检查MaxSession缓存:
成功:
失败:
ISE调试
最大会话日志位于prrt-server.log中。要收集这些信息,请将运行时AAA组件设置为DEBUG级别(导航至Administration > System > Logging > Debug Log Configuration > PSN),如图所示:
要获取文件prrt-server.log,请导航至操作>故障排除>下载日志> PSN >调试日志。最大会话日志也收集在终端调试中(操作>故障排除>诊断工具>一般工具>端点调试)。
用户最大会话检查已正确通过:
017-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: nMaxSessionsAznEvent: 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: nMaxSessionsAznEvent: 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: nMaxSessionsAznEvent: 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: nAccountingStart: 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: nMaxSessionsAznEvent: 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: nMaxSessionsAznEvent: 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: nResponseMaxSessionsAznEvent return from SessionCache,RadiusAuthorization.cpp:371
|