在這個系列的文章中,我們将通過使用 postfix、dovecot 和 openssl 這三款工具來為你展示如何在 ubuntu 系統上搭建一個既可靠又易于配置的郵件伺服器。
在這個容器和微服務技術日新月異的時代,值得慶幸的是有些事情并沒有改變,例如搭建一個 linux 下的郵件伺服器,仍然需要許多步驟才能間隔各種伺服器耦合在一起,而當你将這些配置好,放在一起,卻又非常可靠穩定,不會像微服務那樣一睜眼有了,一閉眼又沒了。 在這個系列教程中我們将通過使用 postfix、dovecot 和 openssl 這三款工具在 ubuntu 系統上搭建一個既可靠又易于配置的郵件伺服器。
postfix 是一個古老又可靠的軟體,它比原始的 unix 系統的 mta 軟體 sendmail 更加容易配置和使用(還有人仍然在用sendmail 嗎?)。 exim 是 debain 系統上的預設 mta 軟體,它比 postfix 更加輕量而且超級容易配置,是以我們在将來的教程中會推出 exim 的教程。
你必須要保證你的郵件通訊是安全的,是以我們就需要使用到 openssl 這個軟體,openssl 也提供了一些很好用的工具來測試你的郵件伺服器。
<a target="_blank"></a>
讓我們先來快速了解一些術語,因為當我們了解了這些術語的時候就能知道這些見鬼的東西到底是什麼。 :d
mua: 郵件使用者代理mail user agent,你本地的郵件用戶端,例如 : evolution、kmail、claws mail 或者 thunderbird(lctt 譯注 : 例如國内的 foxmail)。
pop3:郵局協定post-office protocol版本 3,将郵件從 smtp 伺服器傳輸到你的郵件用戶端的的最簡單的協定。pop 服務端是非常簡單小巧的,單一的一台機器可以為數以千計的使用者提供服務。
imap: 互動式消息通路協定interactive message access protocol,許多企業使用這個協定因為郵件可以被儲存在伺服器上,而使用者不必擔心會丢失消息。imap 伺服器需要大量的記憶體和存儲空間。
tls:傳輸套接層transport socket layer是 ssl(安全套接層secure sockets layer)的改良版,為 sasl 身份認證提供了加密的傳輸服務層。
sasl:簡單身份認證與安全層simple authentication and security layer,用于認證使用者。sasl進行身份認證,而上面說的 tls 提供認證資料的加密傳輸。
starttls: 也被稱為伺機 tls 。如果伺服器雙方都支援 ssl/tls,starttls 就會将純文字連接配接更新為加密連接配接(tls 或 ssl)。如果有一方不支援加密,則使用明文傳輸。starttls 會使用标準的未加密端口 25 (smtp)、 110(pop3)和 143 (imap)而不是對應的加密端口 465(smtp)、995(pop3) 和 993 (imap)。
絕大多數的 linux 版本仍然還保留着 <code>/usr/sbin/sendmail</code> 。 這是在那個 mta 隻有一個 sendmail 的古代遺留下來的痕迹。在大多數 linux 發行版中,<code>/usr/sbin/sendmail</code> 會符号連結到你安裝的 mta 軟體上。如果你的 linux 中有它,不用管它,你的發行版會自己處理好的。
使用 <code>apt-get install postfix</code> 來做基本安裝時要注意(圖 1),安裝程式會打開一個向導,詢問你想要搭建的伺服器類型,你要選擇“internet server”,雖然這裡是區域網路伺服器。它會讓你輸入完全限定的伺服器域名(例如: myserver.mydomain.net)。對于區域網路伺服器,假設你的域名服務已經正确配置,(我多次提到這個是因為經常有人在這裡出現錯誤),你也可以隻使用主機名。
圖 1:postfix 的配置。
ubuntu 系統會為 postfix 建立一個配置檔案,并啟動三個守護程序 : <code>master</code>、<code>qmgr</code> 和 <code>pickup</code>,這裡沒用一個叫 postfix 的指令或守護程序。(lctt 譯注:名為 <code>postfix</code> 的指令是管理指令。)
<code>$ ps ax</code>
<code>6494 ? ss 0:00 /usr/lib/postfix/master</code>
<code>6497 ? s 0:00 pickup -l -t unix -u -c</code>
<code>6498 ? s 0:00 qmgr -l -t unix -u</code>
你可以使用 postfix 内置的配置文法檢查來測試你的配置檔案,如果沒用發現文法錯誤,不會輸出任何内容。
<code>$ sudo postfix check</code>
<code>[sudo] password for carla:</code>
使用 <code>netstat</code> 來驗證 <code>postfix</code> 是否正在監聽 25 端口。
<code>$ netstat -ant</code>
<code>tcp 0 0 0.0.0.0:25 0.0.0.0:* listen</code>
<code>tcp6 0 0 :::25 :::* listen</code>
現在讓我們再操起古老的 <code>telnet</code> 來進行測試 :
<code>$ telnet myserver 25</code>
<code>trying 127.0.1.1...</code>
<code>connected to myserver.</code>
<code>escape character is '^]'.</code>
<code>220 myserver esmtp postfix (ubuntu)</code>
<code>ehlo myserver</code>
<code>250-myserver</code>
<code>250-pipelining</code>
<code>250-size 10240000</code>
<code>250-vrfy</code>
<code>250-etrn</code>
<code>250-starttls</code>
<code>250-enhancedstatuscodes</code>
<code>250-8bitmime</code>
<code>250 dsn</code>
<code>^]</code>
<code></code>
<code>telnet></code>
嘿,我們已經驗證了我們的伺服器名,而且 postfix 正在監聽 smtp 的 25 端口而且響應了我們鍵入的指令。
pipelining 允許多個指令流式發出,而不必對每個指令作出響應。
size 表示伺服器可接收的最大消息大小。
vrfy 可以告訴用戶端某一個特定的郵箱位址是否存在,這通常應該被取消,因為這是一個安全漏洞。
etrn 适用于非持久網際網路連接配接的伺服器。這樣的站點可以使用 etrn 從上遊伺服器請求郵件投遞,postfix 可以配置成延遲投遞郵件到 etrn 用戶端。
starttls (詳情見上述說明)。
enhancedstatuscodes,伺服器支撐增強型的狀态碼和錯誤碼。
8bitmime,支援 8 位 mime,這意味着完整的 ascii 字元集。最初,原始的 ascii 是 7 位。
dsn,投遞狀态通知,用于通知你投遞時的錯誤。
原文釋出時間為:2017-12-28
本文來自雲栖社群合作夥伴“linux中國”