Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

企業郵件系統部署腳本 + 維運標準作業流程(SOP)

Posted on 2025-11-212025-11-21 by Rico

【Mail Server 系列文:第 13 篇】

前面 1~12 篇已逐步建立完整郵件系統:

  • Postfix + Dovecot
  • MariaDB + PostfixAdmin
  • SpamAssassin(SQL Bayes + TxRep + Remote Learn)
  • Amavis + ClamAV + DKIM
  • Piler + Manticore CJK
  • Webmail(Roundcube)
  • Apache SSL (SNI) + Let’s Encrypt
  • HA / Monitoring / SOAR(第 12 篇)

第 13 篇的目標:
讓你擁有一份可以「從 0 建起整套郵件系統」、「交接給接手者」、「出狀況可快速排除」的完整 SOP。


🔶 1. 系統部署架構總表(完整服務清單)

以下是完整 mail stack 的容器節點:

服務角色埠口容器名稱
PostfixSMTP / submission25 / 587postfix
DovecotIMAP / LMTP / Sieve143 / 993 / 24 / 4190dovecot
MariaDBPostfixAdmin / SpamAssassin / Piler DB3306maildb
PostfixAdmindomain / mailbox 管理80/443 (proxied)postfixadmin
SpamAssassinspam 過濾 + Bayes SQL783spamassassin
ClamAV病毒掃描3310clamav
Amaviscontent filter + DKIM10024/10026amavis
Piler郵件歸檔系統25 (proxy inbox)piler
Manticore全文搜索 + CJK9306/9307manticore
Piler milter加入 X-Envelope-To33333pilermilter
Roundcubewebmail8000 (proxied)webmail
ApacheSSL / SNI / reverse proxy80/443wwwapp

🔶 2. 部署順序(最安全、最不會踩雷的順序)

建議部署順序如下(由底層 → 應用):


✔ Step 1:部署 MariaDB(maildb)

建立資料庫:postfix、sa40、piler
建立使用者後存成密碼檔。


✔ Step 2:部署 PostfixAdmin

建立 domain / mailbox
建立 postfix 用的 SQL maps
建立 dovecot 用的 SQL 檔案


✔ Step 3:部署 SpamAssassin

配置內容:

  • SQL Bayes
  • TxRep
  • sa-update + sa-compile
  • Remote Learn(SA-remote)
  • mysql schema 自動修正(entrypoint)

確保:

docker logs spamassassin
→ No ERROR

✔ Step 4:部署 ClamAV + Amavis

注意:

  • 建置 DKIM keys
  • dkim_key() 加入 amavisd.conf
  • spamd-local.cf 版本一致
  • clamav socket 連通

測試:

echo test | swaks --to [email protected] --server 127.0.0.1
docker logs amavis

✔ Step 5:部署 Piler + Manticore

關鍵設定:

  • extra_to_field = X-Envelope-To
  • CJK search = ngram_len=2, morphology=icu_chinese
  • Reverse proxy header 處理
  • manticore schema 初始化

✔ Step 6:部署 Dovecot(SQL / SNI / quota / IMAPSieve)

注意:

  • passdb / userdb
  • lmtp 至 24 port
  • imapsieve + remote learn
  • quota-warning.sh

測試收信:

openssl s_client -connect mail:993
doveadm auth user@domain

✔ Step 7:部署 Postfix(完整 SNI + Amavis Filter + Milter)

內容包括:

  • SASL → dovecot
  • Server SNI → lmdb
  • Milter → piler milter
  • Amavis inbound/outbound → 10024/10026
  • always_bcc → piler@archive.local
  • transport → archive.local smtp:[piler]:25

檢查:

postfix check

✔ Step 8:部署 Webmail(Roundcube)

務必測試:

  • TLS IMAP (993)
  • TLS SMTP (587)
  • managesieve (4190)

✔ Step 9:部署 Apache(SNI + Reverse Proxy)

Domain:

  • webmail.domain
  • archive.domain

Let’s Encrypt 自動 renew 後執行:

docker exec postfix postfix reload
docker exec dovecot dovecot reload

✔ Step 10:防火牆與路由設定

建議規則:

# mail subnet → gateway
iptables -I DOCKER-USER 1 -s 172.18.0.0/16 -d 172.18.0.1 -j ACCEPT

其他 inbound:

25, 587, 993, 80, 443 from WAN

🔶 3. 一鍵部署腳本:installer.sh(可直接使用)

這是一個可落地、可交接的部署腳本骨架:

#!/bin/bash
set -e

echo "[1] Create networks"
docker network create intranet-net || true

echo "[2] Deploy MariaDB"
cd maildb
./db.sh

echo "[3] Deploy PostfixAdmin"
cd ../postfixadmin
./postfixadmin.sh

echo "[4] Deploy SpamAssassin"
cd ../spamassassin
./spamd.sh

echo "[5] Deploy ClamAV + Amavis"
cd ../clamav
./clamav.sh

cd ../amavis
./amavis.sh

echo "[6] Deploy Piler + Manticore"
cd ../piler
docker compose up -d

echo "[7] Deploy Dovecot"
cd ../dovecot
./dovecot.sh

echo "[8] Deploy Postfix"
cd ../postfix
./postfix.sh

echo "[9] Deploy Webmail"
cd ../roundcube
./webmail.sh

echo "[10] Deploy Apache"
cd ../../wwwapp
./wwwapp.sh

echo "=== Mail System Deployment Completed ==="

可直接放 /opt/docker/mail/install/installer.sh


🔶 4. 維運 SOP(Standard Operating Procedures)

以下是企業級 SOP,可做為交接文件。


4.1 每日巡檢(Daily Routine)

檢查 spamassassin:

docker logs spamassassin | grep -i error

檢查 amavis:

docker logs amavis | grep -i 'panic'

檢查 postfix queue:

docker exec postfix mailq

檢查 dovecot:

docker logs dovecot

檢查 manticore:

mysql -h manticore -P 9306 -e "show tables"

4.2 每週維運(Weekly)

  • sa-update 是否成功
  • clamav freshclam signatures
  • piler store disk usage
  • SSL 憑證過期時間
  • postfix logs 異常寄件行為

4.3 每月維運(Monthly)

  • Docker images 更新
  • Config Git commit
  • MariaDB backup
  • piler archive backup
  • 制服全系統 TLS 檢查
  • HA 連線測試(若有部署 Keepalived / HAProxy)

4.4 災難復原(Disaster Recovery)

按優先順序:

  1. Postfix + Dovecot(使用者能收發)
  2. MariaDB(帳號 / 設定)
  3. SpamAssassin / Amavis(過濾)
  4. Piler(可後補,先讓 mail 正常運作)

🔶 5. 最常見三大問題與排除流程


問題 1:IMAP 無法登入

檢查:

docker logs dovecot | grep auth
doveadm auth user@domain

通常原因:

  • SQL 密碼錯誤
  • dovecot.conf 手誤
  • SSL 憑證 domain mismatch

問題 2:Postfix 無法寄出(Queue card stuck)

檢查:

mailq
postqueue -p
postfix flush

常見原因:

  • DNS resolve 不通
  • port 25 被防火牆阻擋
  • amavis 10026 無反應

問題 3:Webmail 無法連 IMAP/SMTP

原因通常是:

  • 網址錯(peer_name)
  • gateway INPUT / DOCKER-USER 被擋
  • SNI mismatch

🔶 6. 建議加入公司 IT 維運手冊的文件

我建議備存以下文件:

  • network topology 圖
  • mail 系統流程圖
  • 每個 container 的 version
  • 密碼 vault(使用 pass / vaultwarden)
  • SSL renew 流程
  • 新增 domain 流程(含 DKIM)
  • 新增使用者流程(PostfixAdmin)
  • piler search 教學

🔶 7. 結語:從第 1 到第 13 篇,你已完成企業級 Email Platform

到第 13 篇,你已經擁有一份:

✔ 可「一次部署」
✔ 可「交接給下一位維運人員」
✔ 遇到異常能快速排除
✔ 可長期維護(SOP 完整)
✔ 可擴展(支援 HA / 多區)

你的郵件系統不只是自架 mail server,
而是一個 完整的企業郵件平台(Enterprise Messaging Platform)。

Recent Posts

  • Postfix + Let’s Encrypt + BIND9 + DANE Fully Automated TLSA Update Guide
  • Postfix + Let’s Encrypt + BIND9 + DANE TLSA 指紋自動更新完整教學
  • Deploying DANE in Postfix
  • 如何在 Postfix 中部署 DANE
  • DANE: DNSSEC-Based TLS Protection

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2025 Nuface Blog | Powered by Superbs Personal Blog theme