34.3. ネットワーククライアントを安全に認証するための FreeRADIUS の設定 (EAP 使用)
FreeRADIUS は、Extensible Authentication Protocol (EAP) のさまざまな方式をサポートしています。しかし、サポートされるセキュアな状況では、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 Identity Management (IdM) ドメインに登録されている。
手順
秘密鍵を作成し、IdM から証明書を要求します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 ipa-getcert list -f /etc/pki/tls/certs/radius.pem
# 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 ファイルを作成するには、次のように実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openssl dhparam -out /etc/raddb/certs/dh 2048
# openssl dhparam -out /etc/raddb/certs/dh 2048
セキュリティー上の理由から、素数が 2048 ビット未満の DH ファイルは使用しないでください。ビット数によっては、ファイルの作成に数分かかる場合があります。
/etc/raddb/mods-available/eap
ファイルを編集します。tls-config tls-common
ディレクティブで TLS 関連の設定を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 ... } }
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 ... } }
eap
ディレクティブのdefault_eap_type
パラメーターをttls
に設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow eap { ... default_eap_type = ttls ... }
eap { ... default_eap_type = ttls ... }
安全でない EAP-MD5 認証方式を無効にするには、
md5
ディレクティブをコメントアウトします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow eap { ... # md5 { # } ... }
eap { ... # md5 { # } ... }
デフォルトの設定ファイルでは、他の安全でない EAP 認証方法がデフォルトでコメントアウトされていることに注意してください。
/etc/raddb/sites-available/default
ファイルを編集し、eap
以外のすべての認証方法をコメントアウトします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow authenticate { ... # Auth-Type PAP { # pap # } # Auth-Type CHAP { # chap # } # Auth-Type MS-CHAP { # mschap # } # mschap # digest ... }
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
ディレクティブに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow authorize { ... #-ldap ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } ... }
authorize { ... #-ldap ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } ... }
authenticate
ディレクティブ内の LDAP 認証タイプのコメントを解除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow authenticate { Auth-Type LDAP { ldap } }
authenticate { Auth-Type LDAP { ldap } }
ldap
モジュールを有効にします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
# ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
/etc/raddb/mods-available/ldap
ファイルを編集し、次の変更を加えます。ldap
ディレクティブで、IdM LDAP サーバーの URL とベース識別名 (DN) を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldap { ... server = 'ldaps://idm_server.idm.example.com' base_dn = 'cn=users,cn=accounts,dc=idm,dc=example,dc=com' ... }
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 証明書検証を有効にします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow tls { ... require_cert = 'demand' ... }
tls { ... require_cert = 'demand' ... }
/etc/raddb/clients.conf
ファイルを編集します。localhost
およびlocalhost_ipv6
クライアントディレクティブでセキュアなパスワードを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow client localhost { ipaddr = 127.0.0.1 ... secret = localhost_client_password ... } client localhost_ipv6 { ipv6addr = ::1 secret = localhost_client_password }
client localhost { ipaddr = 127.0.0.1 ... secret = localhost_client_password ... } client localhost_ipv6 { ipv6addr = ::1 secret = localhost_client_password }
ネットワークオーセンティケーターのクライアントディレクティブを追加します。
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 }
オプション: 他のホストも FreeRADIUS サービスにアクセスできるようにするには、それらのホストにもクライアントディレクティブを追加します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow client <hostname_or_description> { ipaddr = <IP_address_or_range> secret = <client_password> }
client <hostname_or_description> { ipaddr = <IP_address_or_range> secret = <client_password> }
ipaddr
パラメーターは IPv4 および IPv6 アドレスを受け入れ、オプションのクラスレスドメイン間ルーティング (CIDR) 表記を使用して範囲を指定できます。ただし、このパラメーターに設定できる値は 1 つだけです。たとえば、IPv4 アドレスと IPv6 アドレスの両方へのアクセスを許可するには、2 つのクライアントディレクティブを追加する必要があります。ホスト名や IP 範囲が使用される場所を説明する単語など、クライアントディレクティブのわかりやすい名前を使用します。
設定ファイルを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow radiusd -XC
# radiusd -XC ... Configuration appears to be OK
firewalld
サービスで RADIUS ポートを開きます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow firewall-cmd --permanent --add-service=radius firewall-cmd --reload
# firewall-cmd --permanent --add-service=radius # firewall-cmd --reload
radiusd
サービスを有効にして開始します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl enable --now radiusd
# systemctl enable --now radiusd
トラブルシューティング
radiusd
サービスの起動に失敗した場合は、IdM サーバーのホスト名を解決できることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow host -v idm_server.idm.example.com
# host -v idm_server.idm.example.com
その他の問題が発生した場合は、
radiusd
をデバッグモードで実行します。radiusd
サービスを停止します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl stop radiusd
# systemctl stop radiusd
デバッグモードでサービスを開始します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow radiusd -X
# radiusd -X ... Ready to process requests
-
Verification
セクションで参照されているように、FreeRADIUS ホストで認証テストを実行します。
次のステップ
- 不要になった認証方法や使用しないその他の機能を無効にします。