17.5. EAP를 사용하여 네트워크 클라이언트를 안전하게 인증하도록 FreeRADIUS 구성

Freeradius는 다양한 EAP(Extensible Authentication Protocol) 방법을 지원합니다. 그러나 보안 네트워크의 경우 다음과 같은 보안 EAP 인증 방법만 지원하도록 FreeRADIUS를 구성합니다.

  • EAP-TLS(전송 계층 보안)는 인증서를 사용하여 클라이언트를 인증하는 보안 TLS 연결을 사용합니다. EAP-TLS를 사용하려면 각 네트워크 클라이언트 및 서버의 서버 인증서에 대한 TLS 클라이언트 인증서가 필요합니다. 동일한 CA(인증 기관)가 인증서를 발급해야 합니다. 사용하는 CA에서 발급한 모든 클라이언트 인증서는 FreeRADIUS 서버에 인증할 수 있으므로 항상 자체 CA를 사용하여 인증서를 생성합니다.
  • EAP-TTLS(tunneled Transport layer security)는 보안 TLS 연결을 사용하고,PAP(암호 인증 프로토콜) 또는 CHP(Culge handshake authentication protocol)와 같은 메커니즘을 사용하여 클라이언트를 인증합니다. EAP-TTLS를 사용하려면 TLS 서버 인증서가 필요합니다.
  • EAP-PEAP(보안 확장 가능한 인증 프로토콜)는 보안 TLS 연결을 외부 인증 프로토콜로 사용하여 터널을 설정합니다. 인증자는 RADIUS 서버의 인증서를 인증합니다. 이후 supplicant는 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 매개변수를 설정합니다.

절차

  1. Diffie-Hellman(Diffie-Hellman) 매개변수가 있는 /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
          ...
      }

      보안 환경의 경우 ttls,tls 또는 peap 만 사용하십시오.

    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(Classless inter-domain routing) 표기법을 사용하여 범위를 지정할 수 있습니다. 그러나 이 매개변수에는 하나의 값만 설정할 수 있습니다. 예를 들어 IPv4 및 IPv6 주소에 대한 액세스 권한을 부여하려면 두 개의 클라이언트 지시문을 추가합니다.

      client 지시문에 대한 설명적 이름(예: 호스트 이름 또는 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. 이름이 지정된 서비스를 활성화하고 시작합니다.

    # systemctl enable --now radiusd

문제 해결

  1. 이름이 지정된 서비스를 중지합니다.

    # systemctl stop radiusd
  2. 디버그 모드에서 서비스를 시작합니다.

    # radiusd -X
    ...
    Ready to process requests
  3. 확인 섹션에 언급된 대로 FreeRADIUS 호스트에서 인증 테스트를 수행합니다.

다음 단계

  • 더 이상 필요하지 않은 인증 방법 및 기타 기능을 비활성화합니다.