前の回を先にお読みください
この記事は「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
パスワードハッシング方式(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!)
Add a New Comment