36.3. EAP를 사용하여 네트워크 클라이언트를 안전하게 인증하도록 FreeRADIUS 구성
Freeradius는 EAP(Extensible Authentication Protocol)의 다양한 방법을 지원합니다. 그러나 지원되는 보안 시나리오의 경우 EAP-TTLS(tunneled transport layer security)를 사용합니다.
EAP-TTLS를 사용하면 클라이언트는 보안 TLS 연결을 외부 인증 프로토콜로 사용하여 터널을 설정합니다. 그런 다음 내부 인증은 LDAP를 사용하여 Identity Management에 인증합니다. EAP-TTLS를 사용하려면 TLS 서버 인증서가 필요합니다.
기본 FreeRADIUS 구성 파일은 문서 역할을 하며 모든 매개변수 및 지시문을 설명합니다. 특정 기능을 비활성화하려면 구성 파일에서 해당 부분을 제거하는 대신 주석 처리하십시오. 이를 통해 구성 파일 및 포함된 문서의 구조를 유지할 수 있습니다.
사전 요구 사항
-
freeradius및freeradius-ldap패키지를 설치했습니다. -
/etc/raddb/디렉토리의 구성 파일은 변경되지 않고freeradius패키지에서 제공하는 대로 설정됩니다. - 호스트는 Red Hat Enterprise Linux IdM(Identity Management) 도메인에 등록되어 있습니다.
프로세스
개인 키를 생성하고 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.comcertmonger서비스는 개인 키를/etc/pki/tls/private/radius.key파일에 저장하고/etc/pki/tls/certs/radius.pem파일에 인증서를 저장하고 보안 권한을 설정합니다. 또한certmonger는 인증서를 모니터링하고 만료되기 전에 갱신한 후 인증서가 갱신된 후반경된서비스를 다시 시작합니다.CA에서 인증서를 발급했는지 확인합니다.
# ipa-getcert list -f /etc/pki/tls/certs/radius.pem ... Number of certificates and requests being tracked: 1. Request ID '20240918142211': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/radius.key' certificate: type=FILE,location='/etc/pki/tls/certs/radius.crt' ...Diffie-Hellman(DH) 매개변수를 사용하여
/etc/raddb/certs/dh파일을 만듭니다. 예를 들어 2048비트 소수를 사용하여 DH 파일을 만들려면 다음을 입력합니다.# openssl dhparam -out /etc/raddb/certs/dh 2048보안상의 이유로 2048비트 소수가 있는 DH 파일을 사용하지 마십시오. 비트 수에 따라 파일 생성에 몇 분이 걸릴 수 있습니다.
/etc/raddb/mods-available/eap파일을 편집합니다.tls-config tls-common지시문에서 TLS 관련 설정을 구성합니다.eap { ... tls-config tls-common { ... private_key_file = /etc/pki/tls/private/radius.key certificate_file = /etc/pki/tls/certs/radius.pem ca_file = /etc/ipa/ca.crt ... } }Cryostat 지시문에서
default_eap_type매개변수를ttls:로 설정합니다.eap { ... default_eap_type = ttls ... }비보안 EAP-MD5 인증 방법을 비활성화하려면
md5지시문을 주석 처리합니다.eap { ... # md5 { # } ... }기본 구성 파일에서 다른 비보안 EAP 인증 방법은 기본적으로 주석 처리됩니다.
/etc/raddb/sites-available/default파일을 편집하고 Cryostat 이외의 모든 인증 방법을 주석처리합니다.authenticate { ... # Auth-Type PAP { # pap # } # Auth-Type CHAP { # chap # } # Auth-Type MS-CHAP { # mschap # } # mschap # digest ... }이렇게 하면 외부 인증에 대해 EAP만 활성화되고 일반 텍스트 인증 방법을 비활성화합니다.
/etc/raddb/sites-available/inner-tunnel파일을 편집하고 다음과 같이 변경합니다.-ldap항목을 주석 처리하고ldap모듈 구성을authorize지시문에 추가합니다.authorize { ... #-ldap ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } ... }authenticate지시문에서 LDAP 인증 유형의 주석을 제거합니다.authenticate { Auth-Type LDAP { ldap } }
ldap모듈을 활성화합니다.# ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap/etc/raddb/mods-available/ldap파일을 편집하고 다음과 같이 변경합니다.ldap지시문에서 IdM LDAP 서버 URL과 기본 고유 이름(DN)을 설정합니다.ldap { ... server = 'ldaps://idm_server.idm.example.com' base_dn = 'cn=users,cn=accounts,dc=idm,dc=example,dc=com' ... }FreeRADIUS 호스트와 IdM 서버 간에 TLS 암호화 연결을 사용하도록 서버 URL에서
ldaps프로토콜을 지정합니다.ldap지시문에서 IdM LDAP 서버의 TLS 인증서 유효성 검사를 활성화합니다.tls { ... require_cert = 'demand' ... }
/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(Classless inter-domain routing) 표기법을 사용하여 범위를 지정할 수 있습니다. 그러나 이 매개변수에서 하나의 값만 설정할 수 있습니다. 예를 들어 IPv4 및 IPv6 주소에 대한 액세스 권한을 부여하려면 두 개의 클라이언트 지시문을 추가해야 합니다.클라이언트 지시문에 설명이 포함된 이름(예: 호스트 이름 또는 IP 범위가 사용되는 위치를 설명하는 단어)을 사용합니다.
구성 파일을 확인합니다.
# radiusd -XC ... Configuration appears to be OKfirewalld서비스에서 RADIUS 포트를 엽니다.# firewall-cmd --permanent --add-service=radius # firewall-cmd --reload반경된서비스를 활성화하고 시작합니다.# systemctl enable --now radiusd
문제 해결
반경서비스가 시작되지 않으면 IdM 서버 호스트 이름을 확인할 수 있는지 확인합니다.# host -v idm_server.idm.example.com다른 문제의 경우 디버그 모드에서
반경을실행하십시오.반경된서비스를 중지합니다.# systemctl stop radiusd디버그 모드에서 서비스를 시작합니다.
# radiusd -X ... Ready to process requests-
확인섹션에서 참조된 FreeRADIUS 호스트에서 인증 테스트를 수행합니다.
다음 단계
- 더 이상 필수 인증 방법 및 사용하지 않는 기타 기능을 비활성화합니다.