Winodws NPS与华为、华三、思科网络设备的结合
此次内容适合对radius有了解的同学,对初学者不太友好
关于Radius
RADIUS是一种分布式的、客户端/服务器结构的信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。该协议定义了基于UDP(User Datagram Protocol)的RADIUS报文格式及其传输机制,并规定目的UDP端口号1812、1813分别作为默认的认证、计费端口号。RADIUS最初仅是针对拨号用户的AAA协议,后来随着用户接入方式的多样化发展,RADIUS也适应多种用户接入方式,如以太网接入等。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用。RADIUS协议的主要特征:客户端/服务器模式/安全的消息交互机制/良好的扩展性以上引述华为官网文档
分享主要内容:良好的扩展性
RADIUS报文是由报文头和一定数目的属性(Attribute)构成,新属性的加入不会破坏协议的原有实现。Windows Server NPS具体配置:
基于Windows Sever 的网络策略服务器(NPS)
NPS允许使用以下功能集中配置和管理网络访问身份验证、授权和记帐:
RADIUS 服务器。 NPS 为无线、身份验证交换机、远程访问拨号和虚拟专用网络 (VPN) 连接执行集中式身份验证、授权和记帐。 将 NPS 用作 RADIUS 服务器时,可以将无线访问点和 VPN 服务器等网络访问服务器配置为 NPS 中的 RADIUS 客户端。 也可以配置有关使用 NPS 对连接请求进行授权的网络策略,并且可以配置 RADIUS 记帐,以便 NPS 将记帐信息记录到本地硬盘上或 Microsoft SQL Server 数据库中的日志文件。RADIUS 代理。 将 NPS 用作 RADIUS 代理时,可以配置连接请求策略,通知 NPS 要将哪些连接请求转发到其他 RADIUS 服务器,以及要将连接请求转发到哪些 RADIUS 服务器。 也可以配置 NPS,以转发将由远程 RADIUS 服务器组中的一台或多台计算机记录的记帐数据。RADIUS 记帐。 你可以配置 NPS,以将事件记录到本地日志文件或 Microsoft SQL Server 的本地或远程实例。
NPS Radius认证、授权华三、华为、思科设备
这里仅插入少量具体操作截图,其余作文字描述,以Windows server AD域管理成员为例
NPS的Raidus客户端配置&连接请求策略
在服务管理器→仪表板处点击工具,打开网络策略服务器;
点击左侧Radius客户端和服务器,新建radisu客户端
填入友好的名称、地址(这里需要填写交换机发送radius报文源ip)、共享机密
完成以上设置后,点击左侧策略、新建连接请求策略,输入策略名,网络访问服务器的类型保持默认:未指定;
下一步:指定条件:
有非常多的条件可添加,因为只要匹配中连接请求策略的其中一个,便会继续往下匹配网络策略,所以这个选择可以多样性的
添加服务器类型:Login(其他选项中)#也可选择添加 NAS 标识符/NAS IPv4地址
身份验证:在此服务器上对请求进行身份验证
NPS是基于Windows Sever AD下进行安装的,故在本AD内进行身份验证
指定身份验证方法:
不勾选改写网络策略身份验证设置
选项下方说明了,使用这些身份设置,而不是网络策略中的约束(即条件)和身份设置;若☑️了,则要求匹配到这个连接请求策略的Radius客户端必须遵循该策略的认证方法
NPS的网络策略配置
新建网络策略,填入策略名、勾选策略已启用、选择授予访问权限、网络访问服务器的类型依旧选择未指定
下一步,添加条件:你的用户组
建议选择用户组,指定棣属于该用户组下的用户方可授权和认证网络设备登录
下一步,约束:只✔️未加密的身份验证(PAP)
前两个认证选择网络设备都不支持(据我了解),若要使用CHAP,需要在创建AD域用户时,勾选使用可逆加密存储密码;至于Raidus客户端在传输radius报文时,是否是加密呢?答案:是机密的,即便使用PAP认证方式,详情参看Radius RFC 2865
下一步,设置,关键步骤:
Vendor-Specaific属性是提供给各个厂家所自定义使用的,如何利用厂家给出的radius属性呢?我会再下方开一个小专栏进行说明。
以H3C为例:
供应商特定,添加,选择自定义,选择Vendor-Specaific进行添加**;**
供应商特定的属性信息:
选择输入供应商代码:25506选择:是(Y),它符合;供应商分配的属性号:210,属性格式:字符串,属性值:shell:role=level-15
属性值可根据厂家产品文档获得
完成添加后:
Radius属性值的获取:
Radius属性值,在查看国产厂商文档时,分为两类,Radius属性/Radius扩展属性;前者是代表,Radius标准属性,属性值可由厂家提供的属性进行定义;后者表示由厂家自定义,厂家定义属性号&属性值
H3C 供应商ID 25506 Radius属性值&扩展属性值: Radius属性值:
- Radius扩展属性:![在这里插入图片描述](https://img-/0323154016647.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk2NjE4MA==,size_16,color_FFFFFF,t_70#pic_center)
华为 供应商ID Radius属性值&扩展属性值:
Radius属性值:
Radius扩展属性:
思科 供应商ID 9
NPS下发思科授权时,选择供应商时,直接选择Cisco,选择Cisco-AV-Pair 进行添加
添加Cisco-AV-Pair
Radius属性值思科官网说明/c/en/us/td/docs/ios-xml/ios/sec_usr_radatt/configuration/xe-16/sec-usr-radatt-xe-16-book/sec-vsa-rad-discnct.html
示例:cisco-avpair= ”ip:addr-pool=first“ or cisco-avpair= ”ip:addr-pool*first“ or cisco-avpair= ”shell:priv-lvl=15“
Cisco ISE进行radius属性授权时,也可效仿这样的设置,在Cisco ISE policy 授权策略中,可添加下发授权radius值,可选类型极多,包含Aruba、Juniper等国外厂商的radius属性,具体radius用法可自行查找对应的厂商资料,用法大同小异。
验证结果:
以H3C举例:
#通过debug信息可以验证debugging radius packet user Your_UserNameterminal monitorterminal debugging#尝试使用radius 登录设备 debug msg Created response timeout timer successfully.RADIUS/7/PACKET: User-Name="Your_UserName"User-Password=******Service-Type=Login-UserNAS-Identifier="Route"NAS-Port-Type=VirtualAcct-Session-Id="000000010323062540000000010011108837"Framed-IP-Address=192.168.1.1 # 用户登录IPNAS-IP-Address=6.6.6.6 #路由器NAS-IP 即发包源IPH3c-Product-Id="H3C MSR36-40"H3c-Nas-Startup-Timestamp=1607800969Sent request packet and create request context successfully.Added request context to global table successfully.Processing AAA request data.Reply SocketFd received EPOLLIN event.Found request context, dstIP: **Your Radius—IP**, dstPort: 1812, VPN instance: --(public), socketFd: 39, pktID: 43.The reply packet is valid.Decoded reply packet successfully.#以下是Radius报文携带的授权字段,若Radius属性填写有误,设备debug msg是不会识别出来是H3CH3c-AVPair="shell:role=level-15" #设备能正常读取成H3c-AVPairH3c-User-Roles="shell:roles=network-admin"Framed-Protocol=PPPService-Type=Framed-UserClass=0xb24109170000013700010200ac1004f90000000099ea093b12afe39601d71a4bbe341ba20000000000003302PAM_RADIUS: Fetched authentication reply-data successfully, resultCode: 0PAM_RADIUS: Received authentication reply message, resultCode: 0Sent reply message successfully.PAM_RADIUS: Processing RADIUS authorization.
华为示例:
#以下debug msg是截取很久之前的log[RDS(Evt):] Recv a msg(Auth req)[RDS(Msg):]Msg type :authentication request[RDS(Msg):]UserID:53[RDS(Msg):]Template no:**Your—Template_Name**[RDS(Msg):]Authmethod :0(pap)[RDS(Msg):]SrcMsg :-[RDS(Msg):]Bitmap :ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff[RDS(Evt):] Encoding mac for authen or acct request.#encoding 学过Python的同学会十分相当眼熟[RDS(Evt):] Send a packet(IP:**Raidus—IP**,Port:1812,Code:authentication request,ID:48 )RADIUS Send a Packet#HUAWEI packet msgServer Template: 1Server IP : **Raidus—IP**Protocol: StandardCode : 1Len: 308ID: 48[User-Name] [6 ] [test][User-Password ] [18] [90 1f b2 84 25 bc 26 ec 01 01 b7 49 c1 d6 50 ef ][NAS-Port ] [6 ] [0][Service-Type ] [6 ] [6][Framed-Protocol] [6 ] [6][Framed-IP-Address ] [6 ] [172.16.6.22][NAS-Identifier ] [15] [**Your Device Name**][NAS-Port-Type ] [6 ] [5][NAS-Port-Id ] [34] [slot=0;subslot=0;port=0;vlanid=0][Login-IP-Host ] [6 ] [**用户IP**][NAS-IP-Address ] [6 ] [Radius 报文源IP][Acct-Session-Id] [39] [GZ_BAII09255255000000000022e200000008][Framed-Interface-Id] [10] [2e 32 32 00 00 00 00 00 ][Framed-IPv6-Prefix ] [12] [00 40 31 37 32 2e 31 36 2e 36 ][Framed-IPv6-Address] [18] [31 37 32 2e 31 36 2e 36 2e 32 32 00 00 00 00 00 ][HW-NAS-Startup-Time-Stamp] [6 ] [954634220][HW-IP-Host-Address ] [31] [**用户IP** ff:ff:ff:ff:ff:ff][HW-Connect-ID ] [6 ] [8][HW-Version] [14] [Huawei S5720][HW-Product-ID ] [7 ] [S5720][HW-Access-Type ] [6 ] [6][HW-Framed-IPv6-Address ] [18] [31 37 32 2e 31 36 2e 36 2e 32 32 00 00 00 00 00 ]#Fail msg[RDS(Evt):] Receive a packet(IP:**Radius-IP**,Port:1812,Code:authentication accept,ID:48 )RADIUS Received a Packet.Server Template: 1Server IP : **Radius-IP**Server Port : 1812Protocol: StandardCode : 2Len: 102ID: 48[HW-Exec-Privilege ] [6 ] [15][HW-Data-Filter ] [4 ] [\271\346] #decode失败了,未知的值Vendor attr errorAttr not support in protocol (unknow(468),vendor ID()).[RDS(Evt):] Authen sever up, no reply[RDS(Err):] Attribute decode error.#decode error错误,学过python的同学应该理解decode
这个是失败的例子,并不表示华为不支持,是因为radius在设置radius属性时,配置错误,导致华为无法识别radius属性信息,原因是网络设备对encode转换成decode.(‘utf-8’)时,产生一个无法识别的值(大概率是我在新增Radius属性是,添加的值类型,不是字符串或属性号错误)