Docker MailServer自建邮件服务器
背景
此前笔者借助 Cloudflare 的 Email 转发功能,将收到的邮件转发至个人 Gmail 邮箱,但该服务仅支持收信转发,无法实现发信功能。
为彻底解决发信问题,笔者决定在个人服务器上架设 MailServer。
架设前,笔者查看了各类教学文章及官方文档,认为操作会顺利完成,实际过程中却遇到了诸多难题。
基础知识
常见邮件服务端口 & 协议 介绍
详细介绍信息, 查看此文档
| 协议 | 端口 |
|---|---|
| SMTP | 25/587/465 |
| IMAP | 143/993 |
| POP3 | 110/995 |
常见 邮件软件 和 安全软件 介绍
| 软件名称 | 简介 |
|---|---|
| sendmail | 用于发邮件。资格最老的邮局,所有Linux发行版基本都带。但是配置麻烦。 |
| postfix | Wietse Venema 觉得 sendmail 配置太麻烦了,就开发了一个 “简化配置版 sendmail”,即postfix。支持smtp协议。 |
| dovecot | 用于收邮件,支持imap/pop3。 |
| opendkim | 生成dkim签名。有什么用?详见下面的“反垃圾邮件技术”。 |
反垃圾邮件技术介绍
SPF(Sender Policy Framework)技术。SPF 用于验证发送邮件的服务器是否在域名的授权列表中。如果不在,则认为是垃圾邮件。通过在域名的 DNS 中添加 TXT 记录,可以指定哪些服务器可以发送该域名的邮件。
DKIM(DomainKeys Identified Mail)技术。DKIM 是一种数字签名技术,通过在邮件头中添加一个签名,可以验证邮件是否被篡改过。使用 DKIM 技术可以有效防止垃圾邮件和欺诈邮件。
DMARC(Domain-based Message Authentication, Reporting and Conformance)技术。DMARC 技术是 SPF 和 DKIM 的加强版,它通过在域名的 DNS 中添加 TXT 记录,指定如何处理验证失败的邮件,可以有效地降低垃圾邮件和欺诈邮件的数量。
https://www.checktls.com/TestReceiver
开始
通过1panel 面板安装 或者 手动安装
service 地址 https://github.com/docker-mailserver/docker-mailserver
DMS_GITHUB_URL = "https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master"
curl -LO " ${DMS_GITHUB_URL} /compose.yaml" && mv compose.yaml docker-compose.yaml
curl -LO " ${DMS_GITHUB_URL} /mailserver.env"正常来说我们需要修改的地方只有这几个OVERRIDE_HOSTNAME = mail.example.com
ENABLE_POP3 = 1 < - 这行预设好样找不到要自己加docker-compose.yaml 当中需要 端口和 ssl证书挂载 改掉
docker compose up -d
# 建立一个新的admin 使用者你可以有你自己的但admin 建议要有
docker exec -it mailserver setup email add admin@example.com "password"# 建立一个新的postmaster 使用者
# 这个postmaster 是用来接收系统的通知信件没有的话可能会喷错
docker exec -it mailserver setup alias add postmaster@example.com admin@example.com# 查看 邮件用户列表
docker exec -it mailserver setup email list# 生产DKIM ./docker-data/dms/bashig/opendkim/ 内即可以看到生成的底下会有mail.private 和mail.txt 两个档案mail.private 是私钥,mail.txt 是公钥 将mail.txt 的内容加入到DNS 的TXT 纪录即可
docker exec -it mailserver setup bashig dkim
配置dns
假如 你是要 二级域名 绑定 邮箱 例如 mail.xxx.com
| DNS 类型 | 记录名 | 记录值 | TTL |
|---|---|---|---|
| A | 23.105.194.216 | 30 分钟 | |
| MX | mail.xxx.com |10 (优先级 10) | 30 分钟 | |
| TXT | v=spf1 mx ~all | 30 分钟 | |
| TXT | _dmarc.mail | v=DMARC1; p=quarantine; rua=mailto:report@mail.qigu-info.com; ruf=mailto:report@mail.qigu-info.com; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine | 30 分钟 |
| TXT | mail._domainkey.mail | 上面 生产DKIM 命令产生的 | 30 分钟 |
SPF ,DKIM , DMARC 讲解
SPF 验证发信人身份的技术 TXT 配置 可配置成通用
v=spf1 mx ~all
DKIM 防止邮件被伪造的验证技术 就是上面DKIM 命令 生产mail.txt 部分 去除空格 变成一行 TXT 配置 name 为
mail._domainkey.mail, 值为v=DKIM1; k=rsa; p=xxxxxx
DMARC 主要是SPF 和DKIM 的补充 TXT 配置 name 为
_dmarc.mail, 值为v=DMARC1; p=quarantine; rua=mailto:report@mail.xxx.com; ruf=mailto:report@mail.xxx.com; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine记录 明确告知收件服务器如何处理未通过认证的邮件 将上面邮箱替换成你们的邮箱就行了,没有就 用上面命令生成一个 report邮箱专门接收 反馈
细节问题
- 测试工具
https://www.checktls.com/TestReceiver
https://mxtoolbox.com/SuperTool.aspx#
https://dmarcguide.globalcyberalliance.org
https://www.mail-tester.com/
- 云服务器需要开通相关端口, 以及若端口占用需要把占用程序关闭
- 国内云厂商 可能已经关闭 25端口 须有手动去申请解封
- 收信失败 记得需要改配置 nano /etc/postfix/main.cf 你用预设的$myhostname 的话他会和系统预设的vmail 虚拟邮件位置冲突 删除掉 $myhostname 部分即可
- 常看日志 会有 很明显的报错提示
- ssl 配置有多种可选 SSL_TYPE= 如果是自己有证书就 选 manual, 然后配置证书路径
