如何在 Ubuntu 環境下搭建郵件伺服器(二)
本教程的第 2 部分將介紹如何使用 Dovecot 將郵件從 Postfix 伺服器移動到用戶的收件箱。
在第一部分中,我們安裝並測試了 Postfix SMTP 伺服器。Postfix 或任何 SMTP 伺服器都不是一個完整的郵件伺服器,因為它所做的只是在 SMTP 伺服器之間移動郵件。我們需要 Dovecot 將郵件從 Postfix 伺服器移動到用戶的收件箱中。
Dovecot 支持兩種標準郵件協議:IMAP(Internet 郵件訪問協議)和 POP3(郵局協議)。 IMAP 伺服器會在伺服器上保留所有郵件。您的用戶可以選擇將郵件下載到計算機或僅在伺服器上訪問它們。 IMAP 對於有多台機器的用戶是方便的。但對你而言需要更多的工作,因為你必須確保你的伺服器始終可用,而且 IMAP 伺服器需要大量的存儲和內存。
POP3 是較舊的協議。POP3 伺服器可以比 IMAP 伺服器服務更多的用戶,因為郵件會下載到用戶的計算機。大多數郵件客戶端可以選擇在伺服器上保留一定天數的郵件,因此 POP3 的行為有點像 IMAP。但它又不是 IMAP,當你像 IMAP 那樣(在多台計算機上使用它時)那麼常常會下載多次或意外刪除。
安裝 Dovecot
啟動你的 Ubuntu 系統並安裝 Dovecot:
$ sudo apt-get install dovecot-imapd dovecot-pop3d
它會安裝可用的配置,並在完成後自動啟動,你可以用 ps ax | grep dovecot
確認:
$ ps ax | grep dovecot
15988 ? Ss 0:00 /usr/sbin/dovecot
15990 ? S 0:00 dovecot/anvil
15991 ? S 0:00 dovecot/log
打開你的 Postfix 配置文件 /etc/postfix/main.cf
,確保配置了maildir 而不是 mbox 的郵件存儲方式,mbox 是給每個用戶一個單一大文件,而 maildir 是每條消息都存儲為一個文件。大量的小文件比一個龐大的文件更穩定且易於管理。添加如下兩行,第二行告訴 Postfix 你需要 maildir 格式,並且在每個用戶的家目錄下創建一個 .Mail
目錄。你可以取任何名字,不一定要是 .Mail
:
mail_spool_directory = /var/mail
home_mailbox = .Mail/
現在調整你的 Dovecot 配置。首先把原始的 dovecot.conf
文件重命名放到一邊,因為它會調用存放在 conf.d
中的文件,在你剛剛開始學習時把配置放一起更簡單些:
$ sudo mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot-oldconf
現在創建一個新的 /etc/dovecot/dovecot.conf
:
disable_plaintext_auth = no
mail_location = maildir:~/.Mail
namespace inbox {
inbox = yes
mailbox Drafts {
special_use = Drafts
}
mailbox Sent {
special_use = Sent
}
mailbox Trash {
special_use = Trash
}
}
passdb {
driver = pam
}
protocols = " imap pop3"
ssl = no
userdb {
driver = passwd
}
注意 mail_location = maildir
必須和 main.cf
中的 home_mailbox
參數匹配。保存你的更改並重新載入 Postfix 和 Dovecot 配置:
$ sudo postfix reload
$ sudo dovecot reload
快速導出配置
使用下面的命令來快速查看你的 Postfix 和 Dovecot 配置:
$ postconf -n
$ doveconf -n
測試 Dovecot
現在再次啟動 telnet,並且給自己發送一條測試消息。粗體顯示的是你輸入的命令。studio
是我伺服器的主機名,因此你必須用自己的:
$ telnet studio 25
Trying 127.0.1.1...
Connected to studio.
Escape character is '^]'.
220 studio.router ESMTP Postfix (Ubuntu)
EHLO studio
250-studio.router
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
mail from: tester@test.net
250 2.1.0 Ok
rcpt to: carla@studio
250 2.1.5 Ok
data
354 End data with .Date: November 25, 2016
From: tester
Message-ID: first-test
Subject: mail server test
Hi carla,
Are you reading this? Let me know if you didn't get this.
.
250 2.0.0 Ok: queued as 0C261A1F0F
quit
221 2.0.0 Bye
Connection closed by foreign host.
現在請求 Dovecot 來取回你的新消息,使用你的 Linux 用戶名和密碼登錄:
$ telnet studio 110
Trying 127.0.0.1...
Connected to studio.
Escape character is '^]'.
+OK Dovecot ready.
user carla
+OK
pass password
+OK Logged in.
stat
+OK 2 809
list
+OK 2 messages:
1 383
2 426
.
retr 2
+OK 426 octets
Return-Path: <tester@test.net>
X-Original-To: carla@studio
Delivered-To: carla@studio
Received: from studio (localhost [127.0.0.1])
by studio.router (Postfix) with ESMTP id 0C261A1F0F
for <carla@studio>; Wed, 30 Nov 2016 17:18:57 -0800 (PST)
Date: November 25, 2016
From: tester@studio.router
Message-ID: first-test
Subject: mail server test
Hi carla,
Are you reading this? Let me know if you didn't get this.
.
quit
+OK Logging out.
Connection closed by foreign host.
花一點時間比較第一個例子中輸入的消息和第二個例子中接收的消息。 返回地址和日期是很容易偽造的,但 Postfix 不會被愚弄。大多數郵件客戶端默認顯示一個最小的標頭集,但是你需要讀取完整的標頭才能查看真實的回溯。
你也可以在你的 ~/Mail/cur
目錄中查看你的郵件,它們是普通文本,我已經有兩封測試郵件:
$ ls .Mail/cur/
1480540325.V806I28e0229M351743.studio:2,S
1480555224.V806I28e000eM41463.studio:2,S
測試 IMAP
我們 Dovecot 同時啟用了 POP3 和 IMAP 服務,因此讓我們使用 telnet 測試 IMAP。
$ telnet studio imap2
Trying 127.0.1.1...
Connected to studio.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS
ID ENABLE IDLE AUTH=PLAIN] Dovecot ready.
A1 LOGIN carla password
A1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS
ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS
THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT
CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE
QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS
BINARY MOVE SPECIAL-USE] Logged in
A2 LIST "" "*"
* LIST (HasNoChildren) "." INBOX
A2 OK List completed (0.000 + 0.000 secs).
A3 EXAMINE INBOX
* FLAGS (Answered Flagged Deleted Seen Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 2 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1480539462] UIDs valid
* OK [UIDNEXT 3] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
A3 OK [READ-ONLY] Examine completed (0.000 + 0.000 secs).
A4 logout
* BYE Logging out
A4 OK Logout completed.
Connection closed by foreign host
Thunderbird 郵件客戶端
圖 1 中的屏幕截圖顯示了我區域網上另一台主機上的圖形郵件客戶端中的郵件。
![thunderbird mail](/data/attachment/album/201612/30/163707tijjuxip7da74bxm.png "thunderbird mail")
圖 1: Thunderbird mail
此時,你已有一個可以工作的 IMAP 和 POP3 郵件伺服器,並且你也知道該如何測試你的伺服器。你的用戶可以在他們設置郵件客戶端時選擇要使用的協議。如果您只想支持一個郵件協議,那麼只需要在您的 Dovecot 配置中留下你要的協議名字。
然而,這還遠遠沒有完成。這是一個非常簡單、沒有加密的、大門敞開的安裝。它也只適用於與郵件伺服器在同一系統上的用戶。這是不可擴展的,並具有一些安全風險,例如沒有密碼保護。 我們會在下篇了解如何創建與系統用戶分開的郵件用戶,以及如何添加加密。
via: https://www.linux.com/learn/sysadmin/building-email-server-ubuntu-linux-part-2
作者:CARLA SCHRODER 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive