linux入門系列17--郵件系統之Postfix和Dovecot

前文演示了經過Samba和NFS實現文件共享,本篇演示使用Postfix和Dovecot在局域網實現電子郵件收發系統。linux

電子郵件系統是咱們平常生活和工做中很是重要的一個網絡服務,在windows下收發電子郵件系統工具不少,相信你們必定接觸過,好比qq郵箱、163郵箱等等。本文講解在Linux下經過部署Postfix和Dovecot來實現電子郵件的收發。web

> 說明:因爲編輯編輯器發文的時候若是含有郵件符號的會自動添加錨點,所以下文中全部包含郵件符號的改用#代替。apache

1、電子郵件系統前世此生

1.1 產生背景

你們今天熟知的互聯網起源於美國的ARPANET科研項目,這是20世紀60年代美國國防部發起的科研項目。阿帕網是當今互聯網的雛形,它也是世界上第一個運營的封包交換網絡。vim

在阿帕網發展幾年以後,到1971年遇到了嚴峻的問題,當時參與該項目的科學家分佈在美國的不一樣地區,而且不一樣地區存在時差,這就致使了不能及時分享各自的科研成功,所以須要一種可以藉助網絡在計算機之間傳輸數據的方法。windows

看到這裏估計不少同窗懵圈了,前文不是纔講了ftp文件傳輸以及文件共享嗎?是的,他們雖然能夠實現文件的傳輸,可是使用場景卻不同,他們就像打電話同樣,須要服務器和客戶端同時在線才能完成數據傳輸。手機上的語音信箱相信你們用過吧?郵件系統就相似語音信箱,即便你手機沒電或關機了,等你再次開機的時候,你仍然能夠第一時間收到語音留言。centos

基於這種背景,當時參與阿帕網項目的成員中有一位來自麻省理工大學的教授,用了近一年時間完成了電子郵件的設計,在1971年秋經過sndmsg軟件向本身的另一臺計算機發出了人類歷史上第一封電子郵件。安全

1.2 電子郵件相關概念

1.2.1 電子郵件地址

就像平時收發快遞同樣,電子郵件要準確發送給他人,那就須要對方提供明確惟一的收件地址。設計者規定電子信箱格式爲「姓名@計算機主機名稱」,它選擇@符號做爲間隔符的緣由是,設計者認爲人類的額名字和計算機主機名字中應該不會包含@這個特殊字符。服務器

這很好理解,好比咱們平時見到的郵箱:xxxx#qq.com、xxx#163.com等等。網絡

1.2.2 電子郵件協議

電子郵件系統基於郵件協議來完成電子郵件的傳輸,常見郵件協議有:SMTP、POP三、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等)進行收發郵件。

在RHEL五、6及早期的Linux系統中,默認的發件服務是Sendmail,在RHEL7系統中替換成了Postfix。相對而言Postfix在穩定性、併發性方面有了很大改進,而且減小了不少沒必要要的配置步驟,使用更簡單。

2、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來搭建一個基礎的電子郵件系統,其工做流程以下:

一般狀況下,咱們的郵箱地址看起來應該形如:test#heimatengyun.com 也就是按照「用戶名#主機地址或域名」的格式來進行規範。

爲了提升可讀性不直接採用形如:test#192.168.0.1這種ip地址的形式。這種ip地址的方式一是由於不容易記住,另外還容易產生誤解(看起來有點像SSH遠程鏈接的地址),所以咱們還須要先部署bind服務程序來爲電子郵件服務器和客戶端提供NDS域名解析服務。

> 篇幅所限,在此不具體分析Bind服務的使用和配置,只給出具體的操做步驟。

下邊就來演示下bind服務程序的配置及管理

2.1.1 配置服務器主機名稱

須要保證centos服務器主機名稱與發信域名保持一致

[root[@email](https://my.oschina.net/u/159820) ~]# hostnamectl set-hostname mail.heimatengyun.com
[root[@email](https://my.oschina.net/u/159820) ~]# hostname
mail.heimatengyun.com
[root@mail ~]# cat /etc/hostname 
mail.heimatengyun.com
[root@mail ~]#

設置主機名稱也能夠直接修改/etc/hostname文件。

另外能夠看到修改後的主機名稱只顯示了域名前邊部分([root#mail ~]),而非完整的域名([root#mail.heimatengyun.com ~])。

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" root@heimatengyun.com
[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" heima@heimatengyun.com
[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加上發件域,即爲:heima#heimatengyun.com,密碼爲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網站。

相關文章
相關標籤/搜索