RADIUS:远程认证拨号用户服务
RADIUS 认证完全指南
什么是 RADIUS?
RADIUS(Remote Authentication Dial-In User Service,远程认证拨号用户服务)是一种提供集中式认证、授权和记账(AAA)的网络协议。它最初设计用于管理拨号上网用户,但如今已成为几乎所有网络设备(交换机、无线控制器、VPN 网关等)进行用户身份验证的标准方式。
想象一下,在一个拥有数百台网络设备的企业中,为每台设备单独设置用户名和密码既低效又不安全。RADIUS 通过将所有用户凭证集中存放在一台服务器上,轻松解决了这一问题。任何支持 RADIUS 的网络设备都可以将登录请求转发给中心服务器进行验证,无需维护本地账户数据库。
为什么需要 RADIUS?
- 统一管理:用户账号只需在 RADIUS 服务器上创建一次,即可用于所有网络设备。
- 增强安全:可强制实施强密码策略、多因素认证等,并且登录日志集中存储,便于审计。
- 精确授权:除了让用户登录,还能指定用户的访问权限,例如 VLAN 分配、访问控制列表(ACL)等。
- 商用记账:记录用户的上网时长、流量等数据,常用于计费系统或部门成本分摊。
RADIUS 的核心功能:AAA 框架
RADIUS 是一个典型实现 AAA(Authentication、Authorization、Accounting)协议的范例:
- 认证(Authentication):验证“你是谁”。用户提供用户名和密码,RADIUS 服务器检查其合法性。常用方法包括 PAP、CHAP、MS-CHAPv2、EAP 等。
- 授权(Authorization):确定“你能做什么”。认证成功后,服务器可返回用户的角色、可访问的网络资源、IP 地址、会话超时等配置信息。
- 记账(Accounting):记录“你做了什么”。记录用户登录/注销时间、发送/接收的字节数等,用于审计或计费。
注意:虽然 AAA 分为三个独立过程,但在 RADIUS 协议中,认证和授权通常在一次请求-响应交互中完成。
RADIUS 协议是如何工作的?
关键组件
- NAS(Network Access Server,网络接入服务器):作为 RADIUS 客户端的网络设备,如无线 AP、交换机、防火墙或 VPN 集中器。它负责阻挡未授权访问,并将用户凭据转发给 RADIUS 服务器。
- RADIUS 服务器:核心认证引擎,通常是一个运行 FreeRADIUS、Microsoft NPS 或 Cisco ISE 等服务端软件的主机。它接收认证请求,查询后端用户数据库(如 SQL 数据库、LDAP、Active Directory),并返回允许或拒绝。
通信流程(以无线网络认证为例)
- 用户设备(如笔记本电脑)尝试连接企业 Wi-Fi,并提交用户名和密码。
- 无线 AP(NAS)生成一个“Access-Request(接入请求)”报文,将用户名、加密后的密码以及 NAS 自身的信息(如 IP 地址、端口号)打包发送给 RADIUS 服务器。通信使用 UDP 协议,认证端口默认为
1812,记账端口为1813(旧版常用1645/1646)。 - RADIUS 服务器收到请求后,根据用户名查找数据库,并验证密码哈希值。
- 服务器根据验证结果返回三种可能报文之一:
- Access-Accept(接入接受):认证成功。报文中通常携带授权属性,如用户所属 VLAN ID、会话超时时间、过滤 ID 等。NAS 据此允许用户上网。
- Access-Reject(接入拒绝):认证失败。凭证错误、账户过期或策略拒绝时返回此报文。
- Access-Challenge(接入挑战):要求额外信息。常用于 MS-CHAPv2 双向认证或一次性密码提示。
- 若认证成功,NAS 可向服务器发送“Accounting-Request(记账请求)”报文,开始计费记录。用户断线时,NAS 会发送一个包含总流量的停止记账报文。
关键报文类型一览
| 类型代码 | 报文名称 | 作用 |
|---|---|---|
| 1 | Access-Request | NAS 向服务器提交认证请求 |
| 2 | Access-Accept | 服务器通知 NAS 认证通过 |
| 3 | Access-Reject | 服务器通知 NAS 认证拒绝 |
| 11 | Access-Challenge | 服务器要求 NAS 提供更多信息 |
| 4 | Accounting-Request | NAS 向服务器发送记账数据 |
| 5 | Accounting-Response | 服务器确认收到记账数据 |
RADIUS 报文结构与安全性
每个 RADIUS 报文由固定头部和多个属性-长度-值(Attribute-Length-Value,AVP)对组成。重要的安全机制包括:
- 共享密钥(Shared Secret):NAS 和 RADIUS 服务器之间的预置密码。用于生成响应验证器(Response Authenticator)和对用户密码进行 XOR 加密。共享密钥不会被网络传输,仅用于计算哈希。
- 用户密码保护:明文密码(如 PAP)通过一个基于共享密钥和请求验证器的 MD5 计算过程进行掩盖。但这并非高强度加密,容易被离线暴力破解。因此更推荐使用挑战-应答协议(如 CHAP、MS-CHAPv2)或基于 EAP 的强认证。
- 报文验证器:请求报文中包含 16 字节的随机请求验证器,响应报文则包含用 MD5 计算的响应验证器,可防止重放攻击和欺骗。
对于增强安全性,现代部署常使用 RADIUS over TLS(RadSec) 来加密整个报文传输,或采用 EAP-TTLS/PAP 将用户凭据封装在 TLS 隧道中。
常用属性举例
RADIUS 的强大之处在于其丰富的属性,用于传递细粒度控制信息。下面是几个最常见的标准属性(IETF 定义):
| 属性编号 | 属性名称 | 用途示例 |
|---|---|---|
| 1 | User-Name | 用户提交的登录名 |
| 2 | User-Password | 用户密码(已加密) |
| 6 | Service-Type | 服务类型,如 Framed(2)、Login(1) |
| 8 | Framed-IP-Address | 为用户分配的 IP 地址 |
| 12 | Framed-MTU | 最大传输单元 |
| 26 | Vendor-Specific | 厂商自定义属性,如 Cisco AVPair |
| 27 | Session-Timeout | 会话最大时长(秒) |
| 64/65 | Tunnel-Type / Tunnel-Medium-Type | 用于强制 VLAN(值 13 为 VLAN) |
| 81/82 | Tunnel-Private-Group-ID | 指定 VLAN ID 或 VRID |
厂商专用属性(VSA)极大地扩展了 RADIUS 的功能,使思科、华为、Aruba 等厂商能够实现自定义的 ACL 下发、带宽限制等功能。
初学者动手:使用 FreeRADIUS 搭建测试环境
以下步骤帮助你在 Linux(以 Ubuntu 为例)上快速搭建一个简易 RADIUS 服务,并用客户端工具测试。
1. 安装 FreeRADIUS
sudo apt update
sudo apt install freeradius freeradius-utils freeradius-mysql -y
2. 配置共享密钥与测试用户
FreeRADIUS 默认的测试用户在 /etc/freeradius/3.0/users 文件中定义。打开该文件,你会看到类似配置:
# 测试用户"bob",密码"hello"
bob Cleartext-Password := "hello"
Reply-Message := "Hello, %{User-Name}"
该文件中的条目既可用于认证,也可直接填入授权属性。默认配置通常允许 PAP 或 CHAP 验证。
3. 配置客户端(NAS)条目
要允许外部 NAS 发送请求,必须定义客户端信息。编辑 /etc/freeradius/3.0/clients.conf,添加:
client test_nas {
ipaddr = 127.0.0.1
secret = testing123
shortname = localhost
}
secret 即共享密钥。
4. 启动服务并测试
sudo systemctl restart freeradius
sudo freeradius -X # 前台调试模式,查看详细日志
在另一个终端使用 radtest 工具测试:
radtest bob hello 127.0.0.1 0 testing123
若成功,会看到 Access-Accept 消息。
5. 关联真实数据库
FreeRADIUS 可以对接 SQL、LDAP、Kerberos 等。以 MySQL 为例,先创建 RADIUS 数据库表(系统包通常提供 schema 导入),然后配置 /etc/freeradius/3.0/mods-config/sql/main/mysql/queries.conf,并启用 sql 模块。这样用户验证就变成了数据库查询。
典型应用场景
1. 企业 Wi-Fi 802.1X 认证
员工设备通过 PEAP-MSCHAPv2 或 EAP-TLS 连接 Wi-Fi。无线控制器(WLC)作为 NAS,将 EAP 报文封装在 RADIUS 报文中发送给 NPS 或 ISE 服务器。认证成功后可自动将用户分配到对应的 VLAN(例如,IT 部 VLAN 10,销售部 VLAN 20)。
2. 有线网络 802.1X
智能交换机端口可配置 802.1X,当电脑接入时,必须提供域账号。认证失败则端口被锁定,无法通信。
3. 虚拟专用网络(VPN)
远程员工通过 VPN 客户端拨入,VPN 网关将登录请求通过 RADIUS 发往认证服务器,验证后允许接入内网。
4. 管理员登录网络设备
为防止所有管理员共用一个本地密码,交换机和路由器可配置 RADIUS 认证。登录时执行 login authentication radius,不同管理员使用个人账号,且可赋予不同命令授权(TACACS+ 更擅长命令级授权,但 RADIUS 结合 VSA 也能实现部分功能)。
RADIUS 与 TACACS+ 的简单对比
初学者可能听说 TACACS+ 也是 AAA 协议。它们的主要区别:
- TACACS+:思科开发的协议,使用 TCP(端口 49),将认证、授权、记账完全分开,且整个报文加密。更擅长命令级授权,常用于管理设备。
- RADIUS:IETF 标准,使用 UDP,认证和授权绑定在一起,仅对用户密码部分加密。扩展性极佳,广泛支持各种网络准入场景。
通常,设备管理用 TACACS+,网络准入控制用 RADIUS 是通用最佳实践。
总结
RADIUS 是现代网络身份验证的基石。它通过将验证任务集中化,极大地简化了大规模网络的管理,同时为无线安全、有线准入、VPN 等提供了坚实的基础。理解其 AAA 模型、基本报文交互和关键属性,是进一步学习 802.1X、动态 VLAN 下发或网络设备管理的必修课。
现在,你可以尝试搭建自己的 RADIUS 测试环境,体验集中式认证带来的便利与安全。