【Mail Server 系列文:第 15 篇】
在前 14 篇中,我們完成了郵件平台的核心建置:
Postfix、Dovecot、SpamAssassin、ClamAV、Amavis、Roundcube、Piler、Manticore 全部成功以 Docker 模組化部署,並具備完整的企業級功能。
從本篇開始,我們進入更「工程化」的層級:
如何讓這套郵件系統在未來保持可維護、可擴充、可備援?
本篇目標是:
- 提供可落地的 高可用方案(HA)
- 針對平台各服務提出 備援選項與擴充方向
- 建議監控、備份與自動化策略
- 逐項列出若跨地部署、多 Domain、跨國團隊如何維運
- 分享實務上的 故障排除 SOP 與 災難恢復流程(DR)
這篇文章可以視為整套郵件系統的「運維藍圖」。
1. 全系統備援與擴充觀念總覽
郵件系統不像 Web 伺服器可以只靠 Load Balancer 就好。完整 Mail Flow 包含:
- SMTP 收信/送信
- IMAP/POP3
- Spam/Virus 檢查
- DKIM/DMARC/SPF
- 歸檔與全文檢索
- 網頁郵件與管理介面
每個服務都需要自己的 HA 策略。
在 Docker 化之後,我們可以用以下概念建立:
2. Postfix + Dovecot HA 方案
2.1 多機叢集基本模型
[VIP / Load Balancer / DNS Round Robin]
|
┌──────────────┴──────────────┐
| |
[Mail-Node 1] [Mail-Node 2]
Postfix Postfix
Dovecot Dovecot
Amavis Amavis
SpamAssassin SpamAssassin
ClamAV ClamAV
2.2 HA 核心策略
✔ 1. DNS MX 多筆紀錄
MX 10 mail1.it.demo.tw
MX 20 mail2.it.demo.tw
→ 若 mail1 故障,mail2 會接手。
✔ 2. mailbox 需要共用儲存
Dovecot 需要共享:
/var/vmail/
可採:
- NFS v4 + fsync
- CephFS
- GlusterFS
- TrueNAS NFS + 網路隔離
最建議:
單向 Master → Backup(以 Dovecot Replication)
Dovecot 有原生的 replication:
https://doc.dovecot.org/replication/
✔ 3. Postfix queue 不同步也沒關係
Postfix queue 不用同步。
因為:
- 多 MX 架構下,每封信重新排隊皆可
- sender 若連線失敗會自動重試另一台
✔ 4. Amavis / SA / ClamAV 可獨立運作
這些內容過濾服務皆為 stateless:
只要資料庫連線正確,兩台系統可以互相備援。
3. 資料庫(MariaDB)備援策略
MariaDB 儲存:
- PostfixAdmin:domain、mailbox、aliases
- SpamAssassin:Bayes、TxRep
- Piler:metadata
推薦三種 HA:
3.1 Galera Cluster(三節點最佳)
優點:
- 真正同步
- 任何節點可讀寫
- 適合郵件系統
架構:
[DB1] ─ [DB2] ─ [DB3]
3.2 主從複寫(Master → Slave)
簡單快速:
Master → Slave
Slave 可在主機掛掉時手動提升為 Master。
3.3 Backup-only(最簡單)
每日 dump:
postfix
sa40
piler
雖然不是 HA,但災難復原最容易。
4. Piler + Manticore 的備援
Piler 由兩部分組成:
- Mail Store(大量檔案,archive)
- MySQL(metadata)
- Manticore(索引)
4.1 Storage HA
可以用:
- ZFS replication(推到第二台)
- Rsync + incremental
- GlusterFS / CephFS(大公司)
4.2 Manticore HA
支援「同步叢集」:
Manticore 1 <── sync ──> Manticore 2
即使一台掛掉,搜尋仍可運作。
5. Roundcube、PostfixAdmin、Piler Web HA
這三者都是 web service → 完全可做 Load Balance。
使用:
- HAProxy
- Nginx
- Apache mod_proxy_balancer
- 或 Cloudflare Load Balancer
Session 儲存可以:
- 容器內 SQLite(可接受)
- 或 Memcached / Redis(較好)
6. 信件傳遞的跨國部署(多國據點)
假設你的企業有:
- 台灣總公司
- 新加坡
- 越南
- 馬來西亞
- 泰國
郵件系統可以:
方案 A:各地共用同一套郵件平台(最常見)
- MX 都指向台灣主機
- 儲存都集中
- 管理效率最高
- 等於中央郵件平台
方案 B:多國分散服務(大型企業)
- 每個國家有自己的 Postfix/Dovecot
- 使用 Piler 做集中歸檔
- DNS 指向當地 SMTP
方案 C:Hybrid
- 台灣為伺服器
- 東南亞有一台備援(Mail Relay)
- 網路不穩時,可就地收信暫存
7. 監控架構(必做)
郵件系統的監控非常重要。
建議用:
- Prometheus + Grafana
- 或 Zabbix
監控指標:
SMTP
- Postfix queue 長度
- Reject rate(被拒絕比率)
- Outbound deliver time
IMAP/POP3
- Dovecot process 數量
- 登录失敗(暴力破解指標)
SpamAssassin / ClamAV
- 病毒更新是否成功
- spam 命中率
Piler
- store 增長速度
- index 延遲
- 搜尋 fail ratio
8. 自動化維運(可節省大量時間)
8.1 自動 renew SSL(Let’s Encrypt)
透過 Apache 容器內 certbot。
8.2 自動更新 SpamAssassin
Amavis 內的 cron 已自動做:
sa-update && sa-compile && HUP amavisd
8.3 自動備份 maildb
排程 mysqldump:
postfix
piler
sa40
8.4 自動同步 Piler Store
以 rsync:
rsync -a /var/piler/store remote:/backup/piler/
9. 故障排除快速指南(SOP)
9.1 Dovecot 無法登入
- 查
/opt/docker/mail/dovecot/log/dovecot.log - 確認防火牆允許 143/993
- 確認 SQL 帳密無誤
- 檢查磁碟是否滿了
9.2 Postfix 無法收信
看 /var/log/postfix/postfix.log:
- 是否 DNS/MX 設錯
- 是否收到中斷封包(firewall)
- SQL domain / mailbox 是否存在
- Amavis 10024/10025 是否正常
9.3 Outbound 被 gmail / outlook 拒絕
檢查:
- DKIM
- SPF
- DMARC
- Reverse DNS (PTR)
- IP reputation(可查 spamhaus)
9.4 Piler 無法搜尋中文
- 確認 manticore
morphology='icu_chinese' - 表格為
ngram - 檢查 piler 是否正確發入 manticore
10. 災難恢復流程(DR)
假設你的主機完全故障。
只要你有以下資料:
/opt/docker/mail/* ← 所有 configs
/var/vmail ← 所有 mailbox
/var/piler/store ← 所有 archive
MySQL dumps ← postfix + sa40 + piler
你可以在任何一台 Linux 主機:
- 安裝 Docker + docker compose
- Restore
/opt/docker/mail/* - Restore
/var/vmail/var/piler/store - 匯入 MariaDB dumps
docker compose up -d
只要 DNS 還在,你的郵件系統就能完全復原。
結語:從 Mail Server → 到企業級 Mail Platform
你目前建立的系統已經達到:
- 企業級功能
- 高可用準備
- 可擴充架構
- 完整的安全與稽核
- 跨國使用能力
- 中文全文檢索的郵件歸檔
這不是「自架 Mail Server」而已。
這已經是一套完整的 企業郵件總管平台。