Ubuntu 22.04 Sendmail 安裝設定:SMTP、防火牆與故障排除|WCST 技術 Blog

發布日期: |更新日期:
文章主圖:Ubuntu 22.04 Sendmail 安裝設定:SMTP、防火牆與故障排除|WCST 技術 Blog

Sendmail 是 Linux 系統常見的郵件傳送服務,可用於系統通知、網站寄信、伺服器告警與 SMTP 郵件轉送。對於需要在 Ubuntu 22.04 上建立基本郵件寄送功能的管理者來說,Sendmail 仍然是一個值得學習的郵件伺服器方案。

本文將完整示範如何在 Ubuntu 22.04 安裝與設定 Sendmail,內容包含套件安裝、主機名稱設定、SMTP 測試、防火牆規則、允許 SSH、允許 HTTP/HTTPS、服務啟動與停止、Log 查詢、常見故障排除、Q&A 與進階安全設定。

1. Sendmail 是什麼?

Sendmail 是一套郵件傳輸代理程式,也就是 MTA。它的主要工作是接收、處理與轉送電子郵件。當 Linux 系統需要寄出系統通知、網站表單通知、Cron 執行結果或監控告警時,就可以透過 Sendmail 將郵件送出。

在 Ubuntu 22.04 中,Sendmail 可以透過 apt 套件管理工具安裝。安裝完成後,系統可以使用 mail、sendmail 或其他程式呼叫本機郵件服務來寄出郵件。

1.1 Sendmail 適合哪些情境?

  • Linux 系統需要寄出系統通知郵件
  • 網站表單需要寄送通知信
  • 伺服器需要寄出監控告警
  • Cron 排程需要寄送執行結果
  • 需要建立基本 SMTP 郵件轉送服務
  • 需要學習 Linux 郵件伺服器運作原理

2. 安裝前準備

在安裝 Sendmail 之前,建議先確認 Ubuntu 22.04 系統已經可以正常連線到網際網路,並且具備 sudo 管理權限。如果這台伺服器要對外寄信,還需要準備網域名稱與 DNS 記錄。

如果只是要讓本機系統或網站程式寄送通知信,初期可以先完成本機 Sendmail 安裝與測試,之後再補上 SPF、DKIM、DMARC 與 PTR 反解等郵件安全設定。

2.1 建議環境

  • 作業系統:Ubuntu 22.04 LTS
  • 管理權限:具備 sudo 權限的帳號
  • 網路狀態:可以連線到 Ubuntu 套件庫
  • 網域名稱:建議準備一個正式網域
  • DNS 管理權限:建議可設定 A、MX、SPF、DKIM、DMARC、PTR 記錄
  • 防火牆:建議使用 UFW 管理基本連線規則

2.2 更新系統套件

sudo apt update
sudo apt upgrade -y

更新系統套件可以避免安裝 Sendmail 時遇到套件版本過舊或相依套件不完整的問題。正式伺服器更新前,建議先確認目前服務狀態與備份重要設定檔。

3. 安裝 Sendmail

Ubuntu 22.04 可以直接使用 apt 安裝 Sendmail。建議同時安裝 sendmail、sendmail-cf 與 mailutils,這樣可以取得 Sendmail 主程式、設定工具與測試寄信用的 mail 指令。

sudo apt install sendmail sendmail-cf mailutils -y

3.1 檢查 Sendmail 是否安裝成功

sendmail -d0.1 -bv root

如果可以看到 Sendmail 的版本資訊,代表 Sendmail 主程式已經安裝成功。接下來需要檢查服務狀態與主機名稱設定。

4. 設定 hostname 與 /etc/hosts

郵件伺服器非常依賴主機名稱。若 hostname、/etc/hosts 與 DNS 設定不一致,可能會造成寄信失敗、郵件被退信,或被收件端判定為可疑郵件。

建議使用完整網域名稱作為郵件主機名稱,例如 mail.example.com。

4.1 查看目前 hostname

hostname
hostname -f

4.2 設定 hostname

sudo hostnamectl set-hostname mail.example.com

請將 mail.example.com改成你自己的郵件主機名稱。如果只是內部測試,也可以先使用測試用網域,但正式對外寄信時建議使用有效網域。

4.3 修改 /etc/hosts

sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 mail.example.com mail

這裡的 mail.example.com 與 mail 需要依照你的實際主機名稱調整。設定完成後,可以重新檢查 hostname -f 是否能正確顯示完整網域名稱。

5. 啟動、停止與重啟 Sendmail 服務

Sendmail 安裝完成後,通常會自動建立 systemd 服務。管理者應該熟悉啟動、停止、重啟與查詢狀態的指令,這對日後排錯非常重要。

5.1 啟動 Sendmail

sudo systemctl start sendmail

5.2 停止 Sendmail

sudo systemctl stop sendmail

5.3 重啟 Sendmail

sudo systemctl restart sendmail

5.4 設定開機自動啟動

sudo systemctl enable sendmail

5.5 查詢服務狀態

sudo systemctl status sendmail

如果狀態顯示 active 或 running,代表 Sendmail 服務正在執行。如果顯示 failed,應該立即查看 journalctl 與 /var/log/mail.log 找出錯誤原因。

6. 基本 Sendmail 設定

Sendmail 的主要設定檔通常位於 /etc/mail。Ubuntu 系統中,常見設定檔包含 sendmail.mc、sendmail.cf、local-host-names、access 等。一般不建議直接手動修改 sendmail.cf,而是修改 sendmail.mc 後重新產生設定檔。

如果只是建立基本寄信功能,通常完成 hostname、/etc/hosts 與服務啟動後,就可以先進行寄信測試。若要建立正式郵件伺服器,則需要進一步設定網域、relay、DNS 與安全政策。

6.1 重新產生 Sendmail 設定

sudo make -C /etc/mail
sudo systemctl restart sendmail

7. 使用 mail 指令測試寄信

安裝 mailutils 後,可以使用 mail 指令快速測試 Sendmail 是否能正常寄出郵件。這是最簡單的本機寄信測試方式。

echo "This is a Sendmail test from Ubuntu 22.04" | mail -s "Sendmail Test" user@example.com

請將 user@example.com 改成你的實際收件信箱。如果收不到信,請先檢查垃圾信匣,再查看 /var/log/mail.log。很多寄信失敗不是 Sendmail 沒有執行,而是 DNS、PTR、SPF 或雲端主機封鎖 port 25 所造成。

7.1 查看郵件佇列

mailq

8. 使用 telnet 測試 SMTP 連線

除了使用 mail 指令寄信,也可以透過 telnet 測試 SMTP port 25 是否有正常回應。這可以幫助確認 Sendmail 是否有監聽 SMTP 連線。

sudo apt install telnet -y
telnet localhost 25

如果看到類似 220 mail.example.com ESMTP Sendmail 的訊息,代表本機 SMTP 服務有正常回應。如果連不上,請檢查 Sendmail 是否啟動,以及是否有防火牆或設定檔限制。

9. 防火牆 UFW 基本設定

在 Ubuntu 22.04上,常見的防火牆管理工具是 UFW。若這台伺服器同時提供 SSH 管理、HTTP 網站、HTTPS 網站與 SMTP 郵件服務,就需要正確開放對應連線。

設定防火牆時請特別小心 SSH。若遠端管理伺服器時忘記允許 SSH,可能會把自己鎖在伺服器外面。

9.1 允許 SSH

sudo ufw allow OpenSSH
# 如果 SSH 使用自訂 port,例如 1689:
sudo ufw allow 1689/tcp

9.2 允許 HTTP 與 HTTPS

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

9.3 允許 SMTP

sudo ufw allow 25/tcp

SMTP port 25 是郵件伺服器之間傳送郵件常用的連接埠。不過許多雲端主機商會預設封鎖 port 25,以防止垃圾郵件濫發。如果防火牆已開放但仍無法寄信,請確認主機商是否封鎖對外 SMTP。

9.4 啟用與查詢 UFW

sudo ufw enable
sudo ufw status verbose
sudo ufw status numbered

10. DNS 設定:A、MX、PTR、SPF、DKIM、DMARC

如果 Sendmail 只是用於本機測試,DNS 可以先簡化處理。但如果要正式對外寄信,DNS 設定非常重要。缺少 SPF、DKIM、DMARC 或 PTR 反解時,郵件很容易被 Gmail、Outlook 或企業信箱判定為垃圾信。

郵件伺服器不是只有安裝服務就好。真正的可用性通常取決於 DNS、IP 信譽、反解、寄信內容與安全政策。

  • A 記錄:讓 mail.example.com 指向伺服器 IP
  • MX 記錄:指定 example.com 的郵件伺服器為 mail.example.com
  • PTR 記錄:讓伺服器 IP 反解回 mail.example.com
  • SPF 記錄:宣告哪些主機可以代表網域寄信
  • DKIM 記錄:使用金鑰替郵件簽章,提升可信度
  • DMARC 記錄:定義 SPF 與 DKIM 驗證失敗時的處理政策

10.1 SPF 與 DMARC 範例

example.com. TXT "v=spf1 mx ip4:203.0.113.10 -all"
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com"

11. 查看 Sendmail Log

Sendmail 發生問題時,不要只看服務狀態。真正的錯誤原因通常會出現在 /var/log/mail.log 或 systemd journal 中。

sudo tail -f /var/log/mail.log
sudo journalctl -u sendmail -n 100 --no-pager

12. 常見故障排除

12.1 Sendmail 服務無法啟動

sudo systemctl status sendmail
sudo journalctl -u sendmail -n 100 --no-pager

如果 Sendmail 無法啟動,通常需要檢查設定檔語法、hostname 是否正常、/etc/hosts 是否設定正確,以及是否有其他郵件服務已經佔用 port 25。

12.2 port 25 沒有監聽

sudo ss -tulnp | grep :25

如果沒有看到 Sendmail 或其他 MTA 監聽 25 port,代表 SMTP 服務沒有正常啟動。請重新啟動 Sendmail,並查看服務錯誤訊息。

12.3 郵件寄不出去

  • 檢查 /var/log/mail.log 是否有錯誤訊息
  • 檢查 mailq 是否有郵件卡在佇列
  • 確認 DNS MX 與 A 記錄是否正確
  • 確認伺服器是否可以對外連線 port 25
  • 確認主機商是否封鎖 SMTP port 25
  • 確認收件方是否拒收未通過 SPF、DKIM、DMARC 的郵件
  • 確認寄件網域與 hostname 是否一致

12.4 郵件進入垃圾信

郵件進入垃圾信通常不是單一原因造成。常見原因包含沒有 SPF、沒有 DKIM、沒有 DMARC、IP 沒有 PTR 反解、寄件內容像垃圾信、伺服器 IP 信譽不好,或短時間大量寄信。

正式寄信前,建議先完成 DNS 安全設定,並控制寄信頻率。不要把新架設的 Sendmail 直接拿來大量寄信,否則很容易被列入黑名單。

13. 避免 Open Relay

Open Relay 是郵件伺服器的大忌。若 Sendmail 被設定成任何人都可以透過它轉寄郵件,很快就會被垃圾郵件濫用,導致伺服器 IP 被列入黑名單。

安全的做法是只允許本機、可信任內部網段或經過認證的使用者寄信。不要為了方便測試就開放所有來源 relay。

  • 避免伺服器被垃圾郵件濫用
  • 避免 IP 被列入 RBL 黑名單
  • 避免公司網域信譽下降
  • 避免正常郵件被 Gmail 或 Outlook 拒收
  • 避免造成資安事件與法律風險

14. 進階設定方向

完成基本 Sendmail 安裝與測試後,可以再往安全性、可維護性與郵件可信度方向加強。這些進階設定會直接影響郵件能否穩定送達收件者信箱。

  • 設定 SPF,宣告合法寄信來源
  • 設定 DKIM,替郵件加入數位簽章
  • 設定 DMARC,定義驗證失敗處理政策
  • 設定 PTR 反解,讓 IP 反查主機名稱一致
  • 整合 Fail2ban,防止 SMTP 暴力嘗試
  • 限制寄信頻率,避免被判定為垃圾信
  • 監控 mailq,避免郵件大量堆積
  • 定期檢查 /var/log/mail.log
  • 建立郵件服務備份與還原流程

15. Sendmail 與 Postfix 差異

Sendmail 是歷史悠久的郵件伺服器,功能完整但設定相對複雜。Postfix 則是現代 Linux 系統中更常見的 MTA,設定語法通常比較直覺,也較容易維護。

如果你的目標是學習傳統 Linux 郵件系統,Sendmail 很值得研究。如果你的目標是快速建立容易維護的正式郵件服務,Postfix 通常會是更常見的選擇。

16. Ubuntu 22.04 Sendmail Q&A

16.1 Ubuntu 22.04 可以安裝 Sendmail 嗎?

可以。Ubuntu 22.04 可以透過 apt 安裝 sendmail、sendmail-cf 與 mailutils,完成基本郵件傳送功能。

16.2 Sendmail 安裝後可以直接寄信嗎?

本機測試通常可以直接使用 mail 指令寄信,但正式對外寄信還需要正確設定 hostname、DNS、SPF、DKIM、DMARC、PTR 與防火牆。

16.3 為什麼 Sendmail 寄出的信會進垃圾信?

常見原因包含沒有 SPF、DKIM、DMARC,沒有 PTR 反解,寄件主機名稱與網域不一致,IP 信譽不好,或郵件內容被判定為垃圾信。

16.4 為什麼 port 25 開了還是寄不出去?

許多雲端主機商會封鎖對外 SMTP port 25。即使 UFW 已經允許 25/tcp,也可能因為主機商政策而無法連線到外部郵件伺服器。

16.5 Sendmail 和 Postfix 哪一個比較適合?

Sendmail 適合學習傳統郵件系統與特定環境需求。Postfix 通常較容易設定與維護,因此現代 Linux 郵件伺服器更常使用 Postfix。

16.6 Sendmail 可以搭配網站 PHP 寄信嗎?

可以。PHP 的 mail() 函式可以透過本機 MTA 寄信。不過正式網站建議搭配 SMTP 驗證、寄信紀錄與錯誤處理,避免寄信失敗時無法追蹤原因。

17. 指令總整理

sudo apt update
sudo apt install sendmail sendmail-cf mailutils -y
sudo hostnamectl set-hostname mail.example.com
sudo systemctl enable sendmail
sudo systemctl start sendmail
sudo systemctl status sendmail
echo "This is a Sendmail test from Ubuntu 22.04" | mail -s "Sendmail Test" user@example.com
mailq
sudo tail -f /var/log/mail.log
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 25/tcp
sudo ufw enable
sudo ufw status verbose

18. 進階學習方向

如果你已經完成 Ubuntu 22.04 Sendmail 的基本安裝與測試,下一步不應該只是讓系統能寄信,而是要讓郵件服務更安全、更穩定、更容易被收件端信任。

建議將 Sendmail 學習延伸到 DNS 郵件驗證、伺服器安全防護、Log 分析與自動化監控。這樣才能從單純安裝教學,進一步提升到實際可維運的郵件伺服器架構。

19. 結論

Ubuntu 22.04 安裝 Sendmail 並不困難,基本流程包含更新套件、安裝 sendmail 與 mailutils、設定 hostname、啟動服務、測試寄信與查看 mail.log。真正需要注意的是防火牆、DNS、SPF、DKIM、DMARC、PTR 反解與 Open Relay 風險。

如果只是內部系統通知,Sendmail 可以快速滿足基本寄信需求。如果要正式對外提供郵件服務,則必須補上完整的郵件安全設定與維運監控,否則很容易遇到退信、進垃圾信或 IP 被列入黑名單的問題。

建議先完成本篇的基本安裝與測試,再逐步延伸到 DNS 驗證、Fail2ban 防護、SMTP Relay、安全稽核與郵件服務監控,建立一套真正可維護的 Ubuntu 22.04 郵件伺服器環境。

相關資源與文章匯出
下載 Ubuntu Sendmail 設定範例 下載 DOCX PDF/列印

← 回文章列表