前の回を先にお読みください
この記事は「Linuxでメールサーバーを構築する」シリーズの第6回目です。
前回ではPostgreSQLを活用した仮想ユーザーアカウントテーブル設計を完了しました。
まだ確認していない方は、ぜひ先にお読みください。
👉 前の回: Dovecot仮想ユーザーの概念とPostgreSQLテーブル設計


Dovecotのauth-sql.conf.ext設定とは?

Dovecotがシステムアカウントではなくデータベースを通じて仮想ユーザーを認証するには、auth-sql.conf.extファイルを設定する必要があります。
この設定を通じてDovecotがPostgreSQLからユーザー情報を取得して認証できます。


DovecotのSQL認証設定(auth-sql.conf.ext

DovecotがPostgreSQLに接続するために設定する主な項目は次の通りです。

1. 設定ファイルのパス

設定ファイルは以下のパスにあります。

/etc/dovecot/conf.d/auth-sql.conf.ext

ファイルがない場合は、次のコマンドで作成できます。

sudo touch /etc/dovecot/conf.d/auth-sql.conf.ext

2. 主な設定項目

driver = sql
connect = host=localhost dbname=mail user=mailadmin password=yourpassword

default_pass_scheme = SHA256-CRYPT

password_query = SELECT email AS user, password FROM mail_users WHERE email='%u';

user_query = SELECT home_directory AS home FROM mail_users WHERE email='%u';

設定の説明

  • driver = sql → SQLベースの認証を使用
  • connect = host=localhost dbname=mail user=mailadmin password=yourpassword → PostgreSQL接続情報
  • default_pass_scheme = SHA256-CRYPT → デフォルトのパスワードハッシングアルゴリズムを指定。bcryptを使用する場合は、'BLF-CRYPT'と設定
  • password_query → ユーザーが入力したパスワードをデータベースから取得したハッシュ値と比較
  • user_query → ユーザーのメール保存パスを返す

3. Dovecotサービスの再起動

設定を適用した後、Dovecotを再起動します。

sudo systemctl restart dovecot

DovecotとPostgreSQLの連携テスト

設定が正常に適用されたか確認するためには、次のコマンドを使用します。

1. 認証テスト

doveadm auth test user@example.com password123

正常に設定されていれば、passdbの認証が成功するはずです。

2. エラーログの確認

設定が正しく適用されていない場合、ログを確認して原因を分析できます。

journalctl -xe | grep dovecot

Secure authentication in mail server

パスワードハッシング方式(MD5、SHA-256、BCRYPTの比較と適用)

DovecotとPostgreSQLが連携する際、パスワードは必ずハッシングされた状態で保存する必要があります。
ハッシング方式によってセキュリティとパフォーマンスは異なります。

1. ハッシング方式の比較

ハッシング方式 セキュリティレベル 速度 使用例
MD5 脆弱(衝突の可能性あり) 速い 推奨しない
SHA-256 中程度(安全な方) 普通 一般的なセキュリティ必要時
BCRYPT 強力なセキュリティ 遅い 高いセキュリティ要件時

MD5は脆弱性が知られているため使用しないことが望ましいです。
SHA-256は一般的に広く使用されており、速度とセキュリティのバランスが取れています。
BCRYPTは最も強力なセキュリティを提供しますが、速度が遅いため性能が重要な環境では適切なオプションを検討する必要があります。


Dovecotコマンド(doveadm pw)を使用したハッシング

Dovecot内で直接パスワードをハッシングすることもできます。

1. SHA-256ハッシング

doveadm pw -s SHA256-CRYPT

パスワードを入力すると、次のようなハッシュ値が生成されます。

{SHA256-CRYPT}$5$rounds=5000$abc123def456$ABCDEF1234567890ABCDEF1234567890

2. BCRYPTハッシング

doveadm pw -s BLF-CRYPT

出力例:

{BLF-CRYPT}$2a$05$abcdefghij1234567890ABCDEFGHIJKL$CDEFGHIJKLMNOPQRSTUVWXYZ123456

このハッシュ値をPostgreSQLのmail_usersテーブルに保存すればよいです。


PostgreSQLで直接ハッシングする(pgcrypto拡張使用)

PostgreSQLでpgcrypto拡張を使用すると、doveadmなしでパスワードをハッシングできます。

1. pgcrypto拡張の有効化

CREATE EXTENSION IF NOT EXISTS pgcrypto;

2. SHA-256ハッシングしてパスワードを保存

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf')), '/var/mail/vmail/user@example.com');

3. BCRYPTハッシングしてパスワードを保存

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf', 12)), '/var/mail/vmail/user@example.com');

まとめと次のステップ

今回の記事で取り上げた内容 - Dovecotのauth-sql.conf.ext設定方法
- DovecotとPostgreSQLの連携テスト方法
- SHA-256およびBCRYPTハッシング方式の適用方法
- PostgreSQLで直接ハッシングする方法

次の回予告: PostfixとDovecotのSMTP認証連携
Dovecotを設定したので、次のステップはPostfixがDovecotの認証を利用できるように設定する方法です。

👉 次の回: PostfixとDovecotのSMTP認証連携(Coming Soon!)