Red Hat Training

A Red Hat training course is available for RHEL 8

9.2. LDAP 認証を使用した Dovecot サーバーのセットアップ

インフラストラクチャーが LDAP サーバーを使用してアカウントを保存している場合、それに対して Dovecot ユーザーを認証できます。この場合、アカウントをディレクトリーで集中管理するため、ユーザーは Dovecot サーバー上のファイルシステムにローカルでアクセスする必要はありません。

複数の Dovecot サーバーをレプリケーションでセットアップして、メールボックスを高可用性にする予定がある場合にも、集中管理されたアカウントは利点があります。

9.2.1. Dovecot のインストール

dovecot パッケージは以下を提供します。

  • dovecot サービスとそれを管理するユーティリティー
  • Dovecot がオンデマンドで開始するサービス (認証など)
  • サーバーサイドメールフィルタリングなどのプラグイン
  • /etc/dovecot/ ディレクトリーの設定ファイル
  • /usr/share/doc/dovecot/ ディレクトリーのドキュメント

手順

  • dovecot パッケージをインストールします。

    # yum install dovecot
    注記

    Dovecot がすでにインストールされていて、クリーンな設定ファイルが必要な場合は、/etc/dovecot/ ディレクトリーを名前変更するか削除してください。その後、パッケージを再インストールします。設定ファイルを削除しないと、yum uninstall dovecot コマンドは /etc/dovecot/ 内の設定ファイルをリセットしません。

9.2.2. Dovecot サーバーでの TLS 暗号化の設定

Dovecot はセキュアなデフォルト設定を提供します。たとえば、TLS はデフォルトで有効になっており、認証情報と暗号化されたデータをネットワーク経由で送信します。Dovecot サーバーで TLS を設定するには、証明書と秘密鍵ファイルへのパスを設定するだけです。さらに、Diffie-Hellman パラメーターを生成して使用し、Perfect Forward Secrecy (PFS) を提供することで、TLS 接続のセキュリティーを強化できます。

前提条件

  • Dovecot がインストールされています。
  • 次のファイルが、サーバー上のリストされた場所にコピーされました。

    • サーバー証明書: /etc/pki/dovecot/certs/server.example.com.crt
    • 秘密鍵: /etc/pki/dovecot/private/server.example.com.key
    • 認証局 (CA) 証明書: /etc/pki/dovecot/certs/ca.crt
  • サーバー証明書の Subject DN フィールドのホスト名は、サーバーの完全修飾ドメイン名 (FQDN) と一致します。

手順

  1. 秘密鍵ファイルにセキュアな権限を設定します。

    # chown root:root /etc/pki/dovecot/private/server.example.com.key
    # chmod 600 /etc/pki/dovecot/private/server.example.com.key
  2. Diffie-Hellman パラメーターを使用してファイルを生成します。

    # openssl dhparam -out /etc/dovecot/dh.pem 4096

    サーバーのハードウェアとエントロピーによっては、4096 ビットの Diffie-Hellman パラメーターを生成するのに数分かかる場合があります。

  3. /etc/dovecot/conf.d/10-ssl.conf ファイルで証明書と秘密鍵ファイルへのパスを設定します。

    1. ssl_cert および ssl_key パラメーターを更新し、サーバーの証明書と秘密鍵へのパスを使用するように設定します。

      ssl_cert = </etc/pki/dovecot/certs/server.example.com.crt
      ssl_key = </etc/pki/dovecot/private/server.example.com.key
    2. ssl_ca パラメーターをコメント解除し、CA 証明書へのパスを使用するように設定します。

      ssl_ca = </etc/pki/dovecot/certs/ca.crt
    3. ssl_dh パラメーターをコメント解除し、Diffie-Hellman パラメーターファイルへのパスを使用するように設定します。

      ssl_dh = </etc/dovecot/dh.pem
    重要

    Dovecot がファイルからパラメーターの値を確実に読み取るようにするには、パスの先頭に < 文字を付ける必要があります。

関連情報

  • /usr/share/doc/dovecot/wiki/SSL.DovecotConfiguration.txt

9.2.3. 仮想ユーザーを使用するための Dovecot の準備

デフォルトでは、Dovecot はサービスを使用するユーザーとして、ファイルシステム上で多くのアクションを実行します。ただし、1 人のローカルユーザーを使用してこれらのアクションを実行するように Dovecot バックエンドを設定すると、複数の利点があります。

  • Dovecot は、ユーザーの ID (UID) を使用する代わりに、特定のローカルユーザーとしてファイルシステムアクションを実行します。
  • ユーザーは、サーバー上でローカルに利用できる必要はありません。
  • すべてのメールボックスとユーザー固有のファイルを 1 つのルートディレクトリーに保存できます。
  • ユーザーは UID とグループ ID (GID) を必要としないため、管理作業が軽減されます。
  • サーバー上のファイルシステムにアクセスできるユーザーは、これらのファイルにアクセスできないため、メールボックスやインデックスを危険にさらす可能性はありません。
  • レプリケーションのセットアップはより簡単です。

前提条件

  • Dovecot がインストールされています。

手順

  1. vmail ユーザーを作成します。

    # useradd --home-dir /var/mail/ --shell /usr/sbin/nologin vmail

    Dovecot は後でこのユーザーを使用してメールボックスを管理します。セキュリティー上の理由から、この目的で dovecot または dovenull システムユーザーを使用しないでください。

  2. /var/mail/ 以外のパスを使用する場合は、それに SELinux コンテキスト mail_spool_t を設定します。例:

    # semanage fcontext -a -t mail_spool_t "<path>(/.*)?"
    # restorecon -Rv <path>
  3. /var/mail/ への書き込み権限を vmail ユーザーにのみ付与します。

    # chown vmail:vmail /var/mail/
    # chmod 700 /var/mail/
  4. /etc/dovecot/conf.d/10-mail.conf ファイルの mail_location パラメーターをコメント解除し、メールボックスの形式と場所を設定します。

    mail_location = sdbox:/var/mail/%n/

    この設定の場合:

    • Dovecot は、single モードで高パフォーマンスの dbox メールボックス形式を使用します。このモードでは、サービスは、maildir 形式と同様に、各メールを個別のファイルに保存します。
    • Dovecot はパス内の %n 変数をユーザー名に解決します。これは、各ユーザーがメールボックス用に個別のディレクトリーを持つようにするために必要です。

関連情報

  • /usr/share/doc/dovecot/wiki/VirtualUsers.txt
  • /usr/share/doc/dovecot/wiki/MailLocation.txt
  • /usr/share/doc/dovecot/wiki/MailboxFormat.dbox.txt
  • /usr/share/doc/dovecot/wiki/Variables.txt

9.2.4. LDAP を Dovecot 認証バックエンドとして使用する

通常、LDAP ディレクトリー内のユーザーは、ディレクトリーサービスに対して自分自身を認証できます。Dovecot は、これを使用して、ユーザーが IMAP または POP3 サービスにログインする場合、ユーザーを認証できます。この認証方法には、次のとおり、多くの利点があります。

  • 管理者は、ディレクトリーでユーザーを集中管理できます。
  • LDAP アカウントには、特別な属性は必要ありません。LDAP サーバーから認証を受けることができれば十分です。したがって、この方法は、LDAP サーバーで使用されるパスワード保存方式とは無関係です。
  • ユーザーは、Name Service Switch (NSS) インターフェイスと Pluggable Authentication Module (PAM) フレームワークを介して、サーバー上でローカルに利用できる必要はありません。

前提条件

  • Dovecot がインストールされています。
  • 仮想ユーザー機能が設定されています。
  • LDAP サーバーへの接続は、TLS 暗号化をサポートします。
  • Dovecot サーバー上の RHEL は、LDAP サーバーの認証局 (CA) 証明書を信頼します。
  • ユーザーが LDAP ディレクトリーの異なるツリーに保存されている場合、ディレクトリーを検索するための Dovecot 専用の LDAP アカウントが存在します。このアカウントには、他のユーザーの識別名 (DN) を検索する権限が必要です。

手順

  1. /etc/dovecot/conf.d/10-auth.conf ファイルで認証バックエンドを設定します。

    1. 不要な auth-*.conf.ext 認証バックエンド設定ファイルの include ステートメントをコメントアウトします。次に例を示します。

      #!include auth-system.conf.ext
    2. 次の行をコメント解除して、LDAP 認証を有効にします。

      !include auth-ldap.conf.ext
  2. /etc/dovecot/conf.d/auth-ldap.conf.ext ファイルを編集し、次のように override_fields パラメーターを userdb セクションに追加します。

    userdb {
      driver = ldap
      args = /etc/dovecot/dovecot-ldap.conf.ext
      override_fields = uid=vmail gid=vmail home=/var/mail/%n/
    }

    固定値のため、Dovecot は LDAP サーバーからこれらの設定をクエリーしません。したがって、これらの属性も存在する必要はありません。

  3. 次の設定で /etc/dovecot/dovecot-ldap.conf.ext ファイルを作成します。

    1. LDAP 構造に応じて、次のいずれかを設定します。

      • ユーザーが LDAP ディレクトリーの異なるツリーに保存されている場合は、動的 DN 検索を設定します。

        dn = cn=dovecot_LDAP,dc=example,dc=com
        dnpass = password
        pass_filter = (&(objectClass=posixAccount)(uid=%n))

        Dovecot は、指定された DN、パスワード、およびフィルターを使用して、ディレクトリー内の認証ユーザーの DN を検索します。この検索では、Dovecot はフィルター内の %n をユーザー名に置き換えます。LDAP 検索で返される結果は 1 つだけであることに注意してください。

      • すべてのユーザーが特定のエントリーに保存されている場合は、DN テンプレートを設定します。

        auth_bind_userdn = cn=%n,ou=People,dc=example,dc=com
    2. LDAP サーバーへの認証バインドを有効にして、Dovecot ユーザーを確認します。

      auth_bind = yes
    3. URL を LDAP サーバーに設定します。

      uris = ldaps://LDAP-srv.example.com

      セキュリティー上の理由から、LDAP プロトコル上で LDAPS または STARTTLS コマンドを使用した暗号化された接続のみを使用してください。後者の場合は、さらに tls = yes を設定に追加します。

      証明書の検証を機能させるには、LDAP サーバーのホスト名が TLS 証明書で使用されているホスト名と一致する必要があります。

    4. LDAP サーバーの TLS 証明書の検証を有効にします。

      tls_require_cert = hard
    5. ベース DN には、ユーザーの検索を開始する DN を設定します。

      base = ou=People,dc=example,dc=com
    6. 検索範囲を設定します。

      scope = onelevel

      Dovecot は、指定されたベース DN のみを onelevel スコープで検索し、サブツリーも subtree スコープで検索します。

  4. /etc/dovecot/dovecot-ldap.conf.ext ファイルにセキュアな権限を設定します。

    # chown root:root /etc/dovecot/dovecot-ldap.conf.ext
    # chmod 600 /etc/dovecot/dovecot-ldap.conf.ext

次のステップ

関連情報

  • /usr/share/doc/dovecot/example-config/dovecot-ldap.conf.ext
  • /usr/share/doc/dovecot/wiki/UserDatabase.Static.txt
  • /usr/share/doc/dovecot/wiki/AuthDatabase.LDAP.txt
  • /usr/share/doc/dovecot/wiki/AuthDatabase.LDAP.AuthBinds.txt
  • /usr/share/doc/dovecot/wiki/AuthDatabase.LDAP.PasswordLookups.txt

9.2.5. Dovecot 設定の完了

Dovecot をインストールして設定したら、firewalld サービスで必要なポートを開き、サービスを有効にして開始します。その後、サーバーをテストできます。

前提条件

  • 以下は Dovecot で設定されています。

    • TLS 暗号化
    • 認証バックエンド
  • クライアントは認証局 (CA) 証明書を信頼します。

手順

  1. IMAP または POP3 サービスのみをユーザーに提供する場合は、/etc/dovecot/dovecot.conf ファイルの protocol パラメーターをコメント解除し、必要なプロトコルに設定します。たとえば、POP3 を必要としない場合は、次のように設定します。

    protocols = imap lmtp

    デフォルトでは、imappop3、および lmtp プロトコルが有効になっています。

  2. ローカルファイアウォールでポートを開きます。たとえば、IMAPS、IMAP、POP3S、および POP3 プロトコルのポートを開くには、次のように入力します。

    # firewall-cmd --permanent --add-service=imaps --add-service=imap --add-service=pop3s --add-service=pop3
    # firewall-cmd --reload
  3. dovecot サービスを有効にして開始します。

    # systemctl enable --now dovecot

検証

  1. Dovecot に接続して電子メールを読むには、Mozilla Thunderbird などのメールクライアントを使用します。メールクライアントの設定は、使用するプロトコルによって異なります。

    表9.2 Dovecot サーバーへの接続設定

    プロトコルポート接続セキュリティー認証方法

    IMAP

    143

    STARTTLS

    PLAIN[a]

    IMAPS

    993

    SSL/TLS

    PLAIN[a]

    POP3

    110

    STARTTLS

    PLAIN[a]

    POP3S

    995

    SSL/TLS

    PLAIN[a]

    [a] クライアントは、TLS 接続を介して暗号化されたデータを送信します。したがって、認証情報は開示されません。

    デフォルトでは、Dovecot は TLS を使用しない接続ではプレーンテキスト認証を受け入れないため、この表には暗号化されていない接続の設定がリストされていないことに注意してください。

  2. デフォルト以外の値を含む設定を表示します。

    # doveconf -n

関連情報

  • firewall-cmd(1) man ページ