不占用 80/443 端口 | 90 天自动续期 | 国内网络友好

一、场景与目标

个人 / 小型团队 拥有自己的域名邮箱
不暴露 80/443 也能拿到 Let’s Encrypt 证书
Docker 化 部署,一键迁移、备份
DKIM、SPF、DMARC 全套反垃圾配置

二、前置清单

项目 示例值 备注
域名 mail.owin.work A 记录指向服务器公网 IP
DNS 腾讯云 / 阿里云 必须支持 API(用于 DNS-01)
系统 Debian 12 / Ubuntu 22.04 root 权限
开放端口 25/143/465/587/993/995/110/4190 防火墙放行
目录规划(可任意路径)

/root/mail/
├── config/ # 映射到容器 /tmp/docker-mailserver
├── maildata/ # 邮箱数据
└── maillogs/ # 日志

证书申请(国内网络零障碍)

思路: 使用 DNS-01 验证,不占用 80/443 端口

  1. 安装 acme.sh(离线下载示例)
# 1. 上传离线包 acme.sh.tgz
tar xzf acme.sh.tgz
cd acme.sh
./acme.sh --install --home ~/.acme.sh --config-home ~/.acme.sh/data
source ~/.bashrc
  1. 配置腾讯云 DNS API
export Tencent_SecretId="AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  1. 申请 & 自动续期证书
# 申请
acme.sh --issue --dns dns_tencent -d mail.owin.work --ecc --force
# 配置自动部署
acme.sh --install-cert \
  -d mail.owin.work --ecc \
  --fullchain-file /root/mail/config/ssl/cert.pem \
  --key-file       /root/mail/config/ssl/key.pem \
  --reloadcmd      "docker restart mailserver"

后续 90 天到期前 30 天自动续期 + 重启容器,零人工干预。

四、启动邮件容器(最终命令)

docker stop mailserver 2>/dev/null && docker rm mailserver 2>/dev/null
docker run -d \
  --name mailserver \
  --hostname mail.owin.work \
  --restart=always \
  -e TZ=Asia/Shanghai \
  -e SSL_TYPE=manual \
  -e SSL_CERT_PATH=/tmp/docker-mailserver/ssl/cert.pem \
  -e SSL_KEY_PATH=/tmp/docker-mailserver/ssl/key.pem \
  -e ENABLE_CLAMAV=0 \
  -e ENABLE_FAIL2BAN=0 \
  -p 25:25 -p 143:143 -p 465:465 -p 587:587 \
  -p 993:993 -p 995:995 -p 110:110 -p 4190:4190 \
  -v /root/mail/config:/tmp/docker-mailserver \
  -v /root/mail/maildata:/var/mail \
  -v /root/mail/maillogs:/var/log/mail \
  mailserver/docker-mailserver:latest

五、DKIM 反垃圾配置

# 生成 DKIM
docker exec mailserver setup config dkim domain mail.owin.work
# 复制 TXT 值
docker exec mailserver cat /tmp/docker-mailserver/opendkim/keys/mail.owin.work/mail.txt

在 DNS 增加 TXT 记录

主机记录 类型
mail._domainkey TXT v=DKIM1; k=rsa; p=MIIB...

重启容器生效:

docker restart mailserver

六、验证

工具 命令
服务器端 docker exec mailserver openssl x509 -in /tmp/docker-mailserver/ssl/cert.pem -noout -issuer -dates
外网 openssl s_client -connect mail.owin.work:465 -servername mail.owin.work
垃圾邮件评分 https://mail-tester.com

七、日常运维

任务 命令
新增邮箱 docker exec mailserver setup email add user@owin.work
查看日志 docker logs mailserver
重启服务 docker restart mailserver
证书续期 acme.sh 全自动(无需人工)