1.3. MariaDB SQL 認証を使用した Dovecot サーバーのセットアップ

ユーザーとパスワードを MariaDB SQL サーバーに保存する場合、それをユーザーデータベースと認証バックエンドとして使用するように、Dovecot を設定できます。この設定では、アカウントをデータベースで集中管理するため、ユーザーは Dovecot サーバー上のファイルシステムにローカルアクセスできません。

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

1.3.1. Dovecot のインストール

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

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

手順

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

    # dnf install dovecot
    注記

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

1.3.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) と一致します。
  • サーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、ナレッジベースの記事 TLS extension "Extended Master Secret" enforced を参照してください。

手順

  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

1.3.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

1.3.4. Dovecot 認証バックエンドとして MariaDB SQL データベースを使用する

Dovecot は、MariaDB データベースからアカウントとパスワードを読み取り、これを使用して、ユーザーが IMAP または POP3 サービスにログインする場合、ユーザーを認証できます。この認証方法の利点は次のとおりです。

  • 管理者は、データベースでユーザーを集中管理できます。
  • ユーザーはサーバー上でローカルにアクセスできません。

前提条件

  • Dovecot がインストールされています。
  • 仮想ユーザー機能が設定されています。
  • MariaDB サーバーへの接続では、TLS 暗号化がサポートされます。
  • dovecotDB データベースは MariaDB に存在し、users テーブルには、少なくとも username および password 列が含まれています。
  • password 列には、Dovecot がサポートするスキームで暗号化されたパスワードが含まれています。
  • パスワードは、同じスキームを使用するか、{pw-storage-scheme} 接頭辞を使用します。
  • MariaDB ユーザー dovecot は、dovecotDB データベースの users テーブルに対する読み取り権限を持っています。
  • MariaDB サーバーの TLS 証明書を発行した認証局 (CA) の証明書は、Dovecot サーバーの /etc/pki/tls/certs/ca.crt ファイルに保存されます。
  • MariaDB サーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、この Dovecot サーバーは Extended Master Secret (EMS) 拡張機能をサポートするか、TLS 1.3 を使用します。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、ナレッジベースの記事 TLS extension "Extended Master Secret" enforced を参照してください。

手順

  1. dovecot-mysql パッケージをインストールします。

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

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

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

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

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

    固定値のため、Dovecot はこれらの設定を SQL サーバーからクエリーしません。

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

    driver = mysql
    connect = host=mariadb_srv.example.com dbname=dovecotDB user=dovecot password=dovecotPW ssl_ca=/etc/pki/tls/certs/ca.crt
    default_pass_scheme = SHA512-CRYPT
    user_query = SELECT username FROM users WHERE username='%u';
    password_query = SELECT username AS user, password FROM users WHERE username='%u';
    iterate_query = SELECT username FROM users;

    データベースサーバーに対して TLS 暗号化を使用するには、ssl_ca オプションに MariaDB サーバー証明書を発行した CA の証明書のパスを設定します。証明書の検証を機能させるには、MariaDB サーバーのホスト名が TLS 証明書で使用されているホスト名と一致する必要があります。

    データベースのパスワード値に {pw-storage-scheme} 接頭辞が含まれている場合は、default_pass_scheme 設定を省略できます。

    ファイル内のクエリーは、次のように設定する必要があります。

    • user_query パラメーターの場合、クエリーは Dovecot ユーザーのユーザー名を返す必要があります。また、クエリーは 1 つの結果のみを返す必要があります。
    • password_query パラメーターの場合、クエリーはユーザー名とパスワードを返す必要があり、Dovecot は user および password 変数でこれらの値を使用する必要があります。したがって、データベースが異なる列名を使用している場合は、AS SQL コマンドを使用して、結果の列の名前を変更してください。
    • iterate_query パラメーターの場合、クエリーはすべてのユーザーのリストを返す必要があります。
  5. /etc/dovecot/dovecot-sql.conf.ext ファイルにセキュアな権限を設定します。

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

次のステップ

関連情報

  • /usr/share/doc/dovecot/example-config/dovecot-sql.conf.ext
  • /usr/share/doc/dovecot/wiki/Authentication.PasswordSchemes.txt

1.3.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 などのメールクライアントを使用します。メールクライアントの設定は、使用するプロトコルによって異なります。

    表1.3 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 ページ