將Postfix配置為在CentOS 8上使用Gmail SMTP

歡迎來到我們的教程,該教程如何配置Postfix以在CentOS 8上使用Gmail SMTP中繼郵件。 後綴 是一個免費的開源郵件傳輸代理,可以路由和傳遞電子郵件。可以將Postfix MTA配置為通過外部SMTP服務器(例如Gmail SMTP服務器)中繼郵件,以實現可靠的郵件傳遞。

將Postfix配置為在CentOS 8上使用Gmail SMTP

在CentOS 8上安裝Postfix

您可以通過安裝 postfix 包裝本身或通過 mailutils 隨其一起安裝的軟件包。

dnf install postfix

在CentOS 8上安裝SASL

SASL(簡單身份驗證和安全層)提供了一種使用用戶名和密碼對用戶進行身份驗證的機制。 Cyrus SASL庫提供了SASL的實現,可以通過運行以下命令將其安裝在CentOS 8系統上;

dnf install cyrus-sasl-plain 

在CentOS 8上安裝Mail Command

CentOS 8上的Mail命令由mailx軟件包提供。

dnf install mailx

將Postfix配置為在CentOS 8上使用Gmail SMTP

現在已使用默認配置安裝Postfix。您可以使用postconf命令查看Postfix配置值。

postconf

要進行進一步的配置更改,請編輯Postfix主配置文件, /etc/postfix/main.cf 並根據需要進行任何必要的更改。

設置Postfix中繼服務器

可以將Postfix配置為通過中繼主機間接傳遞郵件。中繼主機可以使用以下命令在Postfix配置文件中定義: relayhost 參數。

默認情況下, relayhost 參數是 空的。這樣配置Postfix就是試圖將郵件直接傳遞到Internet,這通常是不希望的。

根據 後綴配置,可以為relayhost參數設置不同的值;

  • 在Intranet上,您可以指定組織域名。如果內部DNS不使用MX記錄,請改為指定Intranet網關主機的名稱。
  • 如果是SMTP或LMTP交付,請以域名,主機名,主機名:端口, [hostname]:港口, [hostaddress] 要麼 [hostaddress]:port,用逗號或空格分隔。表格 [hostname] 關閉MX查找。

在本例中,我們將Postfix中繼設置為Gmail SMTP服務器。因此,打開Postfix主配置文件。

vim /etc/postfix/main.cf

在Intranet / Internet部分下,找到 relayhost =,然後將其值設置為Gmail SMTP域名,如下所示;

...
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost = [smtp.gmail.com]:587

配置Postfix SASL身份驗證

根據 後綴

  • SMTP服務器需要確定SMTP客戶端是否有權將郵件發送到遠程目標,或僅發送到服務器本身負責的目標。
  • 通常,當客戶端的IP地址與服務器的IP地址位於“相同的網絡”中時,SMTP服務器將郵件接收到遠程目標。
  • SMTP服務器網絡外部的SMTP客戶端需要一種不同的方式來獲得“相同網絡”特權。為了滿足此需求,Postfix支持SASL身份驗證。這樣,遠程SMTP客戶端可以向Postfix SMTP服務器進行身份驗證,而Postfix SMTP客戶端可以向遠程SMTP服務器進行身份驗證。
  • 客戶端通過身份驗證後,服務器即可為其授予“相同網絡”特權。

要啟用SASL服務器身份驗證,您需要:

  • 通過設置的值啟用SMTP客戶端身份驗證 smtp_sasl_auth_enableyessmtp_sasl_auth_enable = yes
  • 配置Postfix SMTP客戶端以將用戶名和密碼信息發送到郵件網關服務器。這可以通過定義以下路徑來完成: sasl_passwd 作為使用 smtp_sasl_password_maps 參數。smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
  • 對傳出SMTP強制執行STARTTLS加密,以確保與遠程SMTP服務器的連接將使用 smtp_tls_security_level 參數。smtp_tls_security_level = encrypt
  • 定義Postfix SMTP客戶端SASL安全選項。這是零個或多個以下選項;
    • noplaintext: 禁止使用純文本密碼的方法。
    • 不活躍:禁止遭受主動(非詞典)攻擊的方法。
    • 虛構的:禁止遭受被動(詞典)攻擊的方法。
    • 匿名的:禁止允許匿名身份驗證的方法。
    • 相互認證:僅允許提供相互認證的方法。smtp_sasl_security_options = noanonymous

這些配置可以在Postfix配置文件(查看突出顯示的行);

...
relayhost = [smtp.gmail.com]:587
...
#
...
# SASL authentication
# change may to encrypt.
smtp_tls_security_level = encrypt
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix
# Added these lines
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

保存並退出配置文件。

設置SMTP SASL憑據

根據上述配置,SASL憑證數據庫文件設置為 /etc/postfix/sasl_passwd

您應該使用以下格式定義SMTP憑據:

# destination                   credentials
[smtp.domain.name]              username:password

如下所示;

vim /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 [email protected]:password

更換 [email protected]password 使用您的Gmail帳戶憑據。

注意:

  • 如果您指定“[” and “]“ 在裡面 relayhost 目的地,您還必須在 smtp_sasl_password_maps 文件。
  • 如果您指定了非默認的TCP端口(例如“:submission“ 要麼”:587“) 在裡面 relayhost 目的地,您還必須在 smtp_sasl_password_maps 文件。

保護SASL密碼文件

憑據以純文本設置。為了保護其他用戶對文件的訪問,請僅對文件進行讀寫操作 root

chown root:root /etc/postfix/sasl_passwd
chmod go-rwx /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd

創建SASL密碼數據庫文件

Postfix要求 sasl_passwd 文件作為數據庫,以便可以更快地讀取它。使用 postmap 命令將文件轉換為數據庫, sasl_passwd.db

postmap /etc/postfix/sasl_passwd

這將為數據庫文件分配與上述sasl_passwd文件相同的所有權和權限。

ls -l /etc/postfix/sasl_passwd*
-rw-------. 1 root root 56 Dec 2 22:02 /etc/postfix/sasl_passwd
-rw-------. 1 root root 12288 Dec 2 22:03 /etc/postfix/sasl_passwd.db

檢查Postfix配置

跑過 postfix check 命令以檢查Postfix配置是否存在任何錯誤。任何錯誤都應打印在輸出上。

postfix check

您可以忽略警告, postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out

啟動並啟用Postfix以在系統啟動時運行;

systemctl enable --now  postfix

檢查狀態;

systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-12-02 22:04:20 EAT; 6s ago
  Process: 3653 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 3651 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 3647 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 3721 (master)
    Tasks: 3 (limit: 5027)
   Memory: 5.6M
   CGroup: /system.slice/postfix.service
           ├─3721 /usr/libexec/postfix/master -w
           ├─3722 pickup -l -t unix -u
           └─3723 qmgr -l -t unix -u

Dec 02 22:04:19 centos8.kifarunix-demo.com systemd[1]: Starting Postfix Mail Transport Agent...
Dec 02 22:04:20 centos8.kifarunix-demo.com postfix/master[3721]: daemon started -- version 3.3.1, configuration /etc/postfix
Dec 02 22:04:20 centos8.kifarunix-demo.com systemd[1]: Started Postfix Mail Transport Agent.

發送測試郵件以驗證Postfix Gmail SMTP中繼

完成配置後,您可以嘗試發送測試郵件以驗證Gmail SMTP中繼能否正常運行。您可以為此目的使用郵件客戶端或任何其他客戶端。

echo "Test Postfix Gmail SMTP Relay" | mail -s "Postfix Gmail SMTP Relay" [email protected]

您可以跟蹤日誌以檢查交付狀態;

tail /var/log/mail.log

如果得到錯誤;

...status=deferred (SASL authentication failed; server smtp.gmail.com[74.125.133.108] said: 535-5.7.8 Username and Password not accepted.

您需要登錄到用於SASL身份驗證的帳戶並啟用 安全性較低的應用程序訪問

將Postfix配置為在CentOS 8上使用Gmail SMTP

之後,重試發送測試郵件並檢查日誌和歡呼聲,我們的測試郵件已送達, 狀態=已發送

...
Dec  2 22:04:56 ceph-admin postfix/qmgr[3723]: 46993C35EAC: from=<[email protected]>, size=513, nrcpt=1 (queue active)
Dec  2 22:05:00 ceph-admin postfix/smtp[3732]: 46993C35EAC: to=<[email protected]>, relay=smtp.gmail.com[108.177.127.109]:587, delay=4, delays=0.47/0.33/2/1.2, dsn=2.0.0, status=sent (250 2.0.0 OK  1606935899 f18sm554842edt.60 - gsmtp)
...

這就是將Postfix配置為使用Gmail作為SMTP中繼主機的容易程度。這標誌着我們指南的結尾,該指南關於如何安裝和配置Postfix以在CentOS 8上使用Gmail SMTP中繼主機。

閱讀有關Postfix配置的更多信息;

Postfix基本配置

Sidebar