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 接続は失敗します。詳細は、Red Hat ナレッジベースソリューションの TLS extension "Extended Master Secret" enforced を参照してください。
手順
秘密鍵ファイルにセキュアな権限を設定します。
# chown root:root /etc/pki/dovecot/private/server.example.com.key # chmod 600 /etc/pki/dovecot/private/server.example.com.key
Diffie-Hellman パラメーターを使用してファイルを生成します。
# openssl dhparam -out /etc/dovecot/dh.pem 4096
サーバーのハードウェアとエントロピーによっては、4096 ビットの Diffie-Hellman パラメーターを生成するのに数分かかる場合があります。
/etc/dovecot/conf.d/10-ssl.conf
ファイルで証明書と秘密鍵ファイルへのパスを設定します。ssl_cert
およびssl_key
パラメーターを更新し、サーバーの証明書と秘密鍵へのパスを使用するように設定します。ssl_cert = </etc/pki/dovecot/certs/server.example.com.crt ssl_key = </etc/pki/dovecot/private/server.example.com.key
ssl_ca
パラメーターをコメント解除し、CA 証明書へのパスを使用するように設定します。ssl_ca = </etc/pki/dovecot/certs/ca.crt
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 がインストールされています。
手順
vmail
ユーザーを作成します。# useradd --home-dir /var/mail/ --shell /usr/sbin/nologin vmail
Dovecot は後でこのユーザーを使用してメールボックスを管理します。セキュリティー上の理由から、この目的で
dovecot
またはdovenull
システムユーザーを使用しないでください。/var/mail/
以外のパスを使用する場合は、それに SELinux コンテキストmail_spool_t
を設定します。例:# semanage fcontext -a -t mail_spool_t "<path>(/.*)?" # restorecon -Rv <path>
/var/mail/
への書き込み権限をvmail
ユーザーにのみ付与します。# chown vmail:vmail /var/mail/ # chmod 700 /var/mail/
/etc/dovecot/conf.d/10-mail.conf
ファイルのmail_location
パラメーターをコメント解除し、メールボックスの形式と場所を設定します。mail_location = sdbox:/var/mail/%n/
この設定の場合:
-
Dovecot は、
single
モードで高パフォーマンスのdbox
メールボックス形式を使用します。このモードでは、サービスは、maildir
形式と同様に、各メールを個別のファイルに保存します。 -
Dovecot はパス内の
%n
変数をユーザー名に解決します。これは、各ユーザーがメールボックス用に個別のディレクトリーを持つようにするために必要です。
-
Dovecot は、
関連情報
-
/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 接続は失敗します。詳細は、Red Hat ナレッジベースソリューションの TLS extension "Extended Master Secret" enforced を参照してください。
手順
dovecot-mysql
パッケージをインストールします。# dnf install dovecot-mysql
/etc/dovecot/conf.d/10-auth.conf
ファイルで認証バックエンドを設定します。不要な
auth-*.conf.ext
認証バックエンド設定ファイルのinclude
ステートメントをコメントアウトします。次に例を示します。#!include auth-system.conf.ext
次の行をコメント解除して、SQL 認証を有効にします。
!include auth-sql.conf.ext
/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 サーバーからクエリーしません。
次の設定で
/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
パラメーターの場合、クエリーはすべてのユーザーのリストを返す必要があります。
-
/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) 証明書を信頼します。
手順
IMAP または POP3 サービスのみをユーザーに提供する場合は、
/etc/dovecot/dovecot.conf
ファイルのprotocol
パラメーターをコメント解除し、必要なプロトコルに設定します。たとえば、POP3 を必要としない場合は、次のように設定します。protocols = imap lmtp
デフォルトでは、
imap
、pop3
、およびlmtp
プロトコルが有効になっています。ローカルファイアウォールでポートを開きます。たとえば、IMAPS、IMAP、POP3S、および POP3 プロトコルのポートを開くには、次のように入力します。
# firewall-cmd --permanent --add-service=imaps --add-service=imap --add-service=pop3s --add-service=pop3 # firewall-cmd --reload
dovecot
サービスを有効にして開始します。# systemctl enable --now dovecot
検証
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 を使用しない接続ではプレーンテキスト認証を受け入れないため、この表には暗号化されていない接続の設定がリストされていないことに注意してください。
デフォルト以外の値を含む設定を表示します。
# doveconf -n
関連情報
-
システム上の
firewall-cmd(1)
man ページ