Red Hat Training

A Red Hat training course is available for RHEL 8

17.5. EAP を使用してネットワーククライアントを安全に認証するための FreeRADIUS の設定

FreeRADIUS は、拡張認証プロトコル (EAP) のさまざまな方法をサポートしています。ただし、セキュアなネットワークの場合は、以下のセキュアな EAP 認証方法のみをサポートするように FreeRADIUS を設定します。

  • EAP-TLS(Transport Layer Security) は、セキュアな TLS 接続を使用して、証明書を使用してクライアントを認証します。EAP-TLS を使用するには、各ネットワーククライアントの TLS クライアント証明書とサーバーのサーバー証明書が必要です。同じ認証局 (CA) が証明書を発行している必要があることに注意してください。使用する CA によって発行されたすべてのクライアント証明書は FreeRADIUS サーバーに対して認証できるため、常に独自の CA を使用して証明書を作成してください。
  • EAP-TTLS(Tunneled Transport Layer Security) は、セキュアな 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_file、および ca_file パラメーターを設定します。

手順

  1. Diffie-Hellman (DH) パラメーターを持つ /etc/raddb/certs/dh が存在しない場合は、作成します。たとえば、2048 ビットの素数を持つ DH ファイルを作成するには、次のように入力します。

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

    セキュリティー上の理由から、素数が 2048 ビット未満の DH ファイルは使用しないでください。ビット数によっては、ファイルの作成に数分かかる場合があります。

  2. TLS 秘密鍵、サーバー証明書、CA 証明書、および DH パラメーターを使用したファイルにセキュアな権限を設定します。

    # 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
          ...
      }

      安全な環境では、ttlstls、または peap のみを使用してください。

    3. 安全でない EAP-MD5 認証方式を無効にするには、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. localhost および localhost_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) 表記を使用して範囲を指定できます。ただし、このパラメーターに設定できる値は 1 つだけです。たとえば、IPv4 および IPv6 アドレスへのアクセスを許可するには、2 つのクライアントディレクティブを追加します。

      ホスト名や 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. デバッグモードでサービスを開始します。

    # radiusd -X
    ...
    Ready to process requests
  3. Verification セクションで参照されているように、FreeRADIUS ホストで認証テストを実行します。

次のステップ

  • 不要な認証方法や使用しないその他の機能を無効にします。