Ubuntu Postfix Mail Server 設定筆記 (二) LDA (Dovecot LMTP Virtual Mailbox)

本系列第二篇: 設定 LDA (Local Delivery Agent)
讓外來郵件分類並保存到伺服器上, 並由 Dovecot 管理 Virtual Mailbox

Postfix 預設使用 Unix User 作為 Email User Name
如果 mydestination 同時包括 domain1.com 及 domain2.com
那發出 root@domain1.com 和 root@domain2.com 都同樣會寄到 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 tiger@domain1.com:`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 後完成

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.