Dovecot 提供 IMAP 和 POP3 的服務,並且在開發中很重視安全性的需求,當然同時也有提供 SSL 的加密連線。Dovecot 同時還支援多種認證方式和多種資料庫連結,對於 Postfix 的支援也相當的好。Dovecot 不只提供 IMAP 和 POP3 的服務,並且還提供了 LDA (Local Deliver Agent) 作為信件傳遞功能。在 LDA 啟動時,可以提供 Quota 的功能,還支援 Sieve Script ( 一種郵件過濾的腳本 )。
3.1.1 安裝程式 (支援 Managesieve)
在 4.6 版的 Ports 裡,Dovecot 只支援 Sieve 功能,也就是說你可以寫好腳本,由 LDA 幫你作郵件過濾的工作。但是用戶如果想要自行上傳自已的規則時,就必須用 Ftp 上傳自已的腳本,這非常的不方便。於是出現了 Managesieve 的伺服器,這讓你可以不用透過設定 Ftp 也可以上傳腳本。重點是,在之後的 Roundcube Webmail 系統中,有支援 Managesieve 的套件可以使用。
不過目前的 Ports 中並不支援 Managesieve ,如果我們要使用它的話,必須手動方式匯入更新檔,並且編譯程式,才能夠支援。當然如果你選擇不要使用 Managesieve 功能的話,可以直接看 3.1.2。
首先,我們先下載 Managesieve 的 patch 檔和原始碼。因為我們用 Ports 安裝的 Dovecot 的版本是1.1.19,所以我們要下載對應版本的patch 檔和原始碼,路徑如下:
http://www.rename-it.nl/dovecot/1.1/dovecot-1.1.19-managesieve-0.10.7.diff.gz
http://www.rename-it.nl/dovecot/1.1/dovecot-1.1-managesieve-0.10.7.tar.gz
# lynx http://www.rename-it.nl/dovecot/1.1/dovecot-1.1.19-managesieve-0.10.7.diff.gz
# lynx http://www.rename-it.nl/dovecot/1.1/dovecot-1.1-managesieve-0.10.7.tar.gz
在這裡,我們要先作一次 Dovecot 的編譯,然後再將 diff 檔匯入,再安裝 Dovecot。記得我們要支援 Mysql。# cd /usr/ports/mail/dovecot
# env FALVOR="mysql" make
[...]
# cd /usr/ports/obj/dovecot-1.1.19-mysql/dovecot-1.1.19
# gzip -dc /path/to/patchfile.diff.gz | patch -p1
[...]
# cd /usr/ports/mail/dovecot
# env SUBPACKAGE="-server" FLAVOR="mysql" make install
# env SUBPACKAGE="-sieve" FLAVOR="mysql" make install
接下來把 Managesieve 原始碼解壓並編譯
# tar xzvf dovecot-1.1-managesieve-0.10.7.tar.gz
# cd dovecot-1.1-mamagesieve-0.10.7
# ./configure --with-dovecot=/usr/ports/obj/dovecot-1.1.19-mysql/dovecot-1.1.19/ \
--with-dovecot-sieve=/usr/ports/obj/dovecot-1.1.19-mysql/dovecot-sieve-1.1.7/
[...]
# make
[...]
# make install
3.1.2 安裝程式 (不支援 Managesieve)
# cd /usr/ports/mail/dovecot
# env SUBPACKAGE="-server" FLAVOR="mysql" make install
3.2 設定配置檔
接下來要設定 Dovecot 的設定檔,我們預計啟用 imap pop3 和它們的 ssl 連線。我們也同時開啟了 Dovecot 自帶的 Managesieve 務,還另外設定了 LDA 的 deliver 服務,這樣才能幫我們控制 quota 和 sieve 的功能。設定完主要設定檔之後,我們還要設定供 userdb 和 passdb 存取的 sql 設定檔 dovecot-mysql.conf。
/etc/dovecot.conf # 設定 chroot 目錄 base_dir = /var/dovecot/ # 設定要啟用的服務 ( 沒打算使用 managesieve 請刪掉) protocols = imap imaps pop3 pop3s managesieve # 指定要監聽的 ip 和 port 這裡用預設就可以 listen = *, [::] #禁止明碼認證,這裡要選 no disable_plaintext_auth = no # ssl cert 存放的位置 ssl_cert_file = /etc/ssl/dovecotcert.pem # 登入時使用的目錄 login_dir = /var/dovecot/login # 是否使用 chroot ,這裡選 yes login_chroot = yes # 認證時預設的user login_user = _dovecot # 郵件存放的位置 mail_location = maildir:/var/vmail/%d/%n # 有存取郵件權限的 uid 和 gid mail_uid = 2000 mail_gid = 2000 protocol imap { # 使用 quota 套件 mail_plugins = quota imap_quota } protocol pop3 { # 使用 quota 套件 mail_plugins = quota } protocol lda { # 設定deliver 預設的管理者信箱 postmaster_address = postmaster@skycat.no-ip.org # 使用 quota 和 sieve 套件 (不使用 sieve 的請刪除) mail_plugins = quota cmusieve # 指定 sendmail 的位置 sendmail_path = /usr/local/sbin/sendmail # 指定auth-master socket 的位置 auth_socket_path = /var/dovecot/auth-master } # 設定 managesive 監聽的 port (不使用 managesieve 的請刪除) protocol managesieve { listen = *:2000 } # 預設的登入網址 auth_default_realm = skycat.no-ip.org # 認證過程和除錯,有問題再開吧 auth_verbose = no auth_debug = no auth default { # 使用明碼,沒辦法,讓outlook收信的話只能用這個 mechanisms = plain # 設定 userdb 和 passdb 的 sql 設定檔 passdb sql { args = /etc/dovecot-mysql.conf } userdb sql { args = /etc/dovecot-mysql.conf } # auth-login 預設的使用者 user = root socket listen { master { # 供 LDA 用的 socket,預設擁有者要有存取 /var/vmail 的權限 path = /var/dovecot/auth-master mode = 0600 user = vmail group = vmail } client { # 供 postfix sasl 認證的socket 建立在 /var/spool 裡,這樣 postfix 就能在chroot 下存取它 path = /var/spool/postfix/private/auth mode = 0660 # 要有被 postfix 存取的權限 user = _postfix group = wheel } } } plugin { quota = maildir # 設定預設執行的script,在這裡的設定是by user的 (不使用 sieve的請刪除) sieve = /var/vmail/%u.sieve } /etc/dovecot-mysql.conf driver = mysql connect = host=127.0.0.1 dbname=mail user=vmail password=vmail default_pass_scheme = CRYPT password_query = SELECT CONCAT(account, '@', domain) AS user, password FROM users \ WHERE account = '%n' AND domain = '%d' AND active = 1 user_query = SELECT uid, gid, home, maildir AS mail, CONCAT('*:storage=', quota) \ AS quota_rule FROM users WHERE account = '%n' AND domain = '%d' AND active = 1 然後設定 /etc/ssl/dovecot-openssl.cnf 檔,建立 /etc/ssl/dovecotcert.pem /etc/ssl/dovecot-openssl.cnf [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] # country (2 letter code) C=TW # State or Province Name (full name) ST=Taiwan # Locality Name (eg. city) L=Taoyuan # Organization (eg. company) O=HOME # Organizational Unit Name (eg. section) OU=IMAP server # Common Name (*.example.com is also possible) CN=mail.skycat.no-ip.org # E-mail contact emailAddress=postmaster@skycat.no-ip.org [ cert_type ] nsCertType = server
# /usr/local/sbin/dovecot-mkcert.sh
最後我們可以設定在開機時啟動 Dovecot
/etc/rc.local
if [ -x /usr/local/sbin/dovecot ]; then
echo -n ' dovecot'; /usr/local/sbin/dovecot >/dev/null 2>&1
fi
3.3 設定Postfix 使用 Dovecot deliver
要讓 Postfix 使用 Dovecot 作為 deliver ,這樣我們的quota 和 sieve 功能才能生效,要在 main.cf 和 master.cf 增加設定值:
/etc/postfix/main.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
/etc/postfix/master.cf
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}
記得重新啟動 Postfix
# postfix reload