Postfix 是一款受歡迎的免費且開源軟體,用作郵件傳輸代理(MTA)。Postfix 的工作是路由和遞送電子郵件。除了經典用途外,Postfix 還可以配置為僅由本地應用程式發送電子郵件。
Postfix 的這種應用是在各種情況下部署的實用技巧。例如,它可用於定期發送電子郵件通知、與外發流量受限的第三方電子郵件服務提供商合作等。與任何功能齊全的 SMTP 伺服器相比,Postfix 是一個更輕量級的替代方案,同時保留了必要的功能。
在本教學中,請查看 如何在 Ubuntu 上安裝和配置 Postfix 作為僅發送的 SMTP 伺服器。
先決條件
為了遵循本指南,您需要滿足以下先決條件:
-
您需要有一個 配置妥當的 Ubuntu 伺服器 ,並具有 非 root 的 sudo 使用者存取權限.
-
您還需要一個完整註冊的網域名稱。從我們的 從商業憑證授權單位安裝 SSL 憑證 文章中了解更多關於網域名稱的資訊。
-
最後,您需要一條將網域名稱指向伺服器公用 IP 位址的 DNS 記錄。
安裝 Postfix
滿足前提條件後,伺服器就準備好部署 Postfix 了。安裝 Postfix 最簡單的方法是安裝 mailutils 套件。它可直接從官方 Ubuntu 套件庫中取得。
首先,啟動終端機,並更新 APT 套件資料庫:
|
1 |
sudo apt update |

然後,您可以安裝 Postfix:
|
1 |
sudo apt install mailutils |

在安裝過程中,會彈出以下配置視窗。預設選項是 Internet Site。要確認選擇,請按 TAB 鍵將游標移至下一部分。然後,按下 Enter:

下一步將要求輸入系統郵件名稱(System mail name)。它將是建立伺服器時分配給伺服器的名稱。如指令碼中所述,如果本機主機的郵件地址為「foo@example.org」,則系統郵件名稱將為 example.org:

請注意,稍後也可以隨時使用以下命令觸發配置指令碼:
|
1 |
sudo dpkg-reconfigure postfix |
配置 Postfix
在此步驟中,Postfix 將被配置為僅發送和接收來自 localhost 的電子郵件。這需要 Postfix 監聽 loopback 介面。這是伺服器用於內部通訊的虛擬網路介面。接下來,使用您選擇的文字編輯器開啟 Postfix 配置文件:
|
1 |
sudo nano /etc/postfix/main.cf |
將 inet_interface 的值變更為 loopback-only:

您必須變更的另一個指令是 mydestination。它定義了透過 local_transport 郵件遞送傳輸進行遞送的網域清單。預設值將類似於這樣:

將其值變更為以下內容:
|
1 |
mydestination = localhost.$mydomain, localhost, $myhostname |

如果您的網域實際上是子網域,且您希望電子郵件看起來像是從主網域發送的,請在 Postfix 配置的末尾新增以下指令。它將從電子郵件地址中移除子網域:
|
1 |
masquerade_domains = <main_domain> |

要使變更生效,請重新啟動 Postfix:
|
1 |
sudo systemctl restart postfix |
測試 SMTP 伺服器
假設配置過程順利,現在是測試它的時候了。為此,請檢查 Postfix 是否可以使用 mail 命令向外部電子郵件帳戶發送電子郵件。它是 mailutils 套件的一部分:
|
1 |
echo "Test email body" | mail -s "Subject line" <email_address> |
郵件應該會寄達指定的電子郵件地址。此時,所有傳送的電子郵件都是未加密的。服務供應商通常會將此類電子郵件標記為垃圾郵件,因此請務必檢查垃圾郵件區以確認郵件是否寄達。
如果 mail 指令回報錯誤,或者電子郵件在很長一段時間後仍未寄達,請重新檢查 Postfix 設定,並確保伺服器名稱和主機名稱設定正確。使用此設定,電子郵件看起來將從以下地址傳送:
|
1 |
<username>@<domain> |
在這裡,username 將是執行 mail 指令的伺服器使用者的使用者名稱。
轉寄系統郵件
我們已成功驗證電子郵件伺服器已正確設定且功能正常。現在必須將其設定為轉寄 root 的電子郵件。所有傳送到伺服器的系統產生郵件都將轉寄到外部電子郵件地址。對於電子郵件收件者, /etc/aliases 檔案包含替代名稱清單。使用您選擇的文字編輯器開啟它:
|
1 |
sudo nano /etc/aliases |
預設情況下,它看起來像這樣:

在檔案末尾,新增以下行:
|
1 |
root: <email_address> |

它表示傳送到 root 的電子郵件將被轉寄到某個電子郵件地址。要使變更生效,請執行以下指令。它將重建 mail 指令所使用的別名資料庫:
|
1 |
sudo newaliases |
![]()
接下來,您需要測試變更是否成功。傳送一封測試電子郵件到 root:
|
1 |
echo "Test root email body" | mail -s "Subject line" root |
電子郵件應該會寄達指定的電子郵件地址。別忘了檢查垃圾郵件資料夾,因為目前尚未設定加密。
啟用 SMTP 加密
以未加密格式傳送電子郵件是冒險的舉動。為了確保安全,必須啟用 SMTP 加密。為此,我們將向 Let’s Encrypt 申請您網域的免費 TLS 憑證。
對於 Ubuntu,是由 Certbot 工具來執行此工作。幸運的是,它可以直接從官方 Ubuntu 套件庫中取得。使用以下指令安裝 Certbot:
|
1 |
sudo apt install certbot |

假設 伺服器已設定 UFW,則必須開啟連接埠 80,以便進行網域驗證。執行以下指令來啟用它:
|
1 |
sudo ufw allow 80 |

現在,執行 Certbot 來產生憑證。它會指示 Certbot 發行帶有 4096 位元 RSA 金鑰的憑證。驗證將透過連接埠 80 (HTTP) 進行:
|
1 |
sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d <domain> |
輸出將會像這樣:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
儲存 偵錯 記錄 至 /var/log/letsencrypt/letsencrypt.log 外掛程式 已選擇: 驗證器 standalone, 安裝程式 None 正在取得 一個 新的 憑證 正在執行 以下 的 挑戰: http-01 挑戰 針對 '<domain>' 正在等待 for 驗證... 正在清理 up 挑戰 重要 注意事項: - 恭喜! 您的 憑證 和 鏈 已 被 儲存 於: /etc/letsencrypt/live/<domain>/fullchain.pem 您的 金鑰 檔案 已 被 儲存 於: /etc/letsencrypt/live/<domain>/privkey.pem 您的 憑證 將 過期 於 2020-07-11. 若要 取得 一個 新的 或 微調的 版本 的 此 憑證 在 the 未來, 只需 執行 certbot 再次. 若要 非-互動式地 續期 *所有* 的 您的 憑證, 請執行 "certbot renew" - 如果 您 喜歡 Certbot, 請 考慮 支持 我們的 工作 透過: 捐款 給 ISRG / Let's Encrypt: https://letsencrypt.org/donate 捐款 給 EFF: https://eff.org/donate-le |
金鑰將儲存在以下目錄中:
|
1 |
/etc/letsencrypt/live/<domain> |
現在您的憑證已生成,請在文字編輯器中開啟 Postfix 設定檔:
|
1 |
sudo nano /etc/postfix/main.cf |
尋找以下區段 TLS 參數:

之後,修改以下指令的值 smtpd_tls_cert_file 以及 smtpd_tls_key_file:

接下來,儲存並關閉檔案。若要使變更生效,請重新啟動 Postfix:
|
1 |
sudo systemctl restart postfix |
最後,再次傳送一封測試郵件到目標電子郵件地址:
|
1 |
echo "This is email body" | mail -s "Email subject line" <email> |
該電子郵件現在應該會像其他電子郵件一樣正常顯示。如果您檢查該電子郵件的技術資訊,它將顯示為已加密。
結語
恭喜!您已成功設定由 Postfix 支援的僅傳送電子郵件伺服器。電子郵件傳輸也已使用適當的加密金鑰進行安全保護。
若要瞭解更多優化電子郵件傳輸的方法,請參考此教學課程 使用 Google SMTP 伺服器的最佳方法.
祝您電腦使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。