本系列第二篇: 設定 LDA (Local Delivery Agent)
讓外來郵件分類並保存到伺服器上, 並由 Dovecot 管理 Virtual Mailbox
Postfix 預設使用 Unix User 作為 Email User Name
如果 mydestination 同時包括 domain1.com 及 domain2.com
那發出 [email protected] 和 [email protected] 都同樣會寄到 root Unix user
而且新增一堆 Unix user 只做 Email 用途好像不太好管理
此時 Virtual Mail Box 就大派用場了。
2017-04-26 大更新: 直接使用 Dovecot ,由它管理 Virtual Mailbox 吧!
1. 安裝 dovecot lmtpd
apt-get install dovecot-core dovecot-lmtpd
2. 新增 User 及 Virtual Mailbox 目錄
首先新增一個 User, virtual mailbox 需要一個獨立 Unix User
useradd vmail
然後建立 Virtual Mail Box Directory,並把它 chown 給 vmail:
mkdir /var/mail/vhosts chown vmail:vmail /var/mail/vhosts
3. 設定郵件目錄
修改 /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mail/vhosts/%d/%n
%d 代表 Domain
%n 代表 Username
4. 設定 UserDatabase 及 PasswordDatabase
Dovecot 也提供非常多的登入授權方法。同樣可以直接使用 Unix User 登入 (System Users) 。
為方便管理還是使用 VirtualUsers 建立 Dovecot 專的的 User 吧。
VirtualUsers 使用兩個 Database 管理用戶授權: UserDatabase 和 PasswordDatabase
UserDatabase 負責管理 Virtual User 和 Unix User 的 UID 及 GID 間的 Mapping,以及自定 Maildir 等的設定。
PasswordDatabase 負責管理用戶的授權登入。
修改 /etc/dovecot/conf.d/10-auth.conf
# Comment #!include auth-system.conf.ext # Uncomment !include auth-static.conf.ext
修改 /etc/dovecot/conf.d/auth-static.conf.ext
UserDatabase 部分:
因為之前設定 Virtual Mailbox 時,UID 和 GID 都設定為 vmail,
所以 userdb 設定 static,全部使用 vmail。
home 因為在 mail_location 已經指定了,可以略去。
/etc/dovecot/conf.d/auth-static.conf.ext
加入:
# static userdb with shared uid and gid userdb { driver = static args = uid=vmail gid=vmail }
Password Database 部分:
方便起見使用最簡單的 passwd-file Driver
Username 及 Password 存放在 /etc/dovecot/passwd
/etc/dovecot/conf.d/auth-static.conf.ext
加入:
# using password file passdb { driver = passwd-file args = /etc/dovecot/passwd }
5. 新增 Dovecot User:
passwd 的格式和 Unix 下的 /etc/passwd 相容 (但除了頭2個Field以外全部為空):
user:password:uid:gid:(gecos):home:(shell):extra_fields
只有 Username 和 Password 為必需,Password 欄可以用 {SCHEME} 指定 Hash Scheme。
Dovecot 的 doveadm 內置 pw 工具生成 Password Hash,把它組合成 Command 吧:
echo [email protected]:`doveadm pw`:::::: >> /etc/dovecot/passwd
設定完成
6. Dovecot LDA 設定
修改 /etc/dovecot/conf.d/10-master.conf,lmtp 一段 unix_listener 部分修改如下:
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 group = postfix user = postfix } # Create inet listener only if you can't use the above UNIX socket #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} }
修改 /etc/postfix/main.cf,加入以下兩行:
(除此以外應該無其他 virtual_ 開頭的設定,此 Domain 當然也要從 mydestination 刪除)
virtual_mailbox_domains = domain1.com virtual_transport = lmtp:unix:private/dovecot-lmtp
重啟 Dovecot 及 Postfix 後完成