請先閱讀前篇
這篇文章是「在 Linux 上建立郵件伺服器」系列的第六篇。
在前一篇中我們完成了使用 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 認證整合 (敬請期待!)
Add a New Comment