第9章 Dovecot IMAP および POP3 サーバーの設定と管理
Dovecot は、セキュリティーを重視する高パフォーマンスのメール配信エージェント (MDA) です。IMAP または POP3 互換の電子メールクライアントを使用して Dovecot サーバーに接続し、電子メールを読んだりダウンロードしたりできます。
Dovecot の主な機能:
- セキュリティーを重視する設計と実装
- 大規模環境でのパフォーマンスを向上させるために、高可用性を実現する双方向レプリケーションをサポート
-
高パフォーマンスの
dbox
メールボックス形式だけでなく、互換性の理由からmbox
とMaildir
もサポート - 破損したインデックスファイルの修正などの自己修復機能
- IMAP 標準への準拠
- IMAP および POP3 クライアントのバグを回避するための回避策をサポート
9.1. PAM 認証を使用した Dovecot サーバーのセットアップ
Dovecot は、ユーザーデータベースとして Name Service Switch (NSS) インターフェイスをサポートし、認証バックエンドとして Pluggable Authentication Module (PAM) フレームワークをサポートします。この設定により、Dovecot は、NSS を介してサーバー上でローカルに利用可能なユーザーにサービスを提供できます。
アカウントが次の場合に PAM 認証を使用します。
-
/etc/passwd
ファイルでローカルに定義されている。 - リモートデータベースに保存されているが、System Security Services Daemon (SSSD) またはその他の NSS プラグインを介してローカルで利用できる。
9.1.1. Dovecot のインストール
dovecot
パッケージは以下を提供します。
-
dovecot
サービスとそれを管理するユーティリティー - Dovecot がオンデマンドで開始するサービス (認証など)
- サーバーサイドメールフィルタリングなどのプラグイン
-
/etc/dovecot/
ディレクトリーの設定ファイル -
/usr/share/doc/dovecot/
ディレクトリーのドキュメント
手順
dovecot
パッケージをインストールします。# yum install dovecot
注記Dovecot がすでにインストールされていて、クリーンな設定ファイルが必要な場合は、
/etc/dovecot/
ディレクトリーを名前変更するか削除してください。その後、パッケージを再インストールします。設定ファイルを削除しないと、yum uninstall dovecot
コマンドは/etc/dovecot/
内の設定ファイルをリセットしません。
次のステップ
9.1.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) と一致します。
手順
秘密鍵ファイルにセキュアな権限を設定します。
# 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
9.1.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
9.1.4. PAM を Dovecot 認証バックエンドとして使用する
デフォルトでは、Dovecot は Name Service Switch (NSS) インターフェイスをユーザーデータベースとして使用し、Pluggable Authentication Module (PAM) フレームワークを認証バックエンドとして使用します。
設定をカスタマイズして Dovecot を環境に適応させ、仮想ユーザー機能を使用して管理を簡素化します。
前提条件
- Dovecot がインストールされています。
- 仮想ユーザー機能が設定されています。
手順
/etc/dovecot/conf.d/10-mail.conf
ファイルのfirst_valid_uid
パラメーターを更新して、Dovecot に対して認証できる最小のユーザー ID (UID) を定義します。first_valid_uid = 1000
デフォルトでは、
1000
以上の UID を持つユーザーが認証を受けることができます。必要に応じて、last_valid_uid
パラメーターを設定して、Dovecot がログインを許可する最大の UID を定義することもできます。/etc/dovecot/conf.d/auth-system.conf.ext
ファイルで、次のようにoverride_fields
パラメーターをuserdb
セクションに追加します。userdb { driver = passwd override_fields = uid=vmail gid=vmail home=/var/mail/%n/ }
固定値のため、Dovecot は
/etc/passwd
ファイルからこれらの設定をクエリーしません。そのため、/etc/passwd
に定義されたホームディレクトリーが存在する必要はありません。
次のステップ
関連情報
-
/usr/share/doc/dovecot/wiki/PasswordDatabase.PAM.txt
-
/usr/share/doc/dovecot/wiki/VirtualUsers.Home.txt
9.1.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 などのメールクライアントを使用します。メールクライアントの設定は、使用するプロトコルによって異なります。
表9.1 Dovecot サーバーへの接続設定 Protocol Port 接続セキュリティー 認証方法 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 ページ