RADIUS协议原理介绍+报文分析+配置指导-RFC2865/RFC2866

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将在Radius协议报文的基础上进行介绍。
在这里插入图片描述

Radius(Remote Authentication Dial In User Service,远程身份验证拨号用户服务)是AAA协议(Authentication Authorization and Accounting,认证授权和计费)的一种,通常工作于UDP的1812/1813端口。
其他AAA协议可参考RFC1492-TACACS协议,RFC4511-LDAP协议,RFC6733-Diameter协议,RFC8907-TACACS+协议。但是需要注意的是tacacs/tacacs+/hwtacacs等tacacs类协议往往为私有协议无法完全互通,并且新旧协议可能无法兼容。
个人能力有限,这里仅涉及简易内容。敬请各位指导。

目录

1.基础介绍

Radius(Remote Authentication Dial In User Service,远程身份验证拨号用户服务)协议是一种分布式的 C/S(Client/Server)信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。

1.1.AAA相关概念及术语

BAS:Broadband Access Server,宽带接入服务器。
BRAS:Broadband Remote Access Server,宽带远程接入服务器。
NAS:Network Access Server,网络接入服务器。

BAS/BRAS/NAS 这三种概念在网络模型中的角色往往是重叠的。BAS/BRAS/NAS 通常用于采集用户终端信息(PPP/PPPoE 协议交互),随后和 AAA 服务器进行交互以便对用户网络进行相关授权和计费(AAA 协议交互)。

DM:Disconnect Messages。Radius消息的一种用于主动发起断开链接请求,是Radius的授权扩展,定义于RFC5176。
COA:Change of Authorization。Radius消息的一种用于主动发起修改授权属性,是Radius的授权扩展,定义于RFC5176。

扩展介绍之网络模型
WAN:Wide Area Network,广域网。
MAN:Metropolitan Area Network,城域网。
LAN:Local Area Network,局域网。
PON:Passive Optical Network,无源光网络。
POL:Passive Optical Local Network,无源光局域网络。
OLT:Optical Line Terminal,光线路终端。OLT是光线路终端,是电信的局端设备用于连接光纤干线。
ONU:Optical Network Unit,光网络单元。ONU接收来自OLT的数据,向上传递用户数据。
ONT:Optical Network Terminal,光网络终端。ONT是ONU的组成部分。
Modem:调制解调器,是调制器和解调器的缩写。俗称“猫”。
ADSL:Asymmetric Digital Subscriber Line,非对称数字用户线路。上传和下载速率不对等的数据传输方式,采用频分复用技术把普通的电话线分成了电话、上行和下行三个相对独立的信道,从而防止语音与网络等业务之间的干扰。终端与之对应的名称为“ADSL猫”。

@:网络模型的最顶层为广域网,有时也称骨干网。往往指国家级别的网络。骨干网又可分为国家骨干网,省级骨干网。
@:骨干网之下由城域网组成。城域网往往为三层网络结构:核心层,汇聚层,接入层。这三种网络结构有时也用于在大型企业网中指代企业网络,与之对应的设备称为核心路由器/交换机,汇聚路由器/交换机,接入路由器/交换机。
@:目前常用的接入层网络使用的是PON/POL网络。PON网络组织通常为:路由器 <—> OLT <—> ONU <—> 用户终端。类似的 ONU/ONT 被称为“光猫”。
对于家庭用户,路由器往往承担着用户网关和 BAS/BRAS/NAS 的作用。其中OLT<—>ONU<—>用户终端为二层局域网,通常所说的FTTB(Fiber to the Building)、FTTC(Fiber to the Curb)、FTTH(Fiber to the Home)、FTTO(Fiber to the Office)、FTTR(Fiber to the Room)就是 PON 网络的不同方案。
@:Modem 和 ADSL 是上一代宽带接入网的代表角色。线路往往使用铜质电话线传递数据和语音信号。

1.2.Radius协议背景

RADIUS 全称为远程身份验证拨号用户服务(Remote Authentication Dial-In User Service),是一种用于验证和授权用户访问的网络协议。Radius 有多种优点和缺点,常见用例包括无线网络和 VPN 的用户访问,以及其他受保护网络资源的可靠管理访问控制。

Merit Network Inc. 在上世纪八九十年代向供应商征求开发一种协议来支持其拨号接入需求。1991年,Livingston Enterprises 提交了 Radius 协议的提案。Radius 于1997年由互联网工程任务组(IETF)标准化为RFC2058,最终在2000年更新为RFC2865。

Radius 并非在计算时代设计,但事实证明它具有多功能性和适应性,可以应对当今的挑战。它的可以通过现代加密技术,例如多重身份验证(Multi-factor authentication,MFA)、TLS、VPN,来加强安全。Radius 还可以通过使用代理访问控制进行身份验证。

此外,Cloud Radius 方案可以更方便地将 Radius 合并到标识和访问管理 (IAM,Identity and Access Management)中,从而使用组成员身份和条件访问策略实现更多场景,并且可以灵活地满足当前和未来的需求。

Radius 的关键特性
@使用 Client/Server 模型。BAS/BRAS/NAS 作为 Radius Client 运行,负责将用户信息传递到指定的 Radius Server。Radius Server 负责接收用户连接请求,对用户进行身份验证,然后向 Client 返回用户提供服务所需的所有配置信息。
此外,Radius Server 可以充当其他 Radius Server 或其他类型的身份验证服务器的代理客户端。

@网络安全。Client 和 Server 之间的事务通过使用事先约定的共享密钥进行身份验证,该密钥永远不会通过网络发送。此外,任何用户密码都会在 Client 和 Server 之间加密发送,以消除窥探用户密码的可能性。

@灵活的认证技术。Radius 可以支持 PPP 协议的 PAP 或 CHAP 认证、UNIX 登录、EAP认证和其他身份验证机制。

@支持协议扩展。Radius 基于可变长度的 Attribute、Length、Value 三元组。 可以在不干扰协议的现有实现的情况下添加新的属性值。

点击此处回到目录

2.RADIUS 基本原理

在这里插入图片描述在具体介绍之前,这里先介绍 Radius 底层封装
1@:IP 包头中的通常用于QOS的DSCP字段为0,是低等级的优先报文。这一点与OSPF/BGP不同。

在这里插入图片描述//radius-server packet命令用来配置设备发送到RADIUS服务器的RADIUS报文的DSCP优先级。HW默认为32。

2@:IP 包头中的TTL字段为128/255,这一特点允许其跨局域网进行转发。而其他协议报文则有明确限制,例如 IGMP 的 TTL=1,OSPF 的 TTL=1,VRRP 的 TTL=255。这些特定TTL都是基于协议安全的考虑。

3@:使用IP协议号17(也即UDP协议)进行承载。RADIUS使用1812/1813作为目的端口进行识别。
其中1812作为认证端口,1813作为计费端口。

@:RFC2865中说明 Radius 协议早期使用1645作为认证端口,1646作为计费端口。因其与 datametrics 服务冲突而被舍弃。
@:RFC5176中说明 Radius 协议使用3799作为 Disconnect-Request 和 CoA-Request 消息的目的端口。有时CISCO也会使用1700作为 Change-of-Authorization Message 发送端口。
@:RFC7360中说明 Radius/DTLS 协议使用2083作为 Secure Radius Service 的目的端口。
自动换行在这里插入图片描述//radius-server extended-source-ports配置设备监听RADIUS报文的端口。也即,发送 Radius 报文的目的端口和接收 Radius 报文的源端口。

2.1.Radius 报文格式

在这里插入图片描述Code:1字节,标识 Radius 消息类型。当收到具有无效 code 字段的数据包时,将静默丢弃。
目前RFC所定义的 Radius 消息类型有40种左右,本文章仅介绍常用 Radius 消息类型。
Identifier:1字节,用于匹配特定的请求和回复消息。 如果 RADIUS Server 在短时间内收到具有相同的 Client 源 IP 地址和源 UDP 端口和 Identifier,则可以认为其为重复的请求。
Length:2字节,标识 Radius 消息长度。长度字段范围之外的八位字节必须被视为填充,并在接收时忽略。
如果 Radius 消息短于 Length 字段指示长度,则必须静默丢弃。 因此,该字节最小为 20,最大为 4096。
Authenticator:16字节,用于进行身份验证,并在密码隐藏算法中使用。
这是一个 Radius 消息的 MD5 哈希值。Request Authenticator 值在密钥(Client 和 RADIUS Server 之间共享的密码)的生存期内应该是不可预测且唯一的,并且应具有全局和时间唯一性。Response Authenticator 则为MD5 (Code + ID + Length + RequestAuth + Attributes + Secret)。

Radius 代理场景下,需要重新对 Radius 消息进行加密签名。

Radius 报文类型
目前RFC所定义的 Radius 消息 Code 有40种左右,本文章仅介绍常用 Radius 消息。

Authentication 类

Type CodeMessageusedRef.
1Access-RequestClient传递用户信息进行认证RFC2865
2Access-AcceptServer确认用户通过认证RFC2865
3Access-RejectServer确认用户认证失败RFC2865
11Access-ChallengeEAP中继认证等场景下,Server根据认证信息生成的挑战字RFC2865

Authorization 类:Disconnect Message和Change-of-Authorization Message

Type CodeMessageusedRef.
40Disconnect-RequestServer请求断开用户的连接RFC5176
41Disconnect-ACKClient回应用户离线请求接受RFC5176
42Disconnect-NAKClient回应用户离线请求拒绝RFC5176
43CoA-RequestServer动态修改在线用户的权限RFC5176
44CoA-ACKClient回应动态授权请求接受RFC5176
45CoA-NAKClient回应动态授权请求拒绝RFC5176

Accounting 类

Type CodeMessageusedRef.
4Accounting-RequestClient请求开始计费和停止计费RFC2865
5Accounting-ResponseServer回应用户计费消息RFC2865
6Accounting-Status目前用于实时计费RFC3575

2.2.Radius 的AVP

Radius 的 Attribute Value Pairs 包含了协议进行 AAA 交互信息和配置细节,在此进行简单介绍。

在这里插入图片描述Type:1字节,标识 Radius Attribute 的类型。Radius 设备忽略未知类型的 Attribute。
Length:1字节,Radius Attribute 的长度。也即Type、Length 和 Value 三个字段的长度。RFC2865认为 Radius Server接收到无效长度的 Access-Request 消息,应返回 Access-Reject 消息。如果 Radius Client 接收到无效长度的 Access-Accept, Access-Reject 或 Access-Challenge 消息,应认为收到了 Access-Reject 消息或静默丢弃。
Value:不定长,标识 Radius Attribute 的具体信息。

Radius Attribute 中 Value 格式为以下5种之一:
text:1-253 字节,包含 UTF-8 编码的10646个字符。 不得发送长度为零 的文本。text 格式是 string 格式的一种。
string:1-253 字节,包含 1-255 的二进制数据。
address:IPv4/IPv6地址。
integer:32bits的无符号整数。
time:32bits的无符号整数,描述自1970年01月01日00:00:00以来的秒数。标准 Radius Attribute 已不再使用该数据类型。

常用 Radius Attribute
Type Code1=User-Name:Length=1~255,Value format=String

标识进行身份验证的用户的名称。该 Attribute 必须在 Access-Request 消息中发送(如果可用)。在 Access-Accept 消息中发送时,Client 应在此会话的所有 Accounting-Request 消息中使用访问-接受数据包中返回的名称。 如果 Access-Accept 消息还包括 Type Code6=Service-Type 为 Rlogin,则 NAS 在执行 Rlogin 功能时可以使用返回的用户名。

User-Name通常使用 UTF-8 编码的 text,有时也可使用RFC7542中定义的 Network Access Identifier 或 Public Key authentication 系统中的 ASN.1 格式。

在这里插入图片描述radius-server user-name domain-included配置设备向RADIUS服务器发送的报文中的用户名包含域名。并且用户名长度(纯用户名+域名分隔符+域名之和)不超过253字节。

Type Code2=User-Password:Length=16*n (1<=n<=8),Value format=String

标识进行身份验证的用户的密码,或用户在接收到 Access-Challenge 消息后的输入。该 Attribute 仅在 Access-Request 消息中出现,并在传输时隐藏真实密码。

该value首先由0x00填充在末尾使密码字节为16的倍数(最大为16*8字节),随后依据共享密钥对不同位置字符串进行单向哈希计算和异或计算。

Type Code3=CHAP-Password:Length=19,Value format=String

标识 PPP/PPPoE 的 CHAP 认证的响应值。该 Attribute 仅在 Access-Request 消息中出现。

Type Code4=NAS-IP-Address:Length=6,Value format=Address

标识进行用户身份验证的 NAS IP 地址,并且对于 Radius 服务器范围内的 NAS 应该是唯一的。该 Attribute 仅在 Access-Request 消息中出现,并且不得用于判定选择进行身份验证的共享密钥。 必须使用 Access-Request 消息的源 IP 地址来选择共享密钥。

在这里插入图片描述radius-attribute nas-ip配置NAS发送Radius报文使用的NAS-IP-Address属性。如果没有配置,取报文发送的出接口IP地址为NAS-IP-Address。
自动换行
类似的Type Code95=NAS-IPv6-Address于RFC3162中定义,用于IPv6场景。在这里插入图片描述radius-attribute nas-ipv6配置NAS发送Radius报文使用的NAS-IPv6-Address属性。

Type Code5=NAS-Port:Length=6,Value format=enum

标识进行身份验证的 NAS 的物理端口/电路端口。该 Attribute 仅在 Access-Request 消息中出现。

在这里插入图片描述radius-server nas-port-format用来配置NAS物理端口的形式。
NAS-Port可以包含NAS用户侧物理端口、Vlan ID、VPI和VCI等信息。

Type Code6=Service-Type:Length=6,Value format=integer

标识用户请求的服务类型或要提供的服务类型。 该 Attribute 可以在 Access-Request 和 Access-Accept 消息中出现。NAS 不需要实现所有服务类型,但必须将未知或不支持的服务类型视为已收到 Access-Reject。

使用时通常有如下定义:

ValueMessageusedRef.
1Login用户连接到主机,例如Web认证RFC2865
2Framed启动PPP等Framed协议,例如普通用户认证RFC2865
3Callback Login用户断开连接回滚后连接到主机RFC2865
4Callback Framed用户断开连接回滚后启动PPP等Framed协议RFC2865
5Outbound向用户授予对传出设备的访问权限RFC2865
6Administrative向用户授予NAS管理界面的访问权限,例如管理维护用户认证RFC2865
7NAS Prompt在NAS上为用户提供命令提示符,从中可以执行非特权命令RFC2865
8Authenticate Only仅请求身份验证,无需在Access-Accept(通常由代理服务器而非NAS本身使用)中返回授权信息RFC2865
9Callback NAS Prompt用户断开连接回滚后在NAS上为用户提供命令提示符,从中可以执行非特权命令RFC2865
10Call CheckAccess-Request包含用于指示正在接收呼叫,通常基于Called-Station-IdRFC2865
11Callback Administrative用户断开连接回滚后授予对 NAS 管理界面的访问权限,从中可以执行特权命令RFC2865
17Authorize OnlyRADIUS 和 Diameter 转换等场景使用,例如COA重认证时,在Access-Request中携带RFC3576
18Framed-Management用于通过帧管理协议进行远程设备管理,与Type Code133= Framed-Management-Protocol有关RFC5607
19Additional-AuthorizationDM消息中使用RFC7499

Type Code7=Framed-Protocol:Length=6,Value format=enum

指示用于成帧访问的帧。

RFC2865定义有在这里插入图片描述另有255表示Portal。通常接入类型取值均为1。

Type Code8=Framed-IP-Address:Length=6,Value format=ipv4addr

标识用户的IP地址。但是认为0.0.0.0、255.255.255.255、127.0.0.0/8网段地址非法。该 Attribute 出现在 Access-Request 消息中表明NAS的地址选择倾向,出现在 Access-Accept 消息中可用于表示为用户分配的地址。

Type Code9=Framed-IP-Netmask:Length=6,Value format=ipv4addr

标识用户的IP地址掩码。该 Attribute 出现在 Access-Request 消息中表明NAS的地址掩码选择倾向,出现在 Access-Accept 消息中可用于表示为用户分配的地址掩码。

Type Code11=Filter-Id:Length>= 3,Value format=text

标识用户的 filter list 的名称。

Type Code12=Framed-MTU:Length=6,Value format=integer

标识在未通过其他方式协商时(如 PPP)要为用户配置的最大传输单元。 该 Attribute 在 Access-Accept 数据包中使用;在 Access-Request 数据包中可用作 NAS 向 Server 表明其偏好,但 Server 可忽略。

Type Code14=Login-IP-Host:Length=6,Value format=integer

标识要连接用户的系统。该值为0或者0xFFFFFFFF时,表示不对登录用户IP地址进行检查。该 Attribute 在 Access-Accept 数据包中使用;该 Attribute 在 Access-Request 数据包中可用作 NAS 向 Server 表明其偏好,但 Server 可忽略。

Type Code15=Login-Service:Length=6,Value format=ipv4addr

标识登录用户可以使用的服务类型。仅出现在 Access-Accept 消息中,并且一个 Attribute 可以下发多个服务类型。取值为0表示telnet,1表示Rlogin,50表示SSH,51表示FTP,52表示Terminal。

Type Code18=Reply-Message:Length>=3,Value format=text

标识为用户展现消息。当该 Attribute 用于 Access-Accept 报文时,表示成功消息;用于 Access-Reject 报文时,表示拒绝消息;用于 COA-NAK 报文时,返回 COA 失败具体原因的描述字符串。

Type Code19=Callback-Number:Length>=3,Value format=String

标识认证服务器传递而来可以显示给用户的信息,如移动电话号码等。该 Attribute 在 Access-Accept 消息中使用;该 Attribute 在 Access-Request 消息中可用作 NAS 向 Server 提示返回相应信息,但 Server 可忽略。

Type Code24=State:Length>=3,Value format=String

如果 Radius Server 发送的 Access-Challenge 报文中包含该值,则在后续的 Access-Request 报文中必须包含相同的值。

Type Code25=Class:Length>=3,Value format=String

Radius Server 发送的 Access-Accept 报文中包含该值。如果支持计费功能,则在后续的 Accounting-Request 报文中必须包含相同的值。

Type Code26=Vendor-Specific:Length>=7,Value format=String

标识供应商支持自己的扩展属性。一个报文中可以有一个或者多个私有 Attribute ,每个私有 Attribute 中可以有一个或者多个 Sub-Attribute。

在这里插入图片描述Vendor-Id用于标识厂商自己所识别的属性值。常用厂商的 Vendor ID 有:
CISCO=9,Ericsson=193(…),Microsoft=311,Juniper=1411(…),HW=2011; ZTE=3902; ADSL论坛=3561,RUIJIE=4881,MAIPU=5651,REDBACK=2352; Ascend=3561,TP-Link Corporation Limited=11863,H3C=25506,China Mobile=28357;…
自动换行在这里插入图片描述radius-attribute support vendor配置允许解析其他厂商的属性。

Type Code27=Session-Timeout:Length=6,Value format=integer

设置在会话或提示终止之前向用户提供服务的最大秒数。该 Attribute 在 Access-Accept 消息中使用;在 Access-Challenge 消息中可用作EAP用户的重认证时长;在Accounting-Request 消息中,表示回应 Radius Server 下发的值,用于计费服务器获取用户认证服务器下发的原始剩余时长。
并且有时当用户的在线时长到达会话超时时长时,用户不会立即下线,设备会为其触发一次计费更新过程。之后,如果计费回应报文中携带的新会话超时时长非0,则设备更新用户的剩余在线时长;如果计费回应报文中携带的新会话超时时长为0或者未携带超时时长,则用户下线。

在这里插入图片描述quota-out命令用来设置用户配额(如用户流量或session-time)用完后设备对在线用户采取的策略,包括强制用户下线、保持用户在线、强制重定向用户三种策略。

Type Code28=Idle-Timeout:Length=6,Value format=integer

会话结束之前,允许用户持续空闲的最大秒数。

在这里插入图片描述用户正常上线后长时间没有访问流量,此时仍然会占用带宽,造成资源浪费。为了减少这种资源浪费,可执行本命令配置闲置切断功能。当闲置切断时间内流量低于指定的流量阈值的用户将强制下线,以减少资源的浪费。

Type Code29=Termination-Action:Length=6,Value format=integer

指定的NAS业务终止方式。取值0表示会话超时时长到达后,强制用户下线。取值1表示会话超时时长到达后,要求用户进行重认证。该 Attribute 在 Access-Accept 消息中使用。

Type Code30=Called-Station-Id:Length>=3,Value format=String

标识NAS信息。例如被呼叫号码,用户接入接口的MAC地址或用户接入的AP MAC和SSID等信息。

在这里插入图片描述called-station-id mac-format设置called-station-id中MAC地址的封装格式。在这里插入图片描述radius-server called-station-id include配置Called-Station-Id属性的构造方式。

Type Code31=Calling-Station-Id:Length>=3,Value format=String

标识客户端信息。例如,客户端号码,MAC地址,接口和vlan等。

在这里插入图片描述calling-station-id mac-format设置calling-station-id中MAC地址的封装格式。在这里插入图片描述radius-server calling-station-id配置Calling-Station-Id属性的构造方式。

Type Code32=NAS-Identifier:Length>=3,Value format=String

标识NAS设备名称。

在这里插入图片描述radius-server nas-identifier-format配置NAS-Identifier属性封装的形式。例如 hostname,vlan-id和ap-info 。

Type Code33=Proxy-State:Length>=3,Value format=String

通常由代理服务器发送到另一台服务器时使用,并且必须在 Access-Accept
Access-Reject 或 Access-Challenge 中原封不动返回。在COA、DM请求回应报文中使用,回应和请求保持一致。

点击此处回到目录
Type Code40=Acct-Status-Type:Length=6,Value format=Value

标识 Accounting-Request 消息的类型。1表示开始计费,2表示停止计费,3表示实时计费,7表示开启计费功能,8表示关闭计费功能,9-14为隧道计费保留使用,15为计费失败保留使用,

Type Code41=Acct-Delay-Time:Length=6,Value format=Value

标识上报发送计费报文花费的时间,以秒为单位。

Type Code42=Acct-Input-Octets:Length=6,Value format=Value

标识上行的字节数。

在这里插入图片描述radius-server traffic-unit命令用来配置RADIUS流量单位。默认的单位是Byte。该配置对 Type Code42=Acct-Input-Octets 和 Type Code43=Acct-Output-Octets 同时生效。

Type Code43=Acct-Output-Octets:Length=6,Value format=Value

标识上行的字节数。

Type Code44=Acct-Session-Id:Length>=3,Value format=Value

标识计费会话ID。同一个连接的开始计费、实时计费和停止计费报文的连接的计费ID必须相同。常用的格式有主机名(7字节)+槽号(1字节)+卡号(2字节)+端口号(2字节)+ {VPI(4字节)+VCI(5字节),外层VLAN(4字节)+内层VLAN(5字节)}等。

Type Code45=Acct-Authentic:Length=6,Value format=Value

标识如何通过 RADIUS、NAS 本身或其他远程身份验证协议对用户进行身份验证。在 Accounting-Request 消息中出现,其中1表示 Radius、2表示 local、3标识 remote。

Type Code46=Acct-Session-Time:Length=6,Value format=integer

标识用户的在线时长,以秒为单位。在 Accounting-Request 消息中出现。

Type Code47=Acct-Input-Packets:Length=6,Value format=integer

标识上行的包数。

Type Code48=Acct-Output-Packets:Length=6,Value format=integer

标识下行的包数。

Type Code49=Acct-Terminate-Cause:Length=6,Value format=value

标识会话结束的原因。仅出现在 Accounting-Request 消息中,且包含 Acct-Status-Type 属性为 stop。

目前定义了23种类型:

ValueDescriptionRef.ValueDescriptionRef.
1User RequestRFC2886
用户主动下线
13Port PreemptedRFC2886
NAS分配端口给更高优先级
2Lost CarrierRFC2886
握手失败/心跳超时
14Port SuspendedRFC2886
NAS挂起虚拟会话
3Lost ServiceRFC2886
LNS发起连接拆除
15Service UnavailableRFC2886
NAS不支持服务请求
4Idle TimeoutRFC2886
闲置超时中断
16CallbackRFC2886
NAS回滚新会话
5Session TimeoutRFC2886
时间/流量限制中断
17User ErrorRFC2886
用户输入错误
6Admin ResetRFC2886
管理员中断
18Host RequestRFC2886
登录主机终结/服务器的DECLINE
7Admin RebootRFC2886
管理员重启NAS
19Supplicant RestartRFC3580
802.1X请求状态机重新初始化
8Port ErrorRFC2886
NAS探测端口错误
20Reauthentication FailureRFC3580
802.1X重认证失败
9NAS ErrorRFC2886
NAS探测到内部错误
21Port ReinitializedRFC3580
802.1X端口MAC重新初始化
10NAS RequestRFC2886
NAS非错误型中断
22Port Administratively DisabledRFC3580
802.1X端口人为关闭
11NAS RebootRFC2886
非手动性NAS重启
23Lost Power[Ramprasad_Golla]
12Port UnneededRFC2886
端口不需要或down

Type Code50=Acct-Multi-Session-Id:Length>=6,Value format=text

标识唯一的 Accounting ID,便于将日志文件中的多个相关会话链接在一起。每个会话具有唯一的 Type Code44=Acct-Session-Id,但可以具有相同的 Type Code50=Acct-Multi-Session-Id。

Type Code54=Event-Timestamp:Length=6,Value format=Value

标识 NAS 发生事件以来至今为止的时间。该属性在 Accounting-Request 消息中出现。RFC2869定义起始时间为01/01/1970 00:00:00。该属性也可用于防止重放攻击。

Type Code60=CHAP-Challenge:Length>=7,Value format=string

标识 NAS 发送的 CHAP Challenge。仅在 Access-Request 消息种出现。

Type Code61=NAS-Port-Type:Length=6,Value format=text

标识 NAS 的端口类型。

在这里插入图片描述nas-port-type命令用来配置BAS接口的接入端口类型。
自动换行
目前已定义约40中端口类型,此处仅介绍常用值。
Type Code61=NAS-Port-Type 的 LNS 用户类型取值为5。
Type Code61=NAS-Port-Type 的 Ethernet 接口类型取值为15。
Type Code61=NAS-Port-Type 的 Wireless-other 接口类型取值为18。
Type Code61=NAS-Port-Type 的 IEEE 802.11 标准接口类型取值为19。

Type Code62=Port-Limit:Length=6,Value format=integer

标识 NAS 的端口用户数限制。

Type Code64=Tunnel-Type:Length=6,Value format=integer

标识要使用的隧道协议或正在使用的隧道协议。该属性可以出现在 Access-Request, Access-Accept 和 Accounting-Request 消息中。出现在 Access-Request 消息中时表示 Client 所偏好或支持的隧道协议。如果 Radius Server/Client 收到了不支持或未知的隧道协议,应视为收到 Access-Reject 消息。

目前已标准化了13种隧道协议:在这里插入图片描述//但是有时设备并不一定能识别所有隧道属性。

Type Code79=EAP-Message:Length>=3,Value format=string

标识 NAS 通过 EAP 对拨入用户进行身份验证的信息。NAS 将从用户接收的任何 EAP 消息放入一个或多个 EAP 属性中,并将它们作为 Access-Request 的一部分转发到 RADIUS Server,后者可以在 Access-Challenge, Access-Accept 和 Access-Reject 消息中返回 EAP 消息。

  • RADIUS Server 收到未知属性的 EAP 属性,返回 Access-Accept 消息。
  • Access-Accept 或 Access-Reject 消息中应只有一个 EAP 消息属性。
  • 通常出于数据加密及完整性的考虑,Type Code79=EAP-Message 和 Type Code80=Message-Authenticator 同步出现。
  • RFC3748中定义了 EAP Packet Format 为:在这里插入图片描述//该属性常见的用法为 Dot1X 认证等 EAP 认证。
    Radius Server 发送 Access-Challenge 携带 Code=Request 的 EAP 属性。
    BAS/BRAS/NAS 回应 Access-Request 携带 Code=Response 的 EAP 属性。
    Radius Server 确认认证结果,并携带对应的 EAP 属性。

Type Code80=Message-Authenticator:Length=18,Value format=string

可用于对 Access-Request 消息进行数字签名,以防止使用 CHAP、ARAP 或 EAP 身份验证方法欺骗访问请求。 接收携带 Type Code80=Message-Authenticator 属性 Access-Request 消息的 RADIUS Client/Server 必须计算其正确值,如果数据包与发送的值不匹配,则以静默方式丢弃数据包。

Type Code87=NAS-Port-Id:Length>=3,Value format=text

标识 NAS 用户接入的物理端口信息。

在这里插入图片描述radius-server format-attribute nas-port-id配置NAS-Port-Id属性的格式。主要包含了 NAS 的端口号,VlanID等信息。

Type Code88=NAS-Port-Id:Length>=3,Value format=text

标识 NAS 为用户指派PPP、DHCP等地址池的名字。

Type Code89=Chargeable-User-Identity:Length>=3,Value format=String

标识用户真实身份的别名,表示由家庭网络定义和提供的可收费身份,作为 Type Code1=User-Name 的补充或替代信息。

RFC4372中规定:

  • 家庭网络外部的 Radius Client(代理或 NAS)不得修改 CUI 属性。
  • 如果请求 CUI 属性的 Radius Client 接收到没有 CUI 属性的 Access-Accept 消息,则 Access-Accept 消息可能被视为收到 Access-Reject。
  • 如果 CUI 包含在 Access-Accept 消息中,则支持 CUI 属性的 Radius Client 必须确保 CUI 属性显示在 Accounting-Request(开始、临时和停止)消息中。 无论 Radius Client 是否请求 CUI 属性,此要求都适用。

Type Code90=Tunnel-Client-Auth-ID:Length>=3,Value format=text

标识隧道启动端(本端)在隧道建立的身份验证阶段使用的名称。

RFC2826中定义:在这里插入图片描述Tag 用于提供一种对引用同一隧道的同一数据包中的属性进行分组的标识。并且如果 Tag 取值0x00-0x1F,应视为属性所标识的隧道;如果取值0x20-0xff,应视为后续字符串字段的第一个字节。
该属性可以包含在 Access-Request 消息中用于向 Radius Server 表示某种偏好,并必须包含在 Access-Accept 消息中。
该属性应当包含在 Accounting-Request 消息中,并同时包含与隧道会话有关的 Type Code40=Acct-Status-Type 属性。

Type Code91=Tunnel-Server-Auth-ID:Length>=3,Value format=text

标识隧道终端(对端)在隧道建立的身份验证阶段使用的名称。

RFC2826中定义:在这里插入图片描述Tag 用于提供一种对引用同一隧道的同一数据包中的属性进行分组的标识。并且如果 Tag 取值0x00-0x1F,应视为属性所标识的隧道;如果取值0x20-0xff,应视为后续字符串字段的第一个字节。

Type Code92=NAS-Filter-Rule:Length>=3,Value format=text

标识应用于此用户的筛选规则。本属性可以在 Access-Accept, CoA-Request, 或Accounting-Request 消息中出现多次,但不得与 Type Code11=Filter-Id 和 NAS-Traffic-Rule(定义于草案中) 属性同时出现。

Type Code101=Error-Cause Attribute:Length=6,Value format=Value

标识无法接受 Disconnect Message 和 Change-of-Authorization Message 消息问题原因的详细信息。本属性可以在 Disconnect Message和Change-of-Authorization Message 消息中出现。

在这里插入图片描述//目前RFC中定义了如上所示的几种原因。

2.3.Radius 基本原理

相比于 TACACS/TACACS 协议更多用于用户访问及权限管理,Radius 协议更多用于用户计费服务。

其典型组网如下图所示:
在这里插入图片描述@:终端首先通过 PPP/PPPoE/IPoE 宽带拨号将用户信息传递给网络中的 BAS/BRAS/NAS 设备。
@:BAS/BRAS/NAS 作为 Radius Client 构造相应 Access-Request 消息发送给 Radius Server。
@:Radius Server 根据用户相应信息向客户发送 Access-Accept/Access-Reject 消息。

如果 Radius Server 认为需要更多的用户信息进行辅助认证则发送相应的 Access-Challenge 消息。
Radius Client 收到 Access-Challenge 消息后,依照所对应的消息进行辅助认证进行进一步的 Access-Request 消息交互。

@:在认证成功后,Radius Client 开始进行计费请求。发送 Accounting-Request 消息,其中携带 Type Code40=Acct-Status-Type 用于标识计费状态开始。
@:在检测到用户主动下线或会话闲置超时等原因后,Radius Client 发送 Accounting-Request 消息,其中携带 Type Code40=Acct-Status-Type 用于标识计费状态结束。
@:用户计费期间可以通过 Accounting-Request 消息或 Accounting-Status 实时确认用户的计费情况。

基本交互流程与下图所示:
在这里插入图片描述由于RADIUS协议合并了认证和授权的过程,因此认证接受报文中也包含了用户的授权信息。

RFC2865中定义其他特性
重传
RADIUS使用UDP作为传输协议,所以为了增加可靠性,RADIUS客户端支持报文重传。
在这里插入图片描述//radius-server retransmit timeout配置设备向RADIUS服务器发送报文的次数和超时重传时间。

主备模式
RADIUS服务器模板支持配置一个主服务器和零个或多个备份服务器。当主服务器存在并且处于活跃状态时,RADIUS选择主服务器处理用户请求,否则RADIUS选择备份服务器处理用户请求。
在这里插入图片描述radius-server命令用来配置RADIUS服务器组中的服务器,包括IP地址、端口号、所属的VPN实例、权重信息等

服务器状态探测
《RFC2865的2.6.Keep-Alives Considered Harmful章节》 强烈建议不要发送测试 RADIUS 请求以查看服务器是否处于活动状态的做法,因为它会增加负载并损害可伸缩性,而不会提供任何其他有用的信息。

但是具体实现上HW等厂家支持发送包含用户名和随机的密码的 Aaccess-Request 报文给服务器以验证服务器状态。

2.3.1.Radius 的动态授权-RFC5176

RFC5176-Dynamic Authorization Extensions to RADIUS中定义了 Radius 的动态授权功能。RADIUS Server 通过 Change of Authorization 消息修改在线用户的业务属性,通过 Disconnect Message 用户离线报文,由AAA服务器端发起将用户踢下线的操作。

需要注意的是RFC2865和RFC5176为 Informational Category 而非 Standards Track Category,因此其实现上需要具体分析。

Disconnect Message和Change-of-Authorization Message

Type CodeMessageusedRef.
40Disconnect-RequestServer请求断开用户的连接RFC5176
41Disconnect-ACKClient回应用户离线请求接受RFC5176
42Disconnect-NAKClient回应用户离线请求拒绝RFC5176
43CoA-RequestServer动态修改在线用户的权限RFC5176
44CoA-ACKClient回应动态授权请求接受RFC5176
45CoA-NAKClient回应动态授权请求拒绝RFC5176

Attributes属性
为了针对特定用户进行相应的操作,Radius Client/Server 应当通过属性对 NAS 和 会话进行识别。

RFC5176认为
属于 NAS identification attributes 的有:Type Code4=NAS-IP-Address,Code32=NAS-Identifier,Code95=NAS-IPv6-Address。
属于 Session identification attributes 的有 :Type Code1=User-Name,Code5=NAS-Port,Code8=Framed-IP-Address,Code26=Vendor-Specific,Code30=Called-Station-Id,Code31=Calling-Station-Id,Code44=Acct-Session-Id,Code50=Acct-Multi-Session-Id,Code87=NAS-Port-Id,Code89=Chargeable-User-Identity,Code96=Framed-Interface-Id,Code97=Framed-IPv6-Prefix。

Proxy代理场景
在代理场景下 Radius 消息应当包含 Type Code33=Proxy-State attributes,并且代理或 BAR/BRAS/NAS 可以不转发 Type Code33=Proxy-State attributes、Type Code24=State attributes 或 Type Code25=Class attributes,但不得修改数据包中现有存在的该属性。

处于安全的考虑,BAR/BRAS/NAS 通常可以执行 RPF(reverse path forwarding)检查。

典型Change-of-Authorization Message交互过程
在这里插入图片描述
RADIUS Server 根据特定用户的业务信息及用户信息制定/修改业务策略,然后向 BAS/BRAS/NAS 设备发送 CoA-Request 消息,请求更改用户的授权信息。BAS/BRAS/NAS 如果更改成功,更改用户的授权信息并回应 CoA-ACK 消息;否则,回应 CoA-NAK 消息。

典型Disconnect Message交互过程
在这里插入图片描述RADIUS Server 根据特定用户的业务向 BAS/BRAS/NAS 设备发送 DM-Request 消息,请求用户下线。BAS/BRAS/NAS 如果更改成功,强制用户下线并回应 DM-ACK 消息;否则, DM-NAK 消息。

点击此处回到目录

3.RADIUS 工作典型方案

Radius协议的具体应用上有多种方案,通常应用于园区网、校园网以及大型商超、酒店和车站等场所。
典型方案有DHCP+Web认证、PPPoE+静态认证、IPoE+MAC认证,等。有时以上方案也可混合使用。

3.1.HW的AAA工作原理

由于设备型号及其支持功能之间的差异,这里仅参考介绍HW交换路由设备的一种可能的实现方案。

命令行鉴权:用于判断用户是否有权限执行某条命令。分为级别鉴权和Task鉴权两种方式。

@级别鉴权
命令行具有不同级别,对于具有不同级别的账号只能使用不高于当前级别的命令行。

级别级别定义功能
0参观级仅限登录、连通性检测和ssh/telnet其他设备
1监控级系统维护检查,display等命令
2配置级系统基本配置和业务配置等命令
3管理级最高权限命令,系统文件硬件管理等所有命令

为了实现更精细化管理,可以将命令级别提升到0~15级。默认情况下,配置级命令为10级权限,管理级命令为15级权限。此时其余级别无对应命令,只能使用低于当前级别的权限命令。
并可以根据需要指定特定命令的权限级别。

在此种情况下,可以为指定用户账号的权限级别。并同时结合命令权限级别使用。
在这里插入图片描述local-user level设置本地用户的权限级别。

在这里插入图片描述command-privilege设置指定视图内的命令的级别。

ssh/telnet本地管理登录的典型配置

user-interface vty 0 4
 authentication-mode aaa
 protocol inbound all
#
aaa 
 local-user test password test state active
 local-user test privilege level 15
 local-user test service-type telnet ssh
#
ssh client first-time enable 
stelnet server enable 
#

此外部分设备还要配置ssh登录端口以及存在账号密码等要求。
ssh server permit interface all 命令和ssh server-source all-interface用于指定ssh登录端口。

@Task鉴权
用户账号加入 User group,具有同一 User group 的用户账号具有相同权限;
每个 User group 可以绑定多个 Task group;
每个 Task group 包含了不同类命令。

在此种情况下,通过自定义 Task group 包含的命令类别以及自定义 User group 包含的 Task group 来为不同的用户账号赋予相应的操作权限。

Task鉴权本地管理登录的典型配置

undo user-security-policy enable
#
user-interface vty 0 4
 authentication-mode aaa
 protocol inbound all
#
aaa 
 user-name minimum-length 2
 user-password min-len 3
 local-user test password test state active
 local-user test service-type telnet ssh
 local-user test user-group temp
#
 task-group temp
   task interface-mgr read write execute
   task aaa read write execute
   task config read write execute
   task vlan read write execute
   task dhcp read write execute
   task shell read write execute
   task cli read execute
 #
 user-group temp
   task-group temp
#
ssh client first-time enable 
stelnet server enable 
#

此时登录仅能使用 temp 模板下的命令行。但需要注意Task鉴权方式仅在部分设备上支持。

自动换行
基于域的用户管理:所有用户都属于某个域。用户属于哪个域是由用户名中带的“@”后的字符串来决定的。test@temp账号属于temp域,如果未携带域名则表示属于默认域。

路由器通过域来进行用户管理,域下可以进行缺省授权配置、RADIUS/HWTACACS模板配置、认证和计费方案的配置等。系统默认存在三个缺省域。某些设备默认存在2个域。

缺省域功能缺省属性
default0认证前用户的归属域本地认证
不计费
default1认证时用户的缺省归属域RADIUS认证
RADIUS计费
default_admin操作用户的缺省归属域先本地后RADIUS认证
不计费

在这里插入图片描述default0 和 default1 通常指的是 BAS/BRAS/NAS 的接入用户的默认域;default_admin 通常指的是登录设备的默认域。

@:所有对于接入用户的 AAA 操作都是在域视图下实现的,为此必须先在 AAA 视图下分别配置相应的认证方案、授权方案、计费方案。
@:未应用 AAA 方案的域使用默认的 AAA 方案。
@:优先使用AAA服务器下发的授权属性。

域账号temp本地管理 RADIUS Local 登录的典型配置

user-interface vty 0 4
 authentication-mode aaa
 protocol inbound all
#
radius-server group temp
 radius-server authentication 10.1.1.1 1812 weight 0
 radius-server accounting 10.1.1.1 1813 weight 0
 radius-server shared-key-cipher radius-key
 radius-server retransmit 2
# 
aaa
 local-user test@temp password test state active
 local-user test@temp privilege level 15
 local-user test@temp service-type telnet ssh
#
 authentication-scheme 1
   authentication-mode radius local
 #
 accounting-scheme 1
   accounting-mode radius
 #
 domain temp
   authentication-scheme 1
   accounting-scheme 1
   radius-server group temp
#
ssh client first-time enable 
stelnet server enable 
#

此处定义本地登录用户test携带域名temp,也即test用于受temp域管理。否则受默认 default_admin 域的默认 AAA 策略。

3.2.Radius的PPPoE认证方案

在这里插入图片描述用户终端使用PPPoE拨号上线。

radius-server group rd1
 radius-server shared-key-cipher radius-key
 radius-server authentication 192.168.7.249 1645 weight 0
 radius-server accounting 192.168.7.249 1646 weight 0
#
interface Virtual-Template1
 ppp authentication-mode chap
#
interface Ethernet1/0/0
 pppoe-server bind Virtual-Template 1
 ip address 10.82.0.1 255.255.255.0
 bas
  access-type layer2-subscriber 
  default-domain authentication ppp-user isp1
#
interface Ethernet1/0/1
 ip address 192.168.6.1 255.255.255.0
#
ip pool pool1 bas local
 gateway 10.82.0.1 255.255.255.0
 section 0 10.82.0.2 10.82.0.200
 dns-server 192.168.7.249
#
aaa
authentication-scheme auth1
accounting-scheme acct1
domain isp1
 authentication-scheme auth1
 accounting-scheme acct1
 radius-server group rd1
 ip-pool pool1
#

点击此处回到目录

更新

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值