Radius协议深入.ppt
Radius协议深入,掌握Radius协议的基本概念 掌握Radius协议的工作过程 掌握Radius包各个字段的含义了解华为Radius协议扩展,学习目标,基本概念,内容提要,Radius Server与NAS在全网中的位置,Radius:Remote Authentication Dial In User Service客户端负责将认证等信息按照协议的格式通过UDP包送到服务器,同时对服务器返回的信息解释处理。,认证端口号:1645/1812计费端口号:1646/1813,Radius的作用,AAA Authentication、Authorization、Accounting 验证、授权、记费 PAP Password Authentication Protocol 口令验证协议 CHAP Challenge-Handshake Authentication Protocol 盘问握手验证协议 NASNetwork Access Server 网络接入服务器 RADIUS Remote Authentication Dial In User Service 远程验证拨入用户服务(拨入用户的远程验证服务)TCP Transmission Control Protocol 传输控制协议 UDPUser Datagram Protocol 用户数据报协议,名词解释,RADIUS的客户端通常运行于接入服务器(NAS)上,RADIUS服务器通常运行于一台工作站上,一个RADIUS服务器可以同时支持多个RADIUS客户(NAS)。RADIUS的服务器上存放着大量的信息,接入服务器(NAS)无须保存这些信息,而是通过RADUIS协议对这些信息进行访问。这些信息的集中统一的保存,使得管理更加方便,而且更加安全。RADIUS服务器可以作为一个代理,以客户的身份同其他的RADIUS服务器或者其他类型的验证服务器进行通信。用户的漫游通常就是通过RADIUS代理实现的。,Client/Server结构,NASRadius认证计费过程,包加密每个radius报文中都有16字节的验证字(authenticator)用于对包进行签名,协议中使用MD5对这个字段进行加密,确认包的合法性(其余字段未加密)口令加密在包合法的情况下,对于携带口令的报文,要使用MD5算法对口令字段的内容加密,NAS与radius服务器之间的数据安全性,MD5是一个算法,它的运算是单向的,即从输出推算不出输入。,不好意思,我只会把您的手表变成兔子,变不回去了,MD5,MD5的特点,包的签名与加密:包的签名指的是RADIUS包中16字节的Authenticator,我们称其为“验证字”。认证请求包RequestAuth=Authenticator,认证请求包的验证字是一个不可预测的16字节随机数。这个随机数将用于口令的加密。认证响应包ResponseAuth=MD5(Code+ID+Length+Authenticator+Attributes+Key)。记费请求包RequestAcct=MD5(Code+ID+Length+16ZeroOctets+Attributes+Key)。记费响应包ResponseAcct=MD5(Code+ID+Length+RequestAcct+Attributes+Key)。,包加密的具体过程,称共享密钥(key)为Key;16字节的认证请求验证字(Authenticator)为Auth;将口令(Password)分割成16字节一段(最后一段不足16字节时用0补齐),为p1、p2等;加密后的口令块为c(1)、c(2)等。下面运算中b1、b2为中间值:b1=MD5(Key+Auth)c(1)=p1 xor b1 b2=MD5(Key+c(1)c(2)=p2 xor b2 bi=MD5(Key+c(i-1)c(i)=pi xor bi那么加密后的口令为c(1)+c(2)+.+c(i)。,口令加密的具体过程,我查我验,PC与NAS之间的数据安全性之本地PAP认证,本地认证PAP,这种认证方法是明文方式。,Secret Password=MD5(Chap ID+Password+challenge),我查我算我验,PC与NAS之间的数据安全性之本地CHAP认证,本地认证CHAP,采用了MD5加密,如果用户配置了RADIUS验证,其PAP验证过程如下:,采用PAP验证:用户以明文的形式把用户名和他的密码传递给NAS。NAS把用户名和加密过的密码放到验证请求包的相应属性中传递给RADIUS服务器,根据RADIUS服务器的返回结果来决定是否允许用户上网。,用户名、密码,放行,远端PAP认证的安全性如何?,Secret password=Password XOR MD5(Challenge Key)(Challenge就是Radius报文中的Authenticator),我查我算我验,远端PAP认证的安全性如何?,Secret password=MD5(Chap ID+Password+challenge),我查我算我验,远端CPAP认证的安全性如何?,基本概念,内容提要,Radius是一种流行的AAA协议,同时其采用的是UDP协议传输模式,AAA协议在协议栈中位置如下:,Radius协议,Radius协议在协议栈中的位置,为什么使用UDP?NAS和RADIUS服务器之间传递的一般是几十至上百个字节长度的数据,用户可以容忍几秒到十几秒的验证等待时间。当处理大量用户时服务器端采用多线程,UDP简化了服务器端的实现过程。TCP是必须成功建立连接后才能进行数据传输的,这种方式在有大量用户使用的情况下实时性不好。当向主用服务器发送请求失败后,还要必须向备用的服务器发送请求。于是RADIUS要有重传机制和备用服务器机制,它所采用的定时,TCP不能很好的满足。,Radius协议选择UDP作为传输层协议,Radius协议包结构,Code:包类型;1字节;指示RADIUS包的类型。Identifier:包标识;1字节;用于匹配请求包和响应包,同一组请求包和响应包的Identifier应相同。Length:包长度;2字节;整个包的长度。Authenticator:验证字;16字节;用于对包进行签名。,Radius协议包各个域解释,1 Access-Request请求认证过程 2 Access-Accept认证响应过程 3 Access-Reject认证拒绝过程 4 Accounting-Request请求计费过程 5 Accounting-Response计费响应过程,code域,1、RADIUS的通信是用“请求-响应”方式进行的,即:客户发送一个请求包,服务器收到包后给予响应。2、RADIUS协议采用的是UDP协议,数据包可能会在网络上丢失,如果客户没有收到响应,那么可以重新发送该请求包。多次发送之后如果仍然收不到响应,RADIUS客户可以向备用的RADIUS服务器发送请求包。,NASRadius认证计费过程,包标识,用以匹配请求包和响应包。该字段的取值范围为0255;协议规定:1、在任何时间,发给同一个RADIUS服务器的不同包的Identifier域不能相同,如果出现相同的情况,RADIUS将认为后一个包是前一个包的拷贝而不对其进行处理。2、Radius针对某个请求包的响应包应与该请求包在Identifier上相匹配(相同)。,Identifier域,整个包长度,包括:CodeIdentifierLengthAuthenticatorAttributes,Length域,该验证字分为两种:1、请求验证字-Request Authenticator 用在请求报文中,必须为全局唯一的随机值。2、响应验证字-Response Authenticator 用在响应报文中,用于鉴别响应报文的合法性。响应验证字MD5(Code+ID+Length+请求验证字+Attributes+Key),加密以后你还能认出我来吗?,Authenticator域,Attribute(1)属性,长度为10字节,b e n l a d e n,上网用户:张三上网地点:阿富汗,Attributes域,1 User-Name 用户名2User-Password 用户密码3Chap-Password Chap认证方式中的用户密码4 Nas-IP-Address Nas的ip地址5 Nas-Port 用户接入端口号6 Service-Type 服务类型 7 Framed-Protocol 协议类型8 Framed-IP-Address 为用户提供的IP地址9 Framed-IP-NetMask 地址掩码10 Framed-Routing 为路由器用户设置的路由方式 11 Filter-Id 过滤表的名称12 Framed-MTU 为用户配置的最大传输单元,常用报文属性,属性值属性名称 意义,13 Framed-Compression 该连接使用压缩协议14 Login-IP-Host 对login用户提供的可连接主机的ip地址15 Login-Service 对login用户可提供的服务 16 Login-TCP-Port TCP服务端口18 Reply-Message 返回给用户的信息(成功/失败)24 State 认证服务器发送challenge包时传送的需在接 下来的认证报文中回应的字符串(与Acess-Challenge相关的属性),常用报文属性,属性值 属性名称 意义,26 Vendor-Specific 可扩展属性 27 Session-Timeout 用户可用的在线时长(时长预付费)28 Idle-Timeout 用户在线空闲最大时长,用于闲置切断功能。32 NAS-Identifier 标识NAS的字符串33 Proxy-State NAS通过代理服务器转发认证报文时服务 器添加在报文中的属性60 Chap-Challenge NAS发给PPP用户的challenge信息61 Nas-Port-Type 接入端口的类型 62 Port-Limit 服务器限制NAS为用户开放的端口数,常用报文属性,属性值 属性名称 意义,Acct-Status-Type 计费请求报文的类型1 Start 2 Stop 3 Interim-Update 7 Accounting-On 8 Accounting-Off 9-14 Reserved for Tunnel Accounting 15 Reserved for Failed,常用报文属性,属性值 属性名称 意义,41 Acct-Delay-Time Radius客户端发送计费报文耗费的时间42 Acct-Input-Octets 输入字节数43 Acct-Output-Octets 输出字节数 44 Acct-Session-Id 计费会话标识45 Acct-Authentic 用户的认证方式,是本地还是radius46 Acct-Session-Time 用户在线时长47 Acct-Input-Packets 输入包数 48 Acct-Output-Packets 输出包数,常用报文属性,属性值 属性名称 意义,Acct-Terminate-Case 用户下线原因 1 User Request 2 Lost Carrier 3 Lost Service 4 Idle Timeout 5 Session Timeout 6 Admin Reset 7 Admin Reboot 8 Port Error 9 NAS Error 10 NAS Request 11 NAS Reboot,常用报文属性,属性值 属性名称 意义,基本概念,内容提要,参考样例:ISN8850与Radius对接测试,*0.18993140-AAA-debug-Packet:send radius packet to 192.168.10.4:1812 code=1 id=19 length=102 75 17 0 0 9b a 0 0 20 18 0 0 5a 20 0 0 attribute(1)(User-name):user1 attribute(2)(Password):0 x4d 0 xa1 0 x11 0 xbe 0 xa7 0 xc5 0 x1a 0 xa4 0 x5b 0 x29 0 xb1 0 xde 0 x34 0 x11 0 x4c 0 xf9 attribute(6)(User-Service):0 x2 attribute(7)(Framed-Protocol):0 x1 attribute(4)(NAS-IP-Address):0 xc0a80a0a attribute(32)(NAS-Identifier):ESR attribute(127)(Connect-Id):0 xf00000e*0.18993750-AAA-debug-Packet:attribute(61)(NAS-Port-Type):0 x5,认证请求(code=1),Framed,表示为PPP或SLIP用,PPP,*0.18993900-AAA-debug-Packet:receive radius packet from 192.168.10.4:1812 code=2 id=19 length=74 18 4c ac 52 e4 99 a5 5f 68 ac 8e 23 3c 70 d 75 attribute(85)(Realtime-Interval):0 x258 attribute(5)(NAS-Port):0 x1513d attribute(25)(Class):128 attribute(6)(User-Service):0 x2 attribute(7)(Framed-Protocol):0 x1 attribute(13)(Framed-Compression):0 x1 attribute(10)(Framed-Routing):0 x1*0.18994520-AAA-debug-Packet:attribute(11)(Framed-Filter):1,认证响应(code=2),*0.18994810-AAA-debug-Packet:send radius packet to 192.168.10.4:1813 code=4 id=20 length=102 ef 31 f 3 54 52 71 71 46 a2 98 d 4 87 ca 8 attribute(40)(Acct-Status-Type):0 x1 attribute(32)(NAS-Name):ESR attribute(8)(Framed-Address):0 xa0a0a01 attribute(7)(Framed-Protocol):0 x1 attribute(1)(User-name):user1 attribute(5)(NAS-Port):0 x0 attribute(61)(NAS-Port-Type):0 x5*0.18995400-AAA-debug-Packet:attribute(45)(Acct-Authentic):0 x1 attribute(193)(Acct-Timestamp):0 x4a31 attribute(41)(Acct-Delay-Time):0 x0,计费开始,1RADIUS2Local3Remote,5Virtual,计费开始请求(code=4),*0.18995750-AAA-debug-Packet:receive radius packet from 192.168.10.4:1813 code=5 id=20 length=20 18 ce 52 6a b7 f5 0 3 71 74 16 a5 bc 42 c0 8a,计费响应(code=5),*0.18993900-AAA-debug-Packet:receive radius packet from 192.168.10.4:1812 code=2 id=19 length=74 18 4c ac 52 e4 99 a5 5f 68 ac 8e 23 3c 70 d 75 attribute(85)(Realtime-Interval):0 xb4 attribute(5)(NAS-Port):0 x1513d attribute(25)(Class):128 attribute(2)(Password):0 x4e 0 x4f 0 x50 0 x41 0 x53 0 x53 0 x57 0 x44 attribute(6)(User-Service):0 x2 attribute(7)(Framed-Protocol):0 x1 attribute(13)(Framed-Compression):0 x1 attribute(10)(Framed-Routing):0 x1*0.18994520-AAA-debug-Packet:attribute(11)(Framed-Filter):1,实时计费间隔为180秒,实时计费之认证响应(code=2),分解动作之一:*0.169338370-AAA-debug-Packet:send radius packet to 192.168.10.4:1813 code=4 id=31 length=207 e4 67 7f f5 9d ec b4 82 d6 15 35 5d ea bd b0 ac attribute(40)(Acct-Status-Type):0 x3 attribute(25)(Class):128 attribute(32)(NAS-Name):ESR attribute(8)(Framed-Address):0 xa0a0a01 attribute(7)(Framed-Protocol):0 x1 attribute(1)(User-name):user1 attribute(5)(NAS-Port):0 x28000060 attribute(61)(NAS-Port-Type):0 x5,实时计费包,实时计费之计费请求(code=4),分解动作之二:*0.169338940-AAA-debug-Packet:attribute(45)(Acct-Authentic):0 x1 attribute(193)(Acct-Timestamp):0 x2957a attribute(55)(Event-Timestamp):0 x0 0 x2 0 x95 0 x7a attribute(41)(Acct-Delay-Time):0 x0 attribute(87)(Nas-Port-Id):slot=10;subslot=0;port=0;VPI=1;VCI=32;attribute(6)(User-Service):0 x2 attribute(7)(Framed-Protocol):0 x1 attribute(42)(Acct-Input-Octets):0 x7fd4*0.169339520-AAA-debug-Packet:attribute(43)(Acct-Output-Octets):0 x6174 attribute(47)(Acct-Input-Packets):0 x122 attribute(48)(Acct-Output-Packets):0 x10e attribute(52)(Acct-Input-Gigawords):0 x0 attribute(53)(Acct-output-Gigawords):0 x0 attribute(46)(Acct-Session-Time):0 x12c,用户上传字节,用户下载字节,用户计费时长,实时计费之计费请求(code=4),*0.19379310-AAA-debug-Packet:send radius packet to 192.168.10.4:1813 code=4 id=26 length=168 1c cb 87 52 97 a2 72 7b 76 32 cb db 49 3c a3 49 attribute(40)(Acct-Status-Type):0 x2 attribute(32)(NAS-Name):ESR attribute(8)(Framed-Address):0 xa0a0a01 attribute(7)(Framed-Protocol):0 x1 attribute(1)(User-name):user1 attribute(5)(NAS-Port):0 x0 attribute(61)(NAS-Port-Type):0 x5 attribute(44)(Acct-Session-Id):03082033090000000014,计费结束,计费结束请求(code=4),分解动作之二:*0.19379900-AAA-debug-Packet:attribute(45)(Acct-Authentic):0 x1 attribute(193)(Acct-Timestamp):0 x4bb3 attribute(41)(Acct-Delay-Time):0 x0 attribute(49)(Acct-Terminate-Cause):0 x1 attribute(111)(Input-Kilobytes-Before-Tariff-Switch):0 x4 attribute(115)(Input-Kilobytes-After-Tariff-Switch):0 x4 attribute(112)(Output-Kilobytes-Before-Tariff-Switch):0 x0 attribute(116)(Output-Kilobytes-After-Tariff-Switch):0 x0*0.19380460-AAA-debug-Packet:attribute(113)(Input-Packets-Before-Tariff-Switch):0 x29 attribute(117)(Input-Packets-After-Tariff-Switch):0 x29 attribute(114)(Output-Packets-Before-Tariff-Switch):0 x0 attribute(118)(Output-Packets-After-Tariff-Switch):0 x0 attribute(72)(Time-Befor-Tariff-Switch):0 x1d attribute(73)(Time-After-Tariff-Switch):0 x1d,计费结束请求(code=4),*0.19380930-AAA-debug-Packet:receive radius packet from 192.168.10.4:1813 code=5 id=26 length=20 18 98 f0 cd 92 45 59 12 51 c3 e 33 f6 68 4 f6,计费响应(code=5),*0.82764120-AAA-debug-Packet:send radius packet to 192.168.10.4:1812 code=1 id=46 length=102 ea b 0 0 2 78 0 0 57 39 0 0 f6 37 0 0 attribute(1)(User-name):user2 attribute(2)(Password):0 x69 0 x4 0 xf1 0 x8c 0 xeb 0 x81 0 x15 0 x71 0 xe2 0 xd0 0 x15 0 xb0 0 x20 0 xee 0 x9a 0 x55*0.82764970-AAA-debug-Packet:receive radius packet from 192.168.10.4:1812 code=3 id=46 length=59 62 d1 7c 55 77 94 f5 21 52 40 77 c1 e7 4c 5e 53 attribute(18)(Reply-Message):!the password of this user is wrong,问题一:密码错误,*0.82897520-AAA-debug-Packet:send radius packet to 192.168.10.4:1812 code=1 id=48 length=100 73 57 0 0 d5 45 0 0 47 36 0 0 d4 8 0 0 attribute(1)(User-name):abc attribute(2)(Password):0 x90 0 x5d 0 xe4 0 x8b 0 x9f 0 xbe 0 xb 0 x8c 0 xf7 0 xea 0 xc4 0 x17 0 xd6 0 x5 0 x9c 0 x23*0.82898270-AAA-debug-Packet:receive radius packet from 192.168.10.4:1812 code=3 id=48 length=57 de e1 1c fc 98 cc aa e8 64 ec 42 25 49 52 70 28 attribute(18)(Reply-Message):!no this username in the database,问题二:非法用户,基本概念,内容提要,Radius 与 Radius+:Radius:目前互联网应用中比较流行的用户验证、授权、计费协议。RFC2865/2866/2869定义了标准radius协议的所有规范。Radius+:各通信设备厂家分别对应于原标准radius协议所未定义到的新应用自行开发定义了一套扩展的radius协议报文和属性,成为radius+协议。在华为iTellin中支持华为radius+1.0和radius+1.1两种radius+协议。,iTellin:智能业务平台iTellin中包含了portal server和iSCP(宽带业务控制点,相当于radius server)等功能模块。,基本概念,Radius+1.0介绍(属性扩展),在Radius+1.0中,相比标准Radius,进行了部分属性的修改和扩展,例如新增加了流量带宽等计费属性:Accounting-Request 报文中状态类型(Acct-Status-Type):Start(Value=1):Client开始对指定用户提供服务,记帐开始 Stop(Value=2):Client停止对指定用户提供服务,记帐结束 Interim-Update(Value=3):中途上报流量信息,实时记帐 Reset-Charge(Value=4):在认证后,iSCP主动要求Client改变策略后,Client上报流量信息。,Radius+1.0介绍(控制报文增加),在Radius+1.0中,相比标准Radius,为了使iSCP能够控制BAS打开端口/关闭端口,RADIUS+1.0协议新定义了二种控制报文:21 Session-Trigger-Request 报文控制BAS 打开端口22 Session-Terminate-Request报文控制BAS 关闭端口,主动断开用户连接。,回顾:标准Radius用户上网过程,使用Radius1.0+的Portal用户上网过程,吸引更多的用户:个性化业务管理、本地特色内容业务、内容过滤、看广告免费上网,概述,用Radius+1.0又不行了!,上述两种上网过程不足之处:iSCP总是被动响应BAS发出的各种请求,从而iSCP无法控制管理用户的上网过程;用户如果出现某种突发的需求,如快速下载或传送很大的文件时需要更大的带宽,此时无法改变带宽等业务属性。,我只申请了256K带宽,但我偶尔也想爽一下,Radius+1.1介绍,Radius+1.1&Portal-Server时用户上网过程,和其它方式相比,主要不同点有:增加了code=20 Session-Control报文;iSCP主动下发各种控制报文;用户可以动态改变业务属性。,想变就变!变!,OK,OK,OK!,Session-control报文:报文中的必须有一个自定义的子属性为Command,内容为4字节的整数。其取值表示四种报文:1)Trigger-Request:控制radius client触发Access-Request。2)Terminate-Request:控制radius client主动断开用户连接。3)SetPolicy:表示认证成功后,iSCP主动改变策略,如带宽、重定向策略、业务选择等。4)Result:表示Trigger-Request、SetPolicy的结果;Terminate-Request没有对应的结果。,Session-control 报文,Radius+1.1&Portal-Server时用户上网过程,Session-control 报文,总结,