首頁 > 軟體

RHCE 系列(九):如何使用無用戶端設定 Postfix 郵件伺服器(SMTP)

2020-06-16 17:49:14

儘管現在有很多線上聯絡方式,電子郵件仍然是一個人傳遞資訊給遠在世界盡頭或辦公室裡坐在我們旁邊的另一個人的有效方式。

下面的圖描述了電子郵件從傳送者發出直到資訊到達接收者收件箱的傳遞過程。

電子郵件如何工作

要實現這一切,背後發生了好多事情。為了使電子郵件資訊從一個用戶端應用程式(例如 Thunderbird、Outlook,或者 web 郵件服務,例如 Gmail 或 Yahoo 郵件)投遞到一個郵件伺服器,並從其投遞到目標伺服器並最終到目標接收人,每個伺服器上都必須有 SMTP(簡單郵件傳輸協定)服務。

這就是為什麼我們要在這篇博文中介紹如何在 RHEL 7 中設定 SMTP 伺服器,從本地使用者傳送的郵件(甚至傳送到另外一個本地使用者)被轉發(forward)到一個中央郵件伺服器以便於存取。

在這個考試的要求中這稱為無用戶端(null-client)安裝。

在我們的測試環境中將包括一個起源(originating)郵件伺服器和一個中央伺服器或中繼主機(relayhost)。

  • 起源郵件伺服器: (主機名: box1.mydomain.com / IP: 192.168.0.18)
  • 中央郵件伺服器: (主機名: mail.mydomain.com / IP: 192.168.0.20)

我們在兩台機器中都會使用你熟知的 /etc/hosts 檔案做名字解析:

192.168.0.18    box1.mydomain.com       box1
192.168.0.20    mail.mydomain.com       mail

 

安裝 Postfix 和防火牆/SELinux 注意事項

首先,我們需要(在兩台機器上):

1、 安裝 Postfix:

# yum update && yum install postfix

2、 啟動服務並啟用開機自動啟動:

# systemctl start postfix
# systemctl enable postfix

3、 允許郵件流量通過防火牆:

# firewall-cmd --permanent --add-service=smtp
# firewall-cmd --add-service=smtp

在防火牆中開通郵件伺服器埠

4、 在 box1.mydomain.com 設定 Postfix

Postfix 的主要組態檔是 /etc/postfix/main.cf。這個檔案本身是一個很大的文字檔案,因為其中包含了解釋程式設定的用途的注釋。

為了簡潔,我們只顯示了需要編輯的行(沒錯,在起源伺服器中你需要保留 mydestination 為空;否則郵件會被儲存到本地,而不是我們實際想要發往的中央郵件伺服器):

myhostname = box1.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination =
relayhost = 192.168.0.20

5、 在 mail.mydomain.com 設定 Postfix

myhostname = mail.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.0.0/24, 127.0.0.0/8

如果還沒有設定,還要設定相關的 SELinux 布林值永久為真:

# setsebool -P allow_postfix_local_write_mail_spool on

設定 Postfix SELinux 許可權

上面的 SELinux 布林值會允許中央伺服器上的 Postfix 可以寫入郵件池(mail spool)。

6、 在兩台機子上重新啟動服務以使更改生效:

  1. #systemctl restart postfix

如果 Postfix 沒有正確啟動,你可以使用下面的命令進行錯誤處理。

  1. #systemctl-l status postfix
  2. #journalctl-xn
  3. # postconf -n

 

測試 Postfix 郵件服務

要測試郵件伺服器,你可以使用任何郵件使用者代理(Mail User Agent,MUA),例如 mail 或 mutt

由於我個人喜歡 mutt,我會在 box1 中使用它傳送郵件給使用者 tecmint,並把現有檔案(mailbody.txt)作為資訊內容:

  1. # mutt -s "Part 9-RHCE series" tecmint@mydomain.com < mailbody.txt

測試 Postfix 郵件伺服器

現在到中央郵件伺服器(mail.mydomain.com)以 tecmint 使用者登入,並檢查是否收到了郵件:

  1. #su tecmint
  2. # mail

檢查 Postfix 郵件伺服器傳送

如果沒有收到郵件,檢查 root 使用者的郵件池看看是否有警告或者錯誤提示。你也許需要使用 nmap 命令確保兩台伺服器執行了 SMTP 服務,並在中央郵件伺服器中開啟了 25 號埠:

  1. #nmap-PN 192.168.0.20

Postfix 郵件伺服器錯誤處理

 

總結

像本文中展示的設定郵件伺服器和中繼主機是每個系統管理員必須擁有的重要技能,也代表了理解和安裝更複雜情景的基礎,例如一個郵件伺服器託管有多個郵件賬戶(甚至成百上千)的域名。

(請注意這種型別的設定需要有 DNS 伺服器,這不在本文的介紹範圍),但你可以參照下面的文章設定 DNS 伺服器:

最後,我強烈建議你熟悉 Postfix 的組態檔(main.cf)和這個程式的幫助手冊。如果有任何疑問,別猶豫,使用下面的評論框或者我們的論壇 Linuxsay.com 告訴我們吧,你會從世界各地的 Linux 高手中獲得幾乎是及時的幫助。

CentOS 6.4下Postfix郵件服務安裝和基本設定 http://www.linuxidc.com/Linux/2013-08/88977.htm

CentOS 5.5下郵件伺服器Postfix安裝 http://www.linuxidc.com/Linux/2012-05/60010.htm

搭建Red Hat Enterprise Linux 5.4的Postfix郵件伺服器 http://www.linuxidc.com/Linux/2012-12/77167.htm

Linux下架構安全郵件伺服器之Postfix(認證) http://www.linuxidc.com/Linux/2012-09/70527.htm

20個關於Postfix的面試題 http://www.linuxidc.com/Linux/2014-12/110061.htm


IT145.com E-mail:sddin#qq.com