電子郵件系統的完整架構#
郵件系統由多個元件協力運作:
- MUA(Mail User Agent):使用者編寫與閱讀郵件的軟體(如 Thunderbird)
- MTA(Mail Transfer Agent):負責接收與轉遞信件的伺服器,使用 SMTP(port 25)。Postfix 就是一種 MTA
- MDA(Mail Delivery Agent):MTA 內建的機制,分析信件並決定投遞方向
- MRA(Mail Retrieval Agent):提供收信功能,使用 POP3(port 110)或 IMAP(port 143)
- Mailbox:儲存在伺服器上的使用者信箱(通常位於
/var/spool/mail/)
郵件傳送流程#
- MUA 透過 SMTP 將信件送到 MTA
- MTA 分析郵件標頭(From、To),判斷收件者是否為本機使用者
- 本地投遞:收件者在本機 → 直接存入 Mailbox
- 轉遞:收件者不在本機 → 查詢 DNS 的 MX 記錄,送至目標 MTA
- 信件暫存於佇列,MTA 持續嘗試投遞(預設 5 天),失敗則退回
DNS 與郵件的緊密關係#
郵件系統高度依賴 DNS:
- MX 記錄:指定接收該域名郵件的伺服器,系統優先選擇優先級最低的 MX 主機
- A 記錄:郵件伺服器的 IP 位址
- PTR 記錄(反解):現代郵件伺服器會驗證寄件來源 IP 的反解,非固定 IP 容易被標記為垃圾郵件
沒有正確的 DNS 設定(尤其是 MX 和 PTR 記錄),郵件伺服器幾乎無法正常運作。這是架設郵件伺服器的首要前提。
Relay 與信任機制#
什麼是 Relay#
允許使用者透過本機 MTA 將信件轉遞給第三方主機。
Open Relay 的危害#
允許任意來源利用本機轉遞 → 被垃圾郵件業者濫用 → 頻寬耗損、IP 被列入黑名單、ISP 封鎖。
Open Relay 是郵件伺服器最嚴重的設定錯誤。一旦被濫用,你的伺服器 IP 可能永久被列入全球黑名單,之後發出的所有郵件都會被拒收。
信任來源管理#
- mynetworks:信任的區域網路 IP 段,可直接 Relay
- SMTP 認證(SASL):非區網使用者需輸入帳密才能使用 Relay
Postfix 的設計理念#
Postfix 由 Wietse Venema 開發,目標是改善 Sendmail 的缺陷:
- 安全性:模組化設計取代 Sendmail 的單體結構
- 易用性:設定檔(
main.cf)遠比 Sendmail 的sendmail.cf直觀 - 相容性:完全相容 Sendmail 的外部介面
- 效能:精簡的程式碼結構提升處理效率
核心設定參數#
| 參數 | 功能 |
|---|---|
| myhostname | 伺服器 FQDN,被其他設定引用 |
| mydestination | 本機接收的域名清單 |
| mynetworks | 信任的用戶端 IP/網段 |
| inet_interfaces | 監聽的網路介面(預設僅 localhost) |
| relay_domains | 可代轉的下游域名 |
| relayhost | 上層轉遞主機(適合浮動 IP 使用者) |
收信協定的選擇#
POP3#
用戶端下載信件後,伺服器副本預設刪除。適合單一終端使用。
IMAP#
信件保留在伺服器上,支援多資料夾分類與多終端同步。適合跨裝置使用。
兩者都有 SSL 加密版本(POP3s port 995、IMAPs port 993)。
防濫用機制#
Postgrey(灰名單)#
首次寄信時拒絕並要求重試。合法伺服器會重試,垃圾來源通常不會。
黑名單(RBL)#
查詢公開的 RBL 資料庫,拒絕已知問題伺服器的郵件。
內容過濾#
使用正規表示法分析郵件標頭與內容,針對特定關鍵字決定處理方式。
郵件別名與轉遞#
- /etc/aliases:系統級別別名,支援一對多群組轉遞
- ~/.forward:使用者個人轉遞設定
在現代雲端環境中,自架郵件伺服器的維護成本極高(反垃圾、黑名單管理、備援等)。若非特殊需求,使用專業郵件服務(如 Google Workspace、Microsoft 365)通常是更務實的選擇。理解原理仍然重要,但實務中需權衡投入產出。