35.5. 配置 FreeRADIUS 以验证使用 EAP 保护的网络客户端
FreeRADIUS 支持通过不同的扩展验证协议(EAP)的方法。但是,对于安全网络,请配置 FreeRADIUS 以仅支持以下安全 EAP 身份验证方法:
- EAP-TLS(传输层安全)使用安全 TLS 连接来使用证书验证客户端。要使用 EAP-TLS,需要每个网络客户端的 TLS 客户端证书,以及服务器的服务器证书。请注意,同样的证书颁发机构(CA)必须已发布了证书。始终使用您自己的 CA 来创建证书,因为您使用的 CA 发布的所有客户端证书都可以向 FreeRADIUS 服务器进行身份验证。
- EAP-TTLS (隧道化的传输层安全)使用安全 TLS 连接作为外部身份验证协议,来建立隧道。然后,内部身份验证使用密码身份验证协议(PAP)或质询握手身份验证协议(CHAP)。要使用 EAP-TTLS,您需要一个 TLS 服务器证书。
- EAP-PEAP(受保护的身份验证协议)使用安全 TLS 连接作为外部身份验证协议来设置隧道。验证器验证 RADIUS 服务器的证书。之后,请求方通过使用 Microsoft 挑战握手身份验证协议版本 2 (MS-CHAPv2)或其他方法,通过加密的隧道来进行身份验证。
默认的 FreeRADIUS 配置文件充当文档,并描述了所有参数和指令。如果要禁用某些特性,请注释掉它们,而不是删除配置文件中的相应部分。这可让您保留配置文件和包含的文档的结构。
先决条件
-
freeradius
软件包已安装。 -
/etc/raddb/
目录中的配置文件保持不变,就像freeradius
软件包提供的那样。 服务器上存在以下文件:
-
FreeRADIUS 主机的 TLS 私钥:
/etc/raddb/certs/server.key
-
FreeRADIUS 主机的 TLS 服务器证书:
/etc/raddb/certs/server.pem
-
TLS CA 证书:
/etc/raddb/certs/ca.pem
如果您将文件存储在不同的位置或者它们有不同的名称,请在
/etc/raddb/mods-available/eap
文件中相应地设置private_key_file
、certificate_file
和ca_file
参数。-
FreeRADIUS 主机的 TLS 私钥:
流程
如果带有 Diffie-Hellman(DH)参数的
/etc/raddb/certs/dh
不存在,就创建一个。例如,要创建带有 2048 位素数的 DH 文件,请输入:# openssl dhparam -out /etc/raddb/certs/dh 2048
为了安全起见,请不要使用小于 2048 位素数的 DH 文件。根据位数,文件的创建可能需要几分钟。
使用 DH 参数对 TLS 私钥、服务器证书、CA 证书和文件设置安全权限:
# chmod 640 /etc/raddb/certs/server.key /etc/raddb/certs/server.pem /etc/raddb/certs/ca.pem /etc/raddb/certs/dh # chown root:radiusd /etc/raddb/certs/server.key /etc/raddb/certs/server.pem /etc/raddb/certs/ca.pem /etc/raddb/certs/dh
编辑
/etc/raddb/mods-available/eap
文件:在
private_key_password
参数中设置私钥的密码:eap { ... tls-config tls-common { ... private_key_password = key_password ... } }
根据您的环境,将
eap
指令中的default_eap_type
参数设为您使用的主要 EAP 类型:eap { ... default_eap_type = ttls ... }
对于安全环境,请仅使用
ttls
、tls
或peap
。注释掉
md5
指令,以禁用不安全的 EAP-MD5 身份验证方法:eap { ... # md5 { # } ... }
请注意,在默认的配置文件中,其他不安全的 EAP 身份验证方法默认被注释掉了。
编辑
/etc/raddb/sites-available/default
文件,然后注释掉eap
以外的所有身份验证方法:authenticate { ... # Auth-Type PAP { # pap # } # Auth-Type CHAP { # chap # } # Auth-Type MS-CHAP { # mschap # } # mschap # digest ... }
这使 EAP 只为外部身份验证启用,并禁用了纯文本身份验证方法。
编辑
/etc/raddb/clients.conf
文件:在
localhost
和localhost_ipv6
客户端指令中设置安全密码:client localhost { ipaddr = 127.0.0.1 ... secret = localhost_client_password ... } client localhost_ipv6 { ipv6addr = ::1 secret = localhost_client_password }
为网络认证方添加客户端指令:
client hostapd.example.org { ipaddr = 192.0.2.2/32 secret = hostapd_client_password }
可选:如果其他主机也应该能够访问 FreeRADIUS 服务,请也为它们添加客户端指令,例如:
client <hostname_or_description> { ipaddr = <IP_address_or_range> secret = <client_password> }
ipaddr
参数接受 IPv4 和 IPv6 地址,您可以使用可选的无类别域间路由(CIDR)表示法来指定范围。但是,在这个参数中您只能设置一个值。例如,要授予对 IPv4 和 IPv6 地址的访问权限,您必须添加两个客户端指令。为客户端指令使用一个描述性名称,如主机名或一个描述 IP 范围在哪里使用的词语。
如果要使用 EAP-TTLS 或 EAP-PEAP,请将用户添加到
/etc/raddb/users
文件中:example_user Cleartext-Password := "user_password"
对于应使用基于证书的身份验证(EAP-TLS)的用户,不要添加任何条目。
验证配置文件:
# radiusd -XC ... Configuration appears to be OK
在
firewalld
服务中打开 RADIUS 端口:# firewall-cmd --permanent --add-service=radius # firewall-cmd --reload
启用并启动
radiusd
服务:# systemctl enable --now radiusd
故障排除
停止
radiusd
服务:# systemctl stop radiusd
以 debug 模式启动该服务:
# radiusd -X ... Ready to process requests
-
在 FreeRADIUS 主机上执行验证测试,如
验证
部分中所述。
后续步骤
- 禁用不再需要的身份验证方法,以及您不使用的其他功能。