天天看點

Ubuntu搭建簡易Postfix郵箱伺服器 本文轉載自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郵箱伺服器

本文轉載自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。

Ubuntu搭建簡易Postfix郵箱伺服器 本文轉載自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郵箱伺服器

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号端口。

Ubuntu搭建簡易Postfix郵箱伺服器 本文轉載自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郵箱伺服器

在發送測試郵件之前,我們最好是檢視25号端口是否被防火牆或主機商屏蔽。nmap可以幫助我們掃描伺服器的開放端口。在你的個人電腦上運作下面的指令。

sudo nmap <your-server-ip>      
Ubuntu搭建簡易Postfix郵箱伺服器 本文轉載自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郵箱伺服器

從圖中可以看見我的伺服器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,還有很多其他的進階設定。