本文轉載自https://www.linuxdashen.com/ubuntu%E6%90%AD%E5%BB%BA%E7%AE%80%E6%98%93postfix%E9%82%AE%E7%AE%B1%E6%9C%8D%E5%8A%A1%E5%99%A8
Ubuntu搭建簡易Postfix郵箱伺服器
最後更新 2016年4月20日 分類 Ubuntu伺服器 最新文章 郵件伺服器 标簽 550 mail content denied Gnu mail Postfix PTR記錄 郵箱伺服器
為什麼要搭建自己的郵箱伺服器呢?你知道希拉裡⋅克林頓曾經使用過一個專用的私人郵箱伺服器嗎?
搭建自己的私人郵箱伺服器可以有效的解決郵件的隐私問題。因為隻有你,郵箱伺服器的管理者,才能看見伺服器上的郵件。但是自己搭建郵箱伺服器是一個比較麻煩的過程,因為你需要掌握許多許多的知識,使郵箱伺服器正常運轉。
是以,我把郵箱伺服器的搭建分成幾個部分來講,減少小白的痛苦。這篇文章是第1部分,講解搭建一個非常簡易的Postfix郵箱伺服器的步驟。Postifx是一個SMTP伺服器。SMTP伺服器也被稱為MTA(message transfer agent)。完成了這篇教程,你就能擁有一個屬于自己域名的郵箱位址,比如我的網站郵箱位址是[email protected] 。并且能用這個郵箱位址向Gmail,Yahoo,QQ,網易等郵箱發送郵件并從這些郵箱服務提供商接收郵件。這篇教程以Ubuntu 14.04伺服器作為示例。
關于Postfix
Postfix是一個頂尖的SMTP伺服器,也被稱為MTA。Postfix負責從其他SMTP伺服器接收郵件,将MUA遞交的郵件傳遞給收件人。MUA(mail user agent)就是我們平常使用的Thunderbird,Foxmail,Outlook等郵箱用戶端。Postfix程式采用子產品化的設計,每一個子產品都盡可能以最低的權限運作。這種設計非常有助于安全。Postfix與Unix的結合度非常高。一台Linux伺服器的Postfix可以負責多個域名的郵件發送和接收。這篇文章隻介紹單個域名的發送和接收。
安裝Postfix之前的準備工作
Postfix的原作者是Wietse Venema,他可是一位Unix專家。對于Unix已經提供的功能,Postfix都盡可能不再重複提供。是以,要讓Postfix發揮最大功效,我們需要合理地配置好Unix/Linux伺服器。
設定正确的主機名(hostname)
一般情況下,Postfix與其他SMTP伺服器通信的時候會使用Unix/Linux伺服器的主機名來表明自己的身份。主機名可以有兩種形式,單個名字和FQDN.
通常,個人電腦使用單個名字來作為主機名。比如,你的Linux系統的主機名可能是linux,Debian, Ubuntu等。FQDN (Fully Qualified Domain Name) 由兩個部分組成,節點名和域名。例如,
mail.linuxdashen.com
就是FQDN形式的主機名。mail是節點名,linuxdashen.com是域名。面向網際網路的伺服器一般使用FQDN形式的主機名。郵箱伺服器也應該使用FQDN形式的主機名。FQDN将會出現在smtpd橫幅中(smtpd banner),這是Postfix向其他SMTP伺服器表明自己身份的方式。
如果你的SMTP伺服器不用FQDN來表明自己的身份,那麼收件人的SMTP伺服器可能會拒收郵件。有些SMTP伺服器甚至會查詢DNS,驗證FQDN是否真的解析為你的伺服器IP。不過,在這垃圾郵件漫天飛的年代,這種做法是可以了解的。是以我們必須得正确設定好郵箱伺服器的FQDN主機名。
輸入下面的指令檢視目前的主機名。
hostname -f
如果你的Ubuntu伺服器還沒有設定好主機名,可以使用hostnamectl來設定。
sudo hostnamectl set-hostname <your-fqdn>
通常郵箱伺服器的FQDN主機名為mail.yourdomain.com。
設定好系統時間
郵件裡都有一個時間戳(timestamp),這個時間戳就是Postfix根據目前系統時間設定的。這個時間戳也會出現在Postfix的日志裡。是以調整好系統時間是非常必要的。
使用date指令檢視時區設定以及目前的系統時間。
[email protected]:~$ date
Thu Mar 31 06:37:19 BST 2016
在Ubuntu系統上可以使用
sudo dpkg-reconfigure tzdata
指令來調整時區。時區調整後系統時間基本就沒問題了。如果你需要保持非常精确的時間,可以使用NTP協定與遠端時間伺服器保持同步,具體請看這篇文章。
linux系統用指令配置時區并同步系統時間
為郵箱伺服器設定好DNS記錄
MX記錄
MX記錄的作用是告訴全世界的SMTP伺服器,你的郵箱伺服器mail.yourdomain.com負責yourdomain.com的郵件發送和接收。
MX記錄 @ mail.linuxdashen.com
郵箱伺服器的常見DNS名字是mail.yourdomain.com。如果一個域名有多個郵箱伺服器,那麼可以設定多個MX記錄,并設定優先級。優先級用數字表示,數字越小表示優先級越高。
A記錄
當其他SMTP伺服器知道mail.yourdomain.com負責yourdomain.com的郵件發送和接收後,還必須要知道mail.yourdomain.com這台主機的IP才能建立連接配接并發送郵件。A記錄就是将主機名解析成IP位址的一個記錄。
mail.linuxdashen.com <IP位址>
PTR記錄
PTR記錄也叫做pointer記錄,它将IP位址轉換成主機名,與A記錄剛好相反。這種解析被稱為反向DNS解析(rDNS)。
PTR記錄可以幫助我們過濾垃圾郵件。很多SMTP伺服器會查找對方SMTP伺服器的PTR記錄,得到一個主機名,然後與對方SMTP聲稱的主機名作比較,如果兩者一緻,就接收郵件,反之不接收郵件或放進垃圾箱。為了不讓你的郵件被拒收或放進垃圾箱,你應該為你的伺服器IP設定PTR記錄。
查找一個IP位址的PTR記錄的指令為:
dig -x <IP> +short
或者
host <IP>
因為你是從主機商獲得伺服器的IP,是以你得在主機商那裡設定PTR記錄(反向DNS解析),而不是在域名注冊商那裡設定。
做完了以上準備工作,我們就可以安裝Postfix了。
安裝Postfix
在ubuntu伺服器上運作下面的指令:
sudo apt-get update
sudo apt-get install postfix -y
安裝過程中會讓你選擇一種Postfix配置類型。一般情況下,我們需要選擇第二種類型:Internet Site。

No configuration 表示不要做任何配置;
Internet Site 表示直接使用本地SMTP伺服器發送和接收郵件;
Internet with smarthost 表示使用本地SMTP伺服器接收郵件,但發送郵件時不直接使用本地SMTP伺服器,而是使用第三方smart host來轉發郵件;
Satellite system 表示郵件的發送和接收都是由第三方smarthost來完成。
Local only 表示郵件隻能在本機使用者之間發送和接收。
在第二個頁面System mail name中填入你的域名,也就是郵箱位址@符号後面的域名,比如,我的郵箱位址是[email protected],是以我填的是linuxdashen.com。當發件人的域名位址沒有指定時,Postfix會自動将這個域名添加到發件人的位址中。
Postfix在安裝過程中會生成/etc/postfix/main.cf配置檔案。安裝完成後Postfix會自動運作。我們可以用下面的指令檢視Postfix的版本。
[email protected]:~$ sudo postconf mail_version
mail_version = 2.11.0
使用netstat來檢視Postfix的監聽情況:
sudo netstat -lnpt
Postfix的master程序監聽TCP 25号端口。
在發送測試郵件之前,我們最好是檢視25号端口是否被防火牆或主機商屏蔽。nmap可以幫助我們掃描伺服器的開放端口。在你的個人電腦上運作下面的指令。
sudo nmap <your-server-ip>
從圖中可以看見我的伺服器TCP 25号端口是開放的。如果的輸出結果顯示25端口被過濾,請檢視iptables防火牆設定。如果你的主機商屏蔽了25号端口,給你的主機商送出工單,要求打開25号端口。
發送測試郵件
實際上,現在我們就能用指令行發送和接收郵件了。如果你的伺服器有一個使用者名是user1,那麼這個使用者的郵箱位址就是[email protected]。你可以發送一封郵件給root使用者: [email protected]。也可以向Gmail,Yahoo,QQ,網易等郵箱使用者發送郵件。不過現在我們隻能在伺服器上用指令行發送和檢視郵件。
Postfix在安裝時,會同時安裝一個sendmail的程式(/usr/sbin/sendmail)。你可以用這個sendmail二進制程式向你的Gmail郵箱發送一封測試郵件。在伺服器上輸入下面的指令:
echo "test email" | sendmail [email protected]
這是一條很簡單的指令, sendmail從标準輸入讀取到test email,将test email作為郵件正文,然後發送到Gmail郵箱。現在你可以檢視你的Gmail郵箱,應該會看見你的測試郵件。盡管我們沒有指明發件人位址,但Postfix會自動将你的域名添加到發送人位址中。你也可以在Gmail中回複這封測試郵件,然後在郵箱伺服器上檢視是否可以收到Gmail發來的郵件。
每個使用者的郵件儲存在/var/spool/mail<username>和/var/mail/<username>檔案中。如果你不知道收件箱儲存在哪裡,運作這條指令:
postconf mail_spool_directory
Postfix的收發日志儲存在/var/log/mail.log檔案中。Postfix本身的運作錯誤日志儲存在/var/log/mail.err檔案中。
使用mail程式來發送郵件,檢視收件箱
sendmail的功能非常有限,現在讓我們來安裝一個指令行郵箱用戶端。
sudo apt-get install mailutils
使用mail發送郵件的指令為
mail [email protected]
[email protected]:~$ mail [email protected]
Cc:
Subject: 2nd test email
I'm sending this email using the mail program.
輸入主題和正文後,按Ctrl+D來發送郵件。
要檢視收件箱,輸入mail就行了。
mail
以下是用mail管理收件箱的操作方法。
- 要檢視第一封郵件,輸入數字1。如果郵件隻顯示了一半,按Enter鍵來顯示剩下的消息。
- 将所有郵件從第一封排序,輸入h。
- 要顯示最後一屏郵件,輸入h$或z。
- 閱讀下一封郵件,輸入n。
- 删除第一封郵件,輸入d 1。
- 删除第一封,第二封和第四封郵件,輸入d 1 2 4。
- 删除前10封郵件,輸入d 1-10。
- 回複第1封郵件,輸入reply 1。
- 退出mail程式,輸入q或x。
如果你按q來退出mail程式,那麼已經閱讀過的郵件将會從/var/mail/<username>移動到/home/<username>/mbox檔案中。這意味着其他郵箱用戶端将不能閱讀這些郵件。如果你不想移動已經閱讀的郵件,輸入x退出mail程式。
如果需要自動轉發郵件,那麼在使用者的home目錄下建立一個.forward檔案,在這個檔案裡輸入轉發郵件位址,然後儲存就行了。注意:使用者郵箱不會保留原始郵件。
文章總結
現在,我們在Ubuntu伺服器上搭建了一個很簡陋的Postfix郵箱伺服器。我們可以在伺服器上用指令行來發送和閱讀郵件。另外如果這台ubuntu伺服器上搭建了一個網站,那麼PHPMailer等網站程式就能向外發送郵件了。但是這種方式有很多不友善,比如每次發送或檢視郵件都要SSH登入伺服器,而且隻能檢視純文字的郵件,不能閱讀HTML郵件。在接下來的文章中,我将介紹如何在我們的個人電腦上使用Thunderbird,outlook等郵箱用戶端來發送和閱讀郵件,如何從浏覽器中登入郵箱伺服器以及如何加密我們的郵件, urhh,還有很多其他的進階設定。