為什么要搭建自己的郵箱服務(wù)器呢?你知道希拉里?克林頓曾經(jīng)使用過一個專用的私人郵箱服務(wù)器嗎?
搭建自己的私人郵箱服務(wù)器可以有效的解決郵件的隱私問題。因為只有你,郵箱服務(wù)器的管理員,才能看見服務(wù)器上的郵件。但是自己搭建郵箱服務(wù)器是一個比較麻煩的過程,因為你需要掌握許多許多的知識,使郵箱服務(wù)器正常運轉(zhuǎn)。
所以,我把郵箱服務(wù)器的搭建分成幾個部分來講,減少小白的痛苦。這篇文章是第1部分,講解搭建一個非常簡易的Postfix郵箱服務(wù)器的步驟。Postifx是一個SMTP服務(wù)器。SMTP服務(wù)器也被稱為MTA(message
transfer
agent)。完成了這篇教程,你就能擁有一個屬于自己域名的郵箱地址,比如我的網(wǎng)站郵箱地址是gnu@linuxdashen.com
。并且能用這個郵箱地址向Gmail,Yahoo,QQ,網(wǎng)易等郵箱發(fā)送郵件并從這些郵箱服務(wù)提供商接收郵件。這篇教程以Ubuntu
14.04服務(wù)器作為示例。
一. 關(guān)于Postfix
Postfix是一個頂尖的SMTP服務(wù)器,也被稱為MTA。Postfix負責(zé)從其他SMTP服務(wù)器接收郵件,將MUA遞交的郵件傳遞給收件人。MUA(mail
user
agent)就是我們平常使用的Thunderbird,F(xiàn)oxmail,Outlook等郵箱客戶端。Postfix程序采用模塊化的設(shè)計,每一個模塊都盡可能以最低的權(quán)限運行。這種設(shè)計非常有助于安全。Postfix與Unix的結(jié)合度非常高。一臺Linux服務(wù)器的Postfix可以負責(zé)多個域名的郵件發(fā)送和接收。這篇文章只介紹單個域名的發(fā)送和接收。
二. 安裝Postfix之前的準(zhǔn)備工作
Postfix的原作者是Wietse Venema,他可是一位Unix專家。對于Unix已經(jīng)提供的功能,Postfix都盡可能不再重復(fù)提供。所以,要讓Postfix發(fā)揮最大功效,我們需要合理地配置好Unix/Linux服務(wù)器。
1. 設(shè)置正確的主機名(hostname)
一般情況下,Postfix與其他SMTP服務(wù)器通信的時候會使用Unix/Linux服務(wù)器的主機名來表明自己的身份。主機名可以有兩種形式,單個名字和FQDN.
通常,個人電腦使用單個名字來作為主機名。比如,你的Linux系統(tǒng)的主機名可能是linux,Debian, Ubuntu等。FQDN (Fully Qualified Domain Name) 由兩個部分組成,節(jié)點名和域名。例如,
mail.linuxdashen.com
就是FQDN形式的主機名。mail是節(jié)點名,linuxdashen.com是域名。面向互聯(lián)網(wǎng)的服務(wù)器一般使用FQDN形式的主機名。郵箱服務(wù)器也應(yīng)該使用FQDN形式的主機名。FQDN將會出現(xiàn)在smtpd橫幅中(smtpd
banner),這是Postfix向其他SMTP服務(wù)器表明自己身份的方式。
如果你的SMTP服務(wù)器不用FQDN來表明自己的身份,那么收件人的SMTP服務(wù)器可能會拒收郵件。有些SMTP服務(wù)器甚至?xí)樵僁NS,驗證FQDN是否真的解析為你的服務(wù)器IP。不過,在這垃圾郵件漫天飛的年代,這種做法是可以理解的。所以我們必須得正確設(shè)置好郵箱服務(wù)器的FQDN主機名。
輸入下面的命令查看當(dāng)前的主機名。
hostname -f
如果你的Ubuntu服務(wù)器還沒有設(shè)置好主機名,可以使用hostnamectl來設(shè)置。
sudo hostnamectl set-hostname <your-fqdn>
通常郵箱服務(wù)器的FQDN主機名為mail.yourdomain.com。
2. 設(shè)置好系統(tǒng)時間
郵件里都有一個時間戳(timestamp),這個時間戳就是Postfix根據(jù)當(dāng)前系統(tǒng)時間設(shè)置的。這個時間戳也會出現(xiàn)在Postfix的日志里。所以調(diào)整好系統(tǒng)時間是非常必要的。
使用date命令查看時區(qū)設(shè)置以及當(dāng)前的系統(tǒng)時間。
user@mail:~$ date
Thu Mar 31 06:37:19 BST 2016
在Ubuntu系統(tǒng)上可以使用
sudo dpkg-reconfigure tzdata
命令來調(diào)整時區(qū)。時區(qū)調(diào)整后系統(tǒng)時間基本就沒問題了。如果你需要保持非常精確的時間,可以使用NTP協(xié)議與遠程時間服務(wù)器保持同步,具體請看這篇文章。
linux系統(tǒng)用命令配置時區(qū)并同步系統(tǒng)時間:
https://www.linuxdashen.com/linux%e7%b3%bb%e7%bb%9f%e7%94%a8%e5%91%bd%e4%bb%a4%e9%85%8d%e7%bd%ae%e6%97%b6%e5%8c%ba%e5%b9%b6%e5%90%8c%e6%ad%a5%e7%b3%bb%e7%bb%9f%e6%97%b6%e9%97%b4
3. 為郵箱服務(wù)器設(shè)置好DNS記錄
MX記錄
MX記錄的作用是告訴全世界的SMTP服務(wù)器,你的郵箱服務(wù)器mail.yourdomain.com負責(zé)yourdomain.com的郵件發(fā)送和接收。
MX記錄 @ mail.linuxdashen.com
郵箱服務(wù)器的常見DNS名字是mail.yourdomain.com。如果一個域名有多個郵箱服務(wù)器,那么可以設(shè)置多個MX記錄,并設(shè)置優(yōu)先級。優(yōu)先級用數(shù)字表示,數(shù)字越小表示優(yōu)先級越高。
A記錄
當(dāng)其他SMTP服務(wù)器知道m(xù)ail.yourdomain.com負責(zé)yourdomain.com的郵件發(fā)送和接收后,還必須要知道m(xù)ail.yourdomain.com這臺主機的IP才能建立連接并發(fā)送郵件。A記錄就是將主機名解析成IP地址的一個記錄。
mail.linuxdashen.com
PTR記錄
PTR記錄也叫做pointer記錄,它將IP地址轉(zhuǎn)換成主機名,與A記錄剛好相反。這種解析被稱為反向DNS解析(rDNS)。
PTR記錄可以幫助我們過濾垃圾郵件。很多SMTP服務(wù)器會查找對方SMTP服務(wù)器的PTR記錄,得到一個主機名,然后與對方SMTP聲稱的主機名作比較,如果兩者一致,就接收郵件,反之不接收郵件或放進垃圾箱。為了不讓你的郵件被拒收或放進垃圾箱,你應(yīng)該為你的服務(wù)器IP設(shè)置PTR記錄。
查找一個IP地址的PTR記錄的命令為:
dig -x +short
或者
host
因為你是從主機商獲得服務(wù)器的IP,所以你得在主機商那里設(shè)置PTR記錄(反向DNS解析),而不是在域名注冊商那里設(shè)置。
做完了以上準(zhǔn)備工作,我們就可以安裝Postfix了。
三. 安裝Postfix
在ubuntu服務(wù)器上運行下面的命令:
sudo apt-get updatesudo apt-get install postfix -y
安裝過程中會讓你選擇一種Postfix配置類型。一般情況下,我們需要選擇第二種類型:Internet Site。
在第二個頁面System mail
name中填入你的域名,也就是郵箱地址@符號后面的域名,比如,我的郵箱地址是gnu@linuxdashen.com,所以我填的是linuxdashen.com。當(dāng)發(fā)件人的域名地址沒有指定時,Postfix會自動將這個域名添加到發(fā)件人的地址中。
Postfix在安裝過程中會生成/etc/postfix/main.cf配置文件。安裝完成后Postfix會自動運行。我們可以用下面的命令查看Postfix的版本。
user@mail:~$ sudo postconf mail_version
mail_version = 2.11.0
使用netstat來查看Postfix的監(jiān)聽情況:
sudo netstat -lnpt
Postfix的master進程監(jiān)聽TCP 25號端口。
在發(fā)送測試郵件之前,我們最好是查看25號端口是否被防火墻或主機商屏蔽。nmap可以幫助我們掃描服務(wù)器的開放端口。在你的個人電腦上運行下面的命令。
sudo nmap your-server-ip
從圖中可以看見我的服務(wù)器TCP 25號端口是開放的。如果的輸出結(jié)果顯示25端口被過濾,請查看iptables防火墻設(shè)置。如果你的主機商屏蔽了25號端口,給你的主機商提交工單,要求打開25號端口。
四. 發(fā)送測試郵件
實際上,現(xiàn)在我們就能用命令行發(fā)送和接收郵件了。如果你的服務(wù)器有一個用戶名是user1,那么這個用戶的郵箱地址就是user1@yourdomain.com。你可以發(fā)送一封郵件給root用戶:
root@yourdomain.com。也可以向Gmail,Yahoo,QQ,網(wǎng)易等郵箱用戶發(fā)送郵件。不過現(xiàn)在我們只能在服務(wù)器上用命令行發(fā)送和查看郵件。
Postfix在安裝時,會同時安裝一個sendmail的程序(/usr/sbin/sendmail)。你可以用這個sendmail二進制程序向你的Gmail郵箱發(fā)送一封測試郵件。在服務(wù)器上輸入下面的命令:
echo “test email” | sendmail your-account@gmail.com
這是一條很簡單的命令, sendmail從標(biāo)準(zhǔn)輸入讀取到test email,將test
email作為郵件正文,然后發(fā)送到Gmail郵箱。現(xiàn)在你可以查看你的Gmail郵箱,應(yīng)該會看見你的測試郵件。盡管我們沒有指明發(fā)件人地址,但Postfix會自動將你的域名添加到發(fā)送人地址中。你也可以在Gmail中回復(fù)這封測試郵件,然后在郵箱服務(wù)器上查看是否可以收到Gmail發(fā)來的郵件。
每個用戶的郵件保存在/var/spool/mail和/var/mail/文件中。如果你不知道收件箱保存在哪里,運行這條命令:
postconf mail_spool_directory
Postfix的收發(fā)日志保存在/var/log/mail.log文件中。Postfix本身的運行錯誤日志保存在/var/log/mail.err文件中。
五. 使用mail程序來發(fā)送郵件,查看收件箱
sendmail的功能非常有限,現(xiàn)在讓我們來安裝一個命令行郵箱客戶端。
sudo apt-get install mailutils
使用mail發(fā)送郵件的命令為
mail username@gmail.com
user@mail:~$ mail username@gmail.com
Cc:
Subject: 2nd test email
I’m sending this email using the mail program.
輸入主題和正文后,按Ctrl+D來發(fā)送郵件。
要查看收件箱,輸入mail就行了。
mail
以下是用mail管理收件箱的操作方法。
如果你按q來退出mail程序,那么已經(jīng)閱讀過的郵件將會從/var/mail/移動到/home//mbox文件中。這意味著其他郵箱客戶端將不能閱讀這些郵件。如果你不想移動已經(jīng)閱讀的郵件,輸入x退出mail程序。
如果需要自動轉(zhuǎn)發(fā)郵件,那么在用戶的home目錄下新建一個.forward文件,在這個文件里輸入轉(zhuǎn)發(fā)郵件地址,然后保存就行了。注意:用戶郵箱不會保留原始郵件。
六. 文章總結(jié)
現(xiàn)在,我們在Ubuntu服務(wù)器上搭建了一個很簡陋的Postfix郵箱服務(wù)器。我們可以在服務(wù)器上用命令行來發(fā)送和閱讀郵件。另外如果這臺ubuntu服務(wù)器上搭建了一個網(wǎng)站,那么PHPMailer等網(wǎng)站程序就能向外發(fā)送郵件了。但是這種方式有很多不方便,比如每次發(fā)送或查看郵件都要SSH登錄服務(wù)器,而且只能查看純文本的郵件,不能閱讀HTML郵件。在接下來的文章中,我將介紹如何在我們的個人電腦上使用Thunderbird,outlook等郵箱客戶端來發(fā)送和閱讀郵件,如何從瀏覽器中登錄郵箱服務(wù)器以及如何加密我們的郵件,
urhh,還有很多其他的高級設(shè)置。
No configuration 表示不要做任何配置;
Internet Site 表示直接使用本地SMTP服務(wù)器發(fā)送和接收郵件;
Internet with smarthost 表示使用本地SMTP服務(wù)器接收郵件,但發(fā)送郵件時不直接使用本地SMTP服務(wù)器,而是使用第三方smart host來轉(zhuǎn)發(fā)郵件;
Satellite system 表示郵件的發(fā)送和接收都是由第三方smarthost來完成。
Local only 表示郵件只能在本機用戶之間發(fā)送和接收。
要查看第一封郵件,輸入數(shù)字1。如果郵件只顯示了一半,按Enter鍵來顯示剩下的消息。
將所有郵件從第一封排序,輸入h。
要顯示最后一屏郵件,輸入h$或z。
閱讀下一封郵件,輸入n。
刪除第一封郵件,輸入d 1。
刪除第一封,第二封和第四封郵件,輸入d 1 2 4。
刪除前10封郵件,輸入d 1-10。
回復(fù)第1封郵件,輸入reply 1。
退出mail程序,輸入q或x。