在Ubuntu 18.04、16.04、20.04上為多個域設置Postfix僅發送SMTP服務器
在本文中,我將向您展示如何在Ubuntu 20.04、18.04、16.04上將Postfix設置為僅發送SMTP服務器。 我將首先向您展示如何針對單個域執行此操作,然後根據需要將步驟應用於多個域。
用例
您有一個網站/ Web應用程序,需要將交易電子郵件發送給用戶(例如密碼重置電子郵件)。 最有可能的是,用戶無需回復這些電子郵件,或者如果他們回復了,則回複電子郵件將發送到您的專用郵件服務器。 在這種情況下,您可以使用流行的SMTP服務器軟件Postfix在Web服務器上設置僅發送SMTP服務器。
先決條件
為了從您的服務器發送電子郵件,必須打開端口25(出站)。 許多ISP和託管公司(例如DigitalOcean)阻止端口25來控制垃圾郵件。 我建議使用Hostwinds,因為它不會阻塞端口25(出站)。 擁有Hostwinds服務器後,在其上安裝Ubuntu並按照以下說明進行操作。
實際上,為多個域設置Postfix僅發送SMTP服務器並不困難。 首先,我們需要為一個域配置它,然後為多個域設置它。
步驟1:設置主機名和PTR記錄
默認情況下,Postfix在與其他SMTP服務器通信時使用服務器的主機名來標識自己。 如果您的主機名無效,某些SMTP服務器將拒絕您的電子郵件。 您應按如下所示設置標準域名(FQDN)。
sudo hostnamectl set-hostname www.linuxbabe.com
要檢查服務器的主機名,請運行
hostname -f
您需要註銷並重新登錄,以在命令提示符下查看主機名更改。 該主機名應具有指向服務器IP地址的DNS A記錄。
另外,您需要設置一個PTR記錄(又名指針記錄),該記錄將IP地址映射到FQDN。 它是A記錄的對應項。 如果您服務器的IP地址沒有PTR記錄,許多SMTP服務器將拒絕您的電子郵件。
因為您是從託管服務提供商或ISP獲取IP地址,而不是從域名註冊商獲取IP地址,所以必須在託管服務提供商的控制面板中為IP設置PTR記錄,或者詢問您的ISP。 例如,在Hostwinds中,您可以通過點擊 Domains
標籤,然後點擊 Manage rDNS
鏈接。 儘管可以將PTR記錄設置為任何主機名,但為了最佳實踐,您應該使用剛剛設置的FQDN。
要查看您的PTR記錄是否設置正確,請運行以下命令。 用您自己的IP地址替換12.34.56.78。
host 12.34.56.78
請注意,如果您的服務器使用IPv6地址,則最好為FQDN添加AAAA記錄,並為IPv6地址設置PTR記錄。
步驟2:在Ubuntu上安裝Postfix
運行以下命令從默認的Ubuntu存儲庫安裝Postfix。
sudo apt-get update sudo apt-get install postfix -y
系統將要求您選擇郵件服務器配置類型。 按Tab鍵,然後按Enter。
在下一個屏幕中,按Enter鍵選擇默認選項: Internet Site
。
接下來,輸入系統郵件名稱的域名,即@符號後的域名。
步驟3:在Postfix中禁用接收電子郵件
默認情況下,Postfix SMTP服務器在計算機上的所有活動接口上進行偵聽。 由於Postfix SMTP服務器僅用於向用戶發送事務性電子郵件,因此我們可以使它僅在本地主機上偵聽,因此不良行為者無法向其發送垃圾郵件。
編輯Postfix主配置文件。
sudo nano /etc/postfix/main.cf
找到以下行。
inet_interfaces = all
更改為:
inet_interfaces = loopback-only
保存並關閉文件。 重新啟動Postfix,以使更改生效。
sudo systemctl restart postfix
步驟4:安裝和配置OpenDKIM
DKIM代表DomainKeys Identified Mail。 您可以在服務器上安裝OpenDKIM,並使用它使用私鑰將簽名添加到從您的域發送的電子郵件中。 接收SMTP服務器使用您在DNS中發布的相應公鑰來驗證簽名。 如果您希望電子郵件進入收件人的收件箱,則必須添加DKIM簽名。
首先從默認的Ubuntu存儲庫安裝OpenDKIM。
sudo apt-get install opendkim opendkim-tools
然後加 postfix
用戶 opendkim
組。
sudo adduser postfix opendkim
編輯OpenDKIM主配置文件。
sudo nano /etc/opendkim.conf
找到以下幾行。
#Canonicalization simple #Mode sv #SubDomains no
取消注釋並更換 simple
與 relaxed/simple
。 從改變模式 sv
至 s
,因為沒有入站電子郵件來驗證簽名。
Canonicalization relaxed/simple Mode s SubDomains no
在此文件的末尾添加以下行。 (在Ubuntu 18.04上,用戶ID已設置為 opendkim
)
#OpenDKIM user # Remember to add user postfix to group opendkim UserID opendkim # Map domains in From addresses to keys used to sign messages KeyTable refile:/etc/opendkim/key.table SigningTable refile:/etc/opendkim/signing.table # A set of internal hosts whose mail should be signed InternalHosts /etc/opendkim/trusted.hosts
保存並關閉文件。
創建簽名表,密鑰表和可信主機文件
為OpenDKIM創建目錄結構。
sudo mkdir /etc/opendkim sudo mkdir /etc/opendkim/keys
更改所有者 root
至 opendkim
並確保只 opendkim
用戶可以讀寫密鑰目錄。
sudo chown -R opendkim:opendkim /etc/opendkim sudo chmod go-rw /etc/opendkim/keys
創建簽名表。
sudo nano /etc/opendkim/signing.table
將以下行添加到文件中。 這意味着,如果 From:
電子郵件中的標題包含 example.com
,然後使用 sendonly
DKIM選擇器。 你可以改變 sendonly
首選DKIM選擇器名稱,並且在DNS中應該是唯一的。
*@example.com sendonly._domainkey.example.com
保存並關閉文件。 然後創建密鑰表。
sudo nano /etc/opendkim/key.table
添加以下行。 這意味着對於sendonly DKIM選擇器,請使用保存在 /etc/opendkim/keys/example.com/sendonly.private
簽署電子郵件。
sendonly._domainkey.example.com example.com:sendonly:/etc/opendkim/keys/example.com/sendonly.private
保存並關閉文件。 接下來,創建受信任的主機文件。
sudo nano /etc/opendkim/trusted.hosts
將以下行添加到新創建的文件中。
127.0.0.1 localhost *.example.com
以上意味着來自上述IP地址和域的消息將被信任和簽名。
生成私鑰/公鑰對
我們需要生成一個私鑰來簽署外發電子郵件,並生成一個公鑰來接收SMTP服務器以驗證DKIM簽名。 公鑰將在DNS中發布。
為域創建一個單獨的文件夾。
sudo mkdir /etc/opendkim/keys/example.com
使用生成密鑰 opendkim-genkey
工具。
sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s sendonly -v
上面的命令將創建2048位密鑰。 -d (domain)
指定域。 -D (directory)
指定將存儲密鑰的目錄,我們使用 sendonly
作為 selector (-s)
。 執行命令後,私鑰將保存在 sendonly.private
和 sendonly.txt
將是包含公鑰的TXT記錄。
使 opendkim
作為私鑰的所有者。
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/sendonly.private
在DNS記錄中添加公鑰
顯示公鑰
sudo cat /etc/opendkim/keys/example.com/sendonly.txt
後面的字符串 p
參數是公鑰。 在您的DNS管理器中,為第二個域創建TXT記錄。 輸入 sendonly._domainkey
在名稱字段中。 複製括號中的所有內容並將其粘貼到value字段中。 刪除所有雙引號。 (您可以先將其粘貼到文本編輯器中,刪除所有雙引號,然後將其複製到DNS管理器中。DNS管理器可能會要求您刪除其他無效字符,例如回車。)
DNS記錄發布後,在Ubuntu服務器上輸入以下命令以測試密鑰。
sudo opendkim-testkey -d example.com -s sendonly -vvv
如果一切正常,您會看到
key OK
如果你看到 key not secure
消息,不要驚慌。 這是因為未在您的域名上啟用DNSSEC。
步驟5:將Postfix與OpenDKIM連接
Postfix可以通過Unix套接字文件與OpenDKIM對話。 OpenDKIM使用的默認套接字文件是 /var/run/opendkim/opendkim.sock
,如圖所示 /etc/opendkim.conf
文件。 但是Ubuntu隨附的postfix SMTP守護程序在chroot監獄中運行,這意味着SMTP守護程序解析相對於Postfix隊列目錄的所有文件名(/var/spool/postfix
)。 因此,我們需要更改套接字文件。
編輯OpenDKIM主配置文件。
sudo nano /etc/opendkim.conf
找到以下行:
Socket local:/var/run/opendkim/opendkim.sock
將其替換為以下行。 (如果找不到上面的行,請添加下面的行。)
Socket local:/var/spool/postfix/opendkim/opendkim.sock
創建一個目錄來保存OpenDKIM套接字文件,並僅允許opendkim用戶和postfix組訪問它。
sudo mkdir /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim
如果可以在下面找到以下行 /etc/default/opendkim
文件。
SOCKET="local:/var/run/opendkim/opendkim.sock"
要麼
SOCKET=local:$RUNDIR/opendkim.sock
更改為
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
之後,我們需要編輯Postfix主要配置文件。
sudo nano /etc/postfix/main.cf
在此文件的末尾添加以下行以將Postfix與OpenDKIM連接。
# Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters
保存並關閉文件。 重新啟動OpenDKIM和Postfix。
sudo systemctl restart opendkim postfix
如果重新啟動失敗,OpenDKIM將不會產生任何消息。 運行以下命令以檢查其狀態。 確保它正在運行。
systemctl status opendkim
步驟6:創建SPF DNS記錄
防晒指數 (發件人策略框架)記錄指定允許哪些主機或IP地址代表域發送電子郵件。 在您的DNS管理界面中,創建一個新的TXT記錄,如下所示。 使用您自己的服務器的IPv4地址和IPv6地址。
TXT @ v=spf1 mx ip4:12.34.56.78 ip6:2600:3c01::f03c:93d8:f2c6:78ad ~all
步驟7:設置發件人地址,發件人姓名和返迴路徑
您可以在網站/ Web應用程序中設置自定義發件人地址,發件人名稱和返迴路徑。 讓我們以WordPress為例。 您可以在WordPress主題的 functions.php
文件以覆蓋默認的發件人地址,發件人名稱和返迴路徑。 根據需要替換紅色文本。
// Function to change From email address function wpb_sender_email( $original_email_address ) { return '[email protected]'; } // Function to change sender name function wpb_sender_name( $original_email_from ) { return 'LinuxBabe'; } // Set return-path the same as From address function fix_my_email_return_path( $phpmailer ) { $phpmailer->Sender = $phpmailer->From; } // Hooking up our functions to WordPress filters add_filter( 'wp_mail_from', 'wpb_sender_email' ); add_filter( 'wp_mail_from_name', 'wpb_sender_name' ); add_action( 'phpmailer_init', 'fix_my_email_return_path' );
保存文件,您就完成了。
步驟8:為外發電子郵件啟用TLS加密
默認情況下,Postfix在發送外發電子郵件時不使用TLS加密。 要啟用TLS加密,請打開 /etc/postfix/main.cf
文件,並在此文件末尾添加以下兩行。
smtp_tls_security_level = may smtp_tls_loglevel = 1
第一行為Postfix SMTP客戶端啟用TLS加密。 第二行將TLS連接記錄在 /var/log/mail.log
文件,以便您可以檢查TLS加密是否正常工作。 保存並關閉文件。 重新啟動Postfix,以使更改生效。
sudo systemctl restart postfix
由於Postfix不接收傳入的電子郵件,因此無需為Postfix SMTP守護程序配置有效的TLS證書。
步驟9:測試寄件者分數
現在去 https://www.mail-tester.com。 您將看到一個唯一的電子郵件地址。 從您的Postfix SMTP服務器上的網站向該地址發送電子郵件,然後檢查您的分數。 如您所見,我得到了滿分。 在測試結果中,您應該檢查您的PTR記錄,SPF和DKIM記錄是否有效。
您也可以打開 /var/log/mail.log
文件以檢查是否使用TLS加密。 例如,以下行顯示到mail-tester.com的連接已加密。
Anonymous TLS connection established to mail-tester.com[94.23.206.89]:25: TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)
如果您的電子郵件仍然被標記為垃圾郵件怎麼辦?
在本文中,我為您提供了有關電子郵件可傳遞性的更多提示:如何停止將電子郵件標記為垃圾郵件。 儘管這將花費一些時間和精力,但在應用了這些提示後,您的電子郵件最終將被放置在收件箱中。
如何為多個域配置Postfix僅發送SMTP服務器
默認情況下,Postfix允許您使用From頭中的任何域名並返迴路徑地址來發送外發電子郵件。 如果您的服務器託管多個網站,則只需為其他域創建SPF DNS記錄(這很容易做到),然後為其他域配置OpenDKIM。
要為其他域配置OpenDKIM,您需要在簽名表,密鑰表和可信主機文件中添加其他域,如下所示。
簽名表:
*@example.com sendonly._domainkey.example.com *@example.net sendonly._domainkey.example.net
密鑰表:
sendonly._domainkey.example.com example.com:sendonly:/etc/opendkim/keys/example.com/sendonly.private sendonly._domainkey.example.net example.net:sendonly:/etc/opendkim/keys/example.net/sendonly.private
受信任的主機:
127.0.0.1 localhost *.example.com *.example.net
然後,按照與上述其他域相同的步驟生成DKIM專用/公用密鑰對,並在DNS中添加DKIM公用密鑰。 重新啟動OpenDKIM,您就完成了。 不要忘記測試您的發件人分數。
故障排除
如果您的消息未簽名並且DKIM檢查失敗,則可能要檢查後綴日誌(/var/log/mail.log
),看看您的配置有什麼問題。 如果您在郵件日誌中看到以下消息,
warning: connect to Milter service local:opendkim/opendkim.sock: No such file or directory
您可能要檢查 opendkim
systemd服務實際上正在運行。
systemctl status opendkim
如果opendkim正在運行,並且仍然出現上述錯誤,則可能需要更改 smtpd_milters = local:opendkim/opendkim.sock
至 smtpd_milters = local:/opendkim/opendkim.sock
在/etc/postfix/main.cf文件中。
發送批量或批量電子郵件
您可以使用此SMTP服務器發送批量或批量電子郵件嗎?
是的,但是您應該僅向合法訂閱者發送批量電子郵件,也就是說,收件人應該已經註冊了您的郵件列表。 絕對不要發送垃圾郵件(未經請求的批量電子郵件),否則SMTP服務器肯定會被列入黑名單。 在發送批量電子郵件之前,我強烈建議您遵循本文中的建議:如何停止將您的電子郵件標記為垃圾郵件。
結論
我希望本教程可以幫助您在Ubuntu上為多個域設置Postfix僅發送SMTP服務器。 與往常一樣,如果您發現這篇文章很有用,請訂閱我們的免費新聞通訊以獲取更多提示和技巧。 保重🙂