前文演示了通過Samba和NFS實作檔案共享,本篇演示使用Postfix和Dovecot在局域網實作電子郵件收發系統,
電子郵件系統是我們日常生活和作業中非常重要的一個網路服務,在windows下收發電子郵件系統工具很多,相信大家一定接觸過,比如qq郵箱、163郵箱等等,本文講解在Linux下通過部署Postfix和Dovecot來實作電子郵件的收發,
一、電子郵件系統前世今生
1.1 產生背景
大家今天熟知的互聯網起源于美國的ARPANET科研專案,這是20世紀60年代美國國防部發起的科研專案,阿帕網是當今互聯網的雛形,它也是世界上第一個運營的封包交換網路,
在阿帕網發展幾年之后,到1971年遇到了嚴峻的問題,當時參與該專案的科學家分布在美國的不同地區,并且不同地區存在時差,這就導致了不能及時分享各自的科研成功,因此需要一種能夠借助網路在計算機之間傳輸資料的方法,
看到這里估計很多同學懵圈了,前文不是才講了ftp檔案傳輸以及檔案共享嗎?是的,他們雖然可以實作檔案的傳輸,但是使用場景卻不一樣,他們就像打電話一樣,需要服務器和客戶端同時在線才能完成資料傳輸,手機上的語音信箱相信大家用過吧?郵件系統就類似語音信箱,即使你手機沒電或關機了,等你再次開機的時候,你仍然可以第一時間收到語音留言,
基于這種背景,當時參與阿帕網專案的成員中有一位來自麻省理工大學的教授,用了近一年時間完成了電子郵件的設計,在1971年秋通過sndmsg軟體向自己的另外一臺計算機發出了人類歷史上第一封電子郵件,
1.2 電子郵件相關概念
1.2.1 電子郵件地址
就像平時收發快遞一樣,電子郵件要準確發送給他人,那就需要對方提供明確唯一的收件地址,設計者規定電子信箱格式為“姓名@計算機主機名稱”,它選擇@符號作為間隔符的原因是,設計者認為人類的額名字和計算機主機名字中應該不會包含@這個特殊字符,
這很好理解,比如我們平時見到的郵箱:[email protected]、[email protected]等等,
1.2.2 電子郵件協議
電子郵件系統基于郵件協議來完成電子郵件的傳輸,常見郵件協議有:SMTP、POP3、IMAP4等,
SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協議,用于發送和中轉發出的電子郵件,占用TCP埠25,
POP3(Post Office Protocol 3):郵局協議版本3,用于將電子郵件存盤到本地主機,占用TCP埠110,
IMAP4(Internet Message Access Protocol 4):Internet訊息訪問協議版本4,用于在本地主 機上訪問郵件,占用TCP埠143,
1.2.3 電子郵件傳輸程序
電子郵件在傳輸程序中涉及到幾個角色:MUA、MTA、MDA,
MUA(Mail User Agent):郵件用戶代理,作用是替用戶收發郵件的服務器,
MTA(Mail Transfer Agent):郵件傳輸代理,作用是轉發處理不同電子郵件服務供應商之間的郵件,把來自于 MUA 的郵件轉發到合適的 MTA 服務器,
MDA(Mail Delivery Agent):郵件投遞代理,作用是把來自于MTA的郵件保存到本地的收件箱中,
舉個例子,假設你用一個新浪信箱給一個谷歌信箱發送一封電子郵件,其傳輸程序如下圖:

如前所述,電子郵件系統不同于檔案傳輸需要雙方同時保持在線,當用戶發送郵件后,無需等待投遞作業完成就可以下線,上圖中假設如果對方郵件服務器(谷歌的MTA)宕機或離線,則發件服務器(新浪的MTA)就會把要發送的內容自動暫時保存到他本地,等檢測到對方郵件服務器恢復后再次投放,隨后收件人(MUA)就能在自己的郵箱中找到這封郵件了,
1.2.4 Linux下電子郵件收發程式
一個最基礎的電子郵件系統至少要能提供發件服務和收件服務,在Linux下使用基于SMTP協議的Postfix服務程式來提供發件服務功能,使用基于POP3協議的Dovecot服務程式提供收件服務功能,部署Postfix和Dovecot服務程式后,就可以使用郵件客戶端(如Foxmail、Outlook等)進行收發郵件,
在RHEL5、6及早期的Linux系統中,默認的發件服務是Sendmail,在RHEL7系統中替換成了Postfix,相對而言Postfix在穩定性、并發性方面有了很大改進,并且減少了很多不必要的配置步驟,使用更簡單,
二、Linux局域網部署電子郵件系統
2.1 準備作業
2.1.0 主機規劃及郵件系統架構
(1)主機及網路規劃
開始之前我們郵件系統規劃如下:
| 主機名稱 | 作業系統 | IP地址 |
|---|---|---|
| 電子郵件系統及DNS服務器 | Centos7 | 192.168.0.101 |
| 客戶端主機(outlook) | win7 | 192.168.0.111 |
| 客戶端主機(foxmail) | win10 | 192.168.0.112 |
域名采用heimatengyun.com (由于此演示是在局域網,自己單擊DNS服務器,因此域名可以任意寫一個)
Centos7是虛擬機,win10是虛擬機的宿主機,win7是另外一臺物理機,他們之間組成一個局域網,虛擬機centos7作為電子郵件系統以及DNS服務器,設定其網路模式為:橋接模式,目的是直連主機物理網路,以此構成一個局域網,
(2)電子郵件系統基礎架構
如1.2.4所述,我們采用Postfix和Dovecot來搭建一個基礎的電子郵件系統,其作業流程如下:

通常情況下,我們的郵箱地址看起來應該形如:[email protected] 也就是按照“用戶名@主機地址或域名”的格式來進行規范,
為了提高可讀性不直接采用形如:[email protected]這種ip地址的形式,這種ip地址的方式一是因為不容易記住,另外還容易產生誤解(看起來有點像SSH遠程連接的地址),因此我們還需要先部署bind服務程式來為電子郵件服務器和客戶端提供NDS域名決議服務,
篇幅所限,在此不具體分析Bind服務的使用和配置,只給出具體的操作步驟,
下邊就來演示下bind服務程式的配置及管理
2.1.1 配置服務器主機名稱
需要保證centos服務器主機名稱與發信域名保持一致
[root@email ~]# hostnamectl set-hostname mail.heimatengyun.com
[root@email ~]# hostname
mail.heimatengyun.com
[root@mail ~]# cat /etc/hostname
mail.heimatengyun.com
[root@mail ~]#
設定主機名稱也可以直接修改/etc/hostname檔案,
另外可以看到修改后的主機名稱只顯示了域名前邊部分([root@mail ~]),而非完整的域名([[email protected] ~]),
2.1.2 防火墻策略設定
清空iptables防火墻默認策略,避免因防火墻中默認存在的策略阻止了客戶端DNS決議域名及收發郵件,
[root@mail ~]# iptables -F
[root@mail ~]#
要是嫌麻煩或為了避免干擾,也可以直接先關掉防火墻和selinux,
2.1.3 使用bind服務為電子郵件系統提供域名決議
(1)安裝bind服務
[root@mail ~]# yum install bind-chroot
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
...省略部分內容
Complete!
[root@mail ~]#
(2)主組態檔配置
bind服務程式的名稱為named,因此需要找到對應的組態檔/etc/named.conf,按如圖方式進行修改,
[root@mail ~]# vim /etc/named.conf

將上圖2處都改為any,表示服務器上所有的IP都可以提供DNS域名決議服務,允許所有人對本地服務器發送DNS查詢請求,
(3)區域組態檔配置
區域組態檔為/etc/named.rfc1912.zones,為了給用戶提供配置參考,該檔案中已默認有了一些無關緊要的決議引數,我們可以直接把檔案清慷訓將我們的內容添加到檔案末尾即可
[root@mail ~]# vim /etc/named.rfc1912.zones
zone "heimatengyun.com" IN {
type master;
file "heimatengyun.com.zone";
allow-update {none;};
};
直接在檔案末尾添加上述配置,保存并退出,
(4)域名資料檔案配置
創建前一步中配置的資料檔案:heimatengyun.com.zone
[root@mail ~]# cp -a /var/named/named.localhost /var/named/heimatengyun.com.zone
[root@mail ~]# vim /var/named/heimatengyun.com.zone
注意使用cp命令時記得添加-a引數,保留原始檔案的所有者、所屬組、權限等資訊,這樣bind服務程式才能順利讀取檔案內容,
按照如下提示根據自身需要修改即可

如上配置,對應的服務器主機名即為mail.heimatengyun.com,而郵件域為@heimatengyun.com,
需要注意,域名后有一個點,如果組態檔配錯了會導致后邊重啟bind服務的時候啟動不起來,如果遇到啟動不起來的情況請仔細檢查組態檔,
配置好后需要重啟bind服務使其生效,
[root@mail ~]# systemctl restart named
[root@mail ~]# systemctl enable named
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'
[root@mail ~]#
(5)DNS服務器地址配置
通過nmtui命令將DNS服務器地址配置為本地的IP地址,忘記操作步驟的請看“linux入門系列11--Centos7網路服務管理”2.2節,

修改完成后重啟網路服務使配置生效,
[root@mail ~]# systemctl restart network
2.1.4 測驗域名決議
通過nslookup命令測驗本地DNS是否生效
[root@mail ~]# nslookup
> mail.heimatengyun.com
Server: 192.168.0.101
Address: 192.168.0.101#53
Name: mail.heimatengyun.com
Address: 192.168.0.101
> exit
[root@mail ~]#
說明本地DNS決議服務已經生效了,接下來就開始部署電子郵件系統了,
2.2 Postfix發件系統
Postfix是一款由IBM資助研發的免費開源電子郵件服務程式,能夠很好地兼容 Sendmail 服務程式,由許多小模塊組成,每個小模塊都可以完成特定的功能,因此可在生產作業環境中根據需求靈活搭配它們,
2.2.1 安裝Postfix服務
[root@mail ~]# rpm -q postfix
postfix-2.10.1-6.el7.x86_64
[root@mail ~]#
可以看到,在RHEL7中已經默認安裝了Postfix,
防火墻禁用
2.2.2 配置Postfix服務
主組態檔為/etc/postfix/main.cf,其中主要的引數如下:
| 引數 | 作用 |
|---|---|
| myhostname | 郵局系統的主機名 |
| mydomain | 郵局系統的域名 |
| myorigin | 從本機發出郵件的域名名稱 |
| inet_interfaces | 監聽的網卡介面 |
| mydestination | 可接收郵件的主機名或域名 |
| mynetworks | 設定可轉發哪些主機的郵件 |
| relay_domains | 設定可轉發哪些網域的郵件 |
[root@mail ~]# vim /etc/postfix/main.cf
總共有5處需要修改,分別如下:
myhostname = mail.heimatengyun.com
此處定義一個myhostname 的變數,用來保存服務器的主機名稱,以供后邊的引數呼叫,
mydomain = heimatengyun.com
定義一個名為 mydomain 的變數,用來保存郵件域的名稱,以供后邊的引數呼叫,
myorigin = $mydomain
呼叫前面的mydomain變數,用來定義發出郵件的域,這樣通過呼叫變數的好處是避免重復寫入資訊,以及便于日后統一修改,
inet_interfaces = all
定義網卡監聽地址,可以指定要使用服務器的哪些IP地址對外提供電子郵件服務;也可以寫成 all,代表所有IP地址都能提供電子郵件服務,
mydestination = $myhostname , $mydomain
定義可接收郵件的主機名或域名串列,這里可以直接呼叫前面定義好的 myhostname 和 mydomain變數,
2.2.3 創建電子郵件系統登錄用戶
與之前提到的vsftp服務程式一樣,postfix可以使用本地系統的賬號密碼進行登錄,(創建的創建應該添加nologin禁止登陸,但此處為了后邊方便演示,使其允許登錄)
[root@mail ~]# useradd heima
[root@mail ~]# echo "123456" | passwd --stdin heima
Changing password for user heima.
passwd: all authentication tokens updated successfully.
2.2.4 重啟服務并加入開機啟動
[root@mail ~]# systemctl restart postfix
[root@mail ~]# systemctl enable postfix
2.3 Dovecot收件系統
Dovecot是一款能夠為Linux系統提供IMAP和POP3電子郵件服務的開源服務程式,安全性高、配置簡單、執行速度快并且占用資源少,推薦使用,
2.3.1 安裝Dovecot
[root@mail ~]# yum install dovecot
...省略部分內容
Installed:
dovecot.x86_64 1:2.2.36-3.el7_7.1
Complete!
[root@mail ~]#
2.3.2 配置Dovecot
(1)主組態檔
Dovecot服務程式的主配置文件為/etc/dovecot/dovecot.conf ,
[root@mail ~]# vim /etc/dovecot/dovecot.conf
一般情況下有2處需要修改
第一處:
protocols = imap pop3 lmtp
disable_plaintext_auth = no
找到以上行并取消注釋,并在其下添加一行,允許用戶使用明文進行密碼驗證,
之所以這樣操作,是因 為 Dovecot 服務程式為了保證電子郵件系統的安全而默認強制用戶使用加密方式進行登錄, 而由于當前還沒有加密系統,因此需要添加該引數來允許用戶的明文登錄,
第二處:
#login_trusted_networks =192.168.78.0/24
找到login_trusted_networks,根據需要來選擇取消注釋并配置允許登錄的網段地址,我們可以在這里限制只有來自于某個網段的用戶才能使用電子郵件系統,如果想允許所有人都能使用,則不用修改本引數,
為了演示方便,此處我們不修改,使其允許所有人都能使用,
(2)其他組態檔
將組態檔/etc/dovecot/conf.d/10-ssl.conf的ssl設定為no
[root@mail ~]# vim /etc/dovecot/conf.d/10-ssl.conf
...省略部分內容
ssl = no
這步如果不設定的話,客戶端通過outlook無法接受郵件,我在這里踩了個大坑,希望大家注意,
2.3.3 配置郵件格式與存盤路徑
在子組態檔/etc/dovecot/conf.d/10-mail.conf 中,找到mail_location并把注釋去掉即可
[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
修改后保存并退出,
切換到剛才建立的heima賬號,并在其家目錄中創建用于保存郵件的目錄,
[root@mail ~]# su - heima
[heima@mail ~]$ mkdir -p mail/.imap/INBOX
[heima@mail ~]$ exit
logout
[root@mail ~]#
最后記得重啟dovecot服務
[root@mail ~]# systemctl restart dovecot
[root@mail ~]# systemctl enable dovecot
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'
[root@mail ~]#
至此基本的電子郵件系統就安裝完畢,接下來進行測驗收發電子郵件,
2.4 測驗收發郵件
經過上邊的操作,基本的電子郵件系統以及構建好了,如何驗證該電子郵件系統是否可用呢?以下三種方法中根據個人喜好選取一種即可,為了保持完整性,分別進行了測驗,
2.4.1 采用mail命令簡單測驗收發
用mial命令就可以實作收發郵件,不同用戶登錄到系統中用mail命令,就可以看到收發的郵件了,理論上不同用戶登錄系統只能看到自己的郵件,比如當前用戶如果是root,那他只能看到別人發給他的郵件(一種特殊情況是可以設定郵件別名,這樣就可以看到其他人的郵件),如果當前用戶是heima,那也只能看到它自己的郵件,
用root用戶分別給自己發郵件并查看
[root@mail ~]# echo "msg" | mail -s "first email to root" [email protected]
[root@mail ~]# mail
... 省略部分內容
N 10 root Tue Feb 4 22:22 18/609 "first email to root"
& exit
You have mail in /var/spool/mail/root
[root@mail ~]#
root給heima發郵件并切換到heima賬戶查看郵件
[root@mail ~]# echo "msg" | mail -s "first email to heima" [email protected]
[root@mail ~]# su - heima
Last login: Tue Feb 4 15:43:52 CST 2020 on :1
ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1580802239
[heima@mail ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/heima": 2 messages 1 new
1 Mail System Internal Tue Feb 04 20:15 13/562 "DON'T DELETE THIS MES"
>N 2 root Tue Feb 4 22:22 18/613 "first email to heima"
& exit
You have mail in /var/spool/mail/heima
[heima@mail ~]$ exit
logout
[root@mail ~]#
可以看到收件和發件都正常,
但是這樣還不夠,這是在Centos服務器內部,還需要客戶端進行測驗,以下outlook和foxmail任選其一即可
2.4.2 采用outlook測驗
在win7上安裝outlook2007來進行測驗,先將win7的dns設定為centos的ip地址,即192.168.0.101
安裝并配置outlook,程序如下:
(1)運行outlook

點擊下一步按鈕
(2)配置電子郵件,保持默認即可

點擊下一步按鈕
(3)選擇電子郵件服務協議型別,保持默認即可

點擊下一步按鈕
(4)填寫賬戶資訊

姓名任意取,電子郵件為前邊創建的系統用戶heima加上發件域,即為:[email protected],密碼為heima賬戶的登錄密碼,
點擊下一步按鈕
(5)電子郵件服務登錄驗證

之前我們配置Dovecot為使用明文登錄電子郵件服務,而Outlook軟體默認會通過SSL加密協議嘗試登錄,因此會提示加密連接不可用,
再次點擊“下一步”按鈕,

順利的話,就會出現這個配置成功的界面,實際可能你的操作程序中會遇到一些問題,此處如果賬號密碼有問題或者登陸遠程郵件系統有問題都會彈出測驗界面,如果遇到問題請嚴格按照前邊的步驟進行檢查,筆者此處就曾遇到只能發件不能收件的問題,原因是由于未開啟ssl,需要在docovet中將其關閉,
添加成功后,就可以像自己以及向root用戶發送郵件了,其操作步驟給發qq郵件是一直的,相信大家一定用過qq郵件,所以就不在多嘴了,
截圖為證

2.4.3 采用foxmail測驗
在win10上安裝foxmail進行測驗,同理先將win10dns設定為centos的ip地址,
foxmail官方地址:https://www.foxmail.com/
(1)安裝foxmail
非常簡單,直接根據向導即可,
(2)設定郵件賬號
安裝完成后,設定郵件賬號,選擇“其他郵箱”

輸入賬號密碼

點擊創建按鈕,在界面中選擇接收服務器型別為POP3

點擊創建按鈕

點擊完成按鈕,即可完成安裝和設定,
設定成功后就可以正常收發郵件了,
截圖為證

通過對比,個人感覺foxmail不如outlook穩定,并且收件較慢,
通過本文的演示,大家應該理解電子郵件系統的基本原理和流程,并可以在局域網搭建一個基本的電子郵件收發系統,
下一篇文章將演示apache服務搭建靜態web網站,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/136589.html
標籤:Linux
上一篇:SSH配置Linux免密登錄
