20.3. 配置 FreeRADIUS ,以使用 EAP 安全地验证网络客户端
FreeRADIUS 支持通过不同的扩展验证协议(EAP)的方法。但是,对于受支持的安全场景,请使用 EAP-TTLS (隧道传输层安全)。
使用 EAP-TTLS ,客户端使用安全 TLS 连接作为外部身份验证协议来设置隧道。然后,内部身份验证使用 LDAP 向身份管理进行身份验证。要使用 EAP-TTLS,您需要一个 TLS 服务器证书。
默认的 FreeRADIUS 配置文件充当文档,并描述了所有参数和指令。如果要禁用某些特性,请注释掉它们,而不是删除配置文件中的相应部分。这可让您保留配置文件和包含的文档的结构。
先决条件
-
您已安装了
freeradius
和freeradius-ldap
软件包。 -
/etc/raddb/
目录中的配置文件保持不变,并由freeradius
软件包提供。 - 主机已在 Red Hat Identity Management (IdM)域中注册。
流程
创建一个私钥并从 IdM 请求一个证书:
ipa-getcert request -w -k /etc/pki/tls/private/radius.key -f /etc/pki/tls/certs/radius.pem -o "root:radiusd" -m 640 -O "root:radiusd" -M 640 -T caIPAserviceCert -C 'systemctl restart radiusd.service' -N freeradius.idm.example.com -D freeradius.idm.example.com -K radius/freeradius.idm.example.com
# ipa-getcert request -w -k /etc/pki/tls/private/radius.key -f /etc/pki/tls/certs/radius.pem -o "root:radiusd" -m 640 -O "root:radiusd" -M 640 -T caIPAserviceCert -C 'systemctl restart radiusd.service' -N freeradius.idm.example.com -D freeradius.idm.example.com -K radius/freeradius.idm.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow certmonger
服务将私钥存储在/etc/pki/tls/private/radius.key
文件中,将证书存储在/etc/pki/tls/certs/radius.pem
文件中,并设置安全权限。另外,certmonger
将监控证书,在证书过期前续订证书,并在证书续订后重启radiusd
服务。验证 CA 是否已成功发布证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Diffie-Hellman (DH)参数创建
/etc/raddb/certs/dh
文件。例如,要创建带有 2048 位素数的 DH 文件,请输入:openssl dhparam -out /etc/raddb/certs/dh 2048
# openssl dhparam -out /etc/raddb/certs/dh 2048
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了安全起见,请不要使用小于 2048 位素数的 DH 文件。根据位数,文件的创建可能需要几分钟。
编辑
/etc/raddb/mods-available/eap
文件:在
tls-config tls-common
指令中配置与 TLS 相关的设置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
eap
指令中的default_eap_type
参数设为ttls
:eap { ... default_eap_type = ttls ... }
eap { ... default_eap_type = ttls ... }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注释掉
md5
指令,以禁用不安全的 EAP-MD5 身份验证方法:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,在默认的配置文件中,其他不安全的 EAP 身份验证方法默认被注释掉了。
编辑
/etc/raddb/sites-available/default
文件,然后注释掉eap
以外的所有身份验证方法:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这将只对外部身份验证启用了 EAP,并禁用了纯文本身份验证方法。
编辑
/etc/raddb/sites-available/inner-tunnel
文件,并进行以下更改:注释掉
-ldap
条目,并将ldap
模块配置添加到authorize
指令中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
authenticate
指令中取消 LDAP 身份验证类型的注释:authenticate { Auth-Type LDAP { ldap } }
authenticate { Auth-Type LDAP { ldap } }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
启用
ldap
模块:ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
# ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/etc/raddb/mods-available/ldap
文件,并进行以下更改:在
ldap
指令中,设置 IdM LDAP 服务器 URL 和基本可分辨名称(DN):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器 URL 中指定
ldaps
协议,以便在 FreeRADIUS 主机和 IdM 服务器之间使用 TLS 加密的连接。在
ldap
指令中,启用 IdM LDAP 服务器的 TLS 证书验证:tls { ... require_cert = 'demand' ... }
tls { ... require_cert = 'demand' ... }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
编辑
/etc/raddb/clients.conf
文件:在
localhost
和localhost_ipv6
客户端指令中设置安全密码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为网络验证器添加客户端指令:
client hostapd.example.org { ipaddr = 192.0.2.2/32 secret = hostapd_client_password }
client hostapd.example.org { ipaddr = 192.0.2.2/32 secret = hostapd_client_password }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果其他主机也能够访问 FreeRADIUS 服务,也为它们添加客户端指令,例如:
client <hostname_or_description> { ipaddr = <IP_address_or_range> secret = <client_password> }
client <hostname_or_description> { ipaddr = <IP_address_or_range> secret = <client_password> }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipaddr
参数接受 IPv4 和 IPv6 地址,您可以使用可选的无类别域间路由(CIDR)表示法来指定范围。但是,在这个参数中您只能设置一个值。例如,要授予对 IPv4 和 IPv6 地址的访问,您必须添加两个客户端指令。为客户端指令使用一个描述性名称,如主机名或一个描述 IP 范围在哪里使用的词语。
验证配置文件:
radiusd -XC
# radiusd -XC ... Configuration appears to be OK
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
firewalld
服务中打开 RADIUS 端口:firewall-cmd --permanent --add-service=radius firewall-cmd --reload
# firewall-cmd --permanent --add-service=radius # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动
radiusd
服务:systemctl enable --now radiusd
# systemctl enable --now radiusd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
如果
radiusd
服务无法启动,请验证您是否可以解析 IdM 服务器主机名:host -v idm_server.idm.example.com
# host -v idm_server.idm.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于其他问题,请在 debug 模式下运行
radiusd
:停止
radiusd
服务:systemctl stop radiusd
# systemctl stop radiusd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 debug 模式启动该服务:
radiusd -X
# radiusd -X ... Ready to process requests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 FreeRADIUS 主机上执行验证测试,如
验证
部分中所述。
后续步骤
- 禁用不再需要的身份验证方法,以及您不使用的其他功能。