# RADIUS 认证服务器 ## RADIUS 协议概述 RADIUS(Remote Authentication Dial-In User Service)是 WiFi 企业网络的核心认证基础设施,定义了客户端(NAS/AP)与认证服务器之间的通信协议。 ### 协议基础 | 属性 | 值 | |------|-----| | 传输协议 | UDP | | 认证端口 | 1812 (或传统的 1645) | | 计费端口 | 1813 (或传统的 1646) | | 加密方式 | MD5-based(仅部分字段加密) | ### RADIUS 消息类型 | Type | 名称 | 方向 | 说明 | |------|------|------|------| | 1 | Access-Request | NAS→Server | 认证请求 | | 2 | Access-Accept | Server→NAS | 认证成功 | | 3 | Access-Reject | Server→NAS | 认证失败 | | 4 | Accounting-Request | NAS→Server | 计费记录 | | 5 | Accounting-Response | Server→NAS | 计费响应 | | 7 | CoA-Request | Server→NAS | 变更授权(动态策略) | | 28 | Disconnect-Request | Server→NAS | 强制断开用户 | ## RADIUS 属性系统 RADIUS 使用类型-长度-值(TLV)格式的属性传递信息: ``` ┌──────────┬──────────┬──────────────┐ │ Type (1) │ Length (1)│ Value (var) │ └──────────┴──────────┴──────────────┘ ``` ### WiFi 认证关键属性 | Attribute | Type | 说明 | |-----------|------|------| | User-Name | 1 | 用户名 | | User-Password | 2 | 密码(加密) | | NAS-IP-Address | 4 | AP 的 IP 地址 | | NAS-Identifier | 32 | AP 的名称/ID | | Called-Station-ID | 34 | AP 的 BSSID (目标) | | Calling-Station-ID | 37 | STA 的 MAC 地址 (源) | | EAP-Message | 79 | EAP 载荷(分片传输) | | Message-Authenticator | 80 | 防重放/完整性校验 | ### WiFi 密钥分发属性 WPA/WPA2 Enterprise 需要 RADIUS 传递密钥材料: ``` MSK (Master Session Key) = 64 bytes PMK (Pairwise Master Key) = MSK[0:32] RADIUS 不直接发送 MSK,而是通过 vendor-specific attributes: Microsoft: EAP-MPPE-Keys (Vendor-Specific, VendorID=311) → 包含 MSK 的加密版本 标准方式: RADIUS 使用 Shared Secret 对 MSK 进行加密传输 ``` ## FreeRADIUS 配置示例 ### 基本 sites-enabled 配置 ``` authorize { preprocess chap mschap suffix "files" # 本地用户文件 # suffix "ldap" # LDAP 集成 eap { if (ok) { update control { Auth-Type := EAP } } } } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } eap { if (userlock) { reject } if (noop) { ok } } } post-auth { exec logintime # 审计日志 } ``` ### EAP 配置(eap.conf) ``` eap { default_eap_type = tls timer_expire = 60 ignore_unknown_eap_packets = yes tls { private_key_file = ${certdir}/server.key certificate_file = ${certdir}/server.crt CA_file = ${certdir}/ca.crt cipher_suite = "DEFAULT:!aNULL:!eNULL:!3DES:!RC4" tls_version_min = "1.2" } ttls { default_eap_type = mschapv2 } peap { default_eap_type = mschapv2 } } ``` ## RADIUS 高可用架构 ### 负载均衡与故障转移 ``` ┌──────────┐ │ Load │ AP们 ─────→│ Balancer │ └────┬─────┘ │ ┌──────┴──────┐ ▼ ▼ RADIUS-1 RADIUS-2 (Primary) (Secondary) │ │ ▼ ▼ SQL/LDAP Database 配置: - AP 配置多个 RADIUS 服务器(主+备) - 主服务器无响应 → 自动切换到备用 - 共享用户数据库确保一致性 ``` ### WLC 上的 RADIUS 配置示例 ``` primary key radius-server identifier RADIUS1 ip-address 10.0.1.10 auth-port 1812 acct-port 1813 secondary key radius-server identifier RADIUS2 ip-address 10.0.1.11 auth-port 1812 acct-port 1813 wlan 1 security dot1x authentication primary server-group RADIUS-GROUP security dot1x authentication fallback server-group RADIUS-BACKUP ``` ## RADIUS 安全最佳实践 | 措施 | 说明 | |------|------| | 使用强 Shared Secret | ≥32 字符,每个 NAS 独立密钥 | | 启用 Message-Authenticator | 防止重放和篡改攻击 | | IP 白名单 | 只允许已知 AP/WLC 的 IP 连接 | | RADIUS over TLS (radsec) | RFC 6678,加密整个 RADIUS 交换 | | 定期审计日志 | 监控异常认证模式 |