如何在 CentOS 8 上安裝和設定 Postfix 郵件伺服器

2019-11-21 07:28:00

Postfix 是一個自由開源的 MTA(郵件傳輸代理),用於在 Linux 系統上路由或傳遞電子郵件。在本指南中,你將學習如何在 CentOS 8 上安裝和設定 Postfix。

實驗室設定:

  • 系統:CentOS 8 伺服器
  • IP 地址:192.168.1.13
  • 主機名:server1.crazytechgeek.info(確保域名指向伺服器的 IP)

步驟 1)更新系統

第一步是確保系統軟體包是最新的。為此,請按如下所示更新系統:

# dnf update

繼續之前,還請確保不存在其他 MTA(如 Sendmail),因為這將導致與 Postfix 設定衝突。例如,要刪除 Sendmail,請執行以下命令:

# dnf remove sendmail

步驟 2)設定主機名並更新 /etc/hosts

使用下面的 hostnamectl 命令在系統上設定主機名:

# hostnamectl set-hostname server1.crazytechgeek.info# exec bash

此外,你需要在 /etc/hosts 中新增系統的主機名和 IP:

# vim /etc/hosts192.168.1.13   server1.crazytechgeek.info

儲存並退出檔案。

步驟 3)安裝 Postfix 郵件伺服器

驗證系統上沒有其他 MTA 在執行後,執行以下命令安裝 Postfix:

# dnf install postfix

Install-Postfix-Centos8

步驟 4)啟動並啟用 Postfix 服務

成功安裝 Postfix 後,執行以下命令啟動並啟用 Postfix 服務:

# systemctl start postfix# systemctl enable postfix

要檢查 Postfix 狀態,請執行以下 systemctl 命令:

# systemctl status postfix

Start-Postfix-check-status-centos8

太好了,我們已經驗證了 Postfix 已啟動並正在執行。接下來,我們將設定 Postfix 從本地傳送郵件到我們的伺服器。

步驟 5)安裝 mailx 郵件用戶端

在設定 Postfix 伺服器之前,我們需要安裝 mailx,要安裝它,請執行以下命令:

# dnf install mailx

Install-Mailx-CentOS8

步驟 6)設定 Postfix 郵件伺服器

Postfix 的組態檔位於 /etc/postfix/main.cf 中。我們需要對組態檔進行一些修改,因此請使用你喜歡的文字編輯器將其開啟:

# vi /etc/postfix/main.cf

更改以下幾行:

myhostname = server1.crazytechgeek.infomydomain = crazytechgeek.infomyorigin = $mydomain## 取消註釋並將 inet_interfaces 設定為 all##inet_interfaces = all## 更改為 all ##inet_protocols = all## 注釋 ###mydestination = $myhostname, localhost.$mydomain, localhost## 取消註釋 ##mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain## 取消註釋並新增 IP 範圍 ##mynetworks = 192.168.1.0/24, 127.0.0.0/8## 取消註釋 ##home_mailbox = Maildir/

完成後,儲存並退出組態檔。重新啟動 postfix 服務以使更改生效:

# systemctl restart postfix

步驟 7)測試 Postfix 郵件伺服器

測試我們的設定是否有效,首先,建立一個測試使用者。

# useradd postfixuser# passwd postfixuser

接下來,執行以下命令,從本地使用者 pkumar 傳送郵件到另一個使用者 postfixuser

# telnet localhost smtp或者# telnet localhost 25

如果未安裝 telnet 服務,那麼可以使用以下命令進行安裝:

# dnf install telnet -y

如前所述執行命令時,應獲得如下輸出:

[root@linuxtechi ~]# telnet localhost 25Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.220 server1.crazytechgeek.info ESMTP Postfix

上面的結果確認與 postfix 郵件伺服器的連線正常。接下來,輸入命令:

# ehlo localhost

輸出看上去像這樣:

250-server1.crazytechgeek.info250-PIPELINING250-SIZE 10240000250-VRFY250-ETRN250-STARTTLS250-ENHANCEDSTATUSCODES250-8BITMIME250-DSN250 SMTPUTF8

接下來,執行橙色高亮的命令,例如 mail fromrcpt todata,最後輸入 quit

mail from:<pkumar>250 2.1.0 Okrcpt to:<postfixuser>250 2.1.5 Okdata354 End data with <CR><LF>.<CR><LF>Hello, Welcome to my mailserver (Postfix).250 2.0.0 Ok: queued as B56BF1189BECquit221 2.0.0 ByeConnection closed by foreign host

完成 telnet 命令可從本地使用者 pkumar 傳送郵件到另一個本地使用者 postfixuser,如下所示:

Send-email-with-telnet-centos8

如果一切都按計劃進行,那麼你應該可以在新使用者的家目錄中檢視傳送的郵件:

# ls /home/postfixuser/Maildir/new1573580091.Vfd02I20050b8M635437.server1.crazytechgeek.info#

要閱讀郵件,只需使用 cat 命令,如下所示:

# cat /home/postfixuser/Maildir/new/1573580091.Vfd02I20050b8M635437.server1.crazytechgeek.info

Read-postfix-email-linux

Postfix 郵件伺服器紀錄檔

Postfix 郵件伺服器郵件紀錄檔儲存在檔案 /var/log/maillog 中,使用以下命令檢視實時紀錄檔,

# tail -f /var/log/maillog

postfix-maillogs-centos8

保護 Postfix 郵件伺服器

建議始終確保用戶端和 Postfix 伺服器之間的通訊安全,這可以使用 SSL 證書來實現,它們可以來自受信任的權威機構或自簽名證書。在本教學中,我們將使用 openssl 命令生成用於 Postfix 的自簽名證書,

我假設 openssl 已經安裝在你的系統上,如果未安裝,請使用以下 dnf 命令:

# dnf install openssl -y

使用下面的 openssl 命令生成私鑰和 CSR(證書簽名請求):

# openssl req -nodes -newkey rsa:2048 -keyout mail.key -out mail.csr

Postfix-Key-CSR-CentOS8

現在,使用以下 openssl 命令生成自簽名證書:

# openssl x509 -req -days 365 -in mail.csr -signkey mail.key -out mail.crtSignature oksubject=C = IN, ST = New Delhi, L = New Delhi, O = IT, OU = IT, CN = server1.crazytechgeek.info, emailAddress = root@linuxtechiGetting Private key#

現在將私鑰和證書檔案複製到 /etc/postfix 目錄下:

# cp mail.key mail.crt /etc/postfix

在 Postfix 組態檔中更新私鑰和證書檔案的路徑:

# vi /etc/postfix/main.cf………smtpd_use_tls = yessmtpd_tls_cert_file = /etc/postfix/mail.crtsmtpd_tls_key_file = /etc/postfix/mail.keysmtpd_tls_security_level = may………

重新啟動 Postfix 服務以使上述更改生效:

# systemctl restart postfix

讓我們嘗試使用 mailx 用戶端將郵件傳送到內部本地域和外部域。

pkumar 傳送內部本地郵件到 postfixuser 中:

# echo "test email" | mailx -s "Test email from Postfix MailServer" -r root@linuxtechi root@linuxtechi

使用以下命令檢查並閱讀郵件:

# cd /home/postfixuser/Maildir/new/# lltotal 8-rw-------. 1 postfixuser postfixuser 476 Nov 12 17:34 1573580091.Vfd02I20050b8M635437.server1.crazytechgeek.info-rw-------. 1 postfixuser postfixuser 612 Nov 13 02:40 1573612845.Vfd02I20050bbM466643.server1.crazytechgeek.info# cat 1573612845.Vfd02I20050bbM466643.server1.crazytechgeek.info

Read-Postfixuser-Email-CentOS8

postfixuser 傳送郵件到外部域([email protected]):

# echo "External Test email" | mailx -s "Postfix MailServer" -r root@linuxtechi root@linuxtechi

注意:如果你的 IP 沒有被任何地方列入黑名單,那麼你傳送到外部域的郵件將被傳送,否則它將被退回,並提示你的 IP 被 spamhaus 之類的資料庫列入黑名單。

檢查 Postfix 郵件佇列

使用 mailq 命令列出佇列中的郵件:

# mailqMail queue is empty#

完成!我們的 Postfix 設定正常工作了!目前就這樣了。我們希望你覺得本教學有見地,並且你可以輕鬆地設定本地 Postfix 伺服器。