Red Hat Training

A Red Hat training course is available for RHEL 8

17.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_filecertificate_fileca_file 参数。

流程

  1. 如果带有 Diffie-Hellman(DH)参数的 /etc/raddb/certs/dh 不存在,就创建一个。例如,要创建带有 2048 位素数的 DH 文件,请输入:

    # openssl dhparam -out /etc/raddb/certs/dh 2048

    为了安全起见,请不要使用小于 2048 位素数的 DH 文件。根据位数,文件的创建可能需要几分钟。

  2. 使用 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
  3. 编辑 /etc/raddb/mods-available/eap 文件:

    1. private_key_password 参数中设置私钥的密码:

      eap {
          ...
          tls-config tls-common {
              ...
              private_key_password = key_password
              ...
          }
      }
    2. 根据您的环境,将 eap 指令中的 default_eap_type 参数设为您使用的主要 EAP 类型:

      eap {
          ...
          default_eap_type = ttls
          ...
      }

      对于安全环境,请仅使用 ttlstlspeap

    3. 注释掉 md5 指令,以禁用不安全的 EAP-MD5 身份验证方法:

      eap {
          ...
          # md5 {
          # }
          ...
      }

      请注意,在默认的配置文件中,其他不安全的 EAP 身份验证方法默认被注释掉了。

  4. 编辑 /etc/raddb/sites-available/default 文件,然后注释掉 eap 以外的所有身份验证方法:

    authenticate {
        ...
        # Auth-Type PAP {
        #     pap
        # }
    
        # Auth-Type CHAP {
        #     chap
        # }
    
        # Auth-Type MS-CHAP {
        #     mschap
        # }
    
        # mschap
    
        # digest
        ...
    }

    这只会启用 EAP,并禁用纯文本身份验证方法。

  5. 编辑 /etc/raddb/clients.conf 文件:

    1. localhostlocalhost_ipv6 客户端指令中设置安全密码:

      client localhost {
          ipaddr = 127.0.0.1
          ...
          secret = client_password
          ...
      }
      
      client localhost_ipv6 {
          ipv6addr = ::1
          secret = client_password
      }
    2. 如果远程主机上的 RADIUS 客户端(如网络验证器)应能够访问 FreeRADIUS 服务,请为它们添加相应的客户端指令:

      client hostapd.example.org {
          ipaddr = 192.0.2.2/32
          secret = client_password
      }

      ipaddr 参数接受 IPv4 和 IPv6 地址,您可以使用可选的无类别域间路由(CIDR)表示法来指定范围。但是,在这个参数中您只能设置一个值。例如,若要授予对 IPv4 和 IPv6 地址的访问权限,请添加两个客户端指令。

      为客户端指令使用一个描述性名称,如主机名或一个描述 IP 范围在哪里使用的词语。

  6. 如果要使用 EAP-TTLS 或 EAP-PEAP,请将用户添加到 /etc/raddb/users 文件中:

    example_user        Cleartext-Password := "user_password"

    对于应使用基于证书的身份验证(EAP-TLS)的用户,不要添加任何条目。

  7. 验证配置文件:

    # radiusd -XC
    ...
    Configuration appears to be OK
  8. 启用并启动 radiusd 服务:

    # systemctl enable --now radiusd

故障排除

  1. 停止 radiusd 服务:

    # systemctl stop radiusd
  2. 以 debug 模式启动该服务:

    # radiusd -X
    ...
    Ready to process requests
  3. 在 FreeRADIUS 主机上执行验证测试,如 验证 部分中所述。

后续步骤

  • 禁用不必要的验证方法,以及您不使用的其他特性。