介绍
Mox Mail 是一个开源的邮件服务器解决方案,用于收发电子邮件。支持 IMAP4、SMTP、SPF、DKIM、DMARC、MTA-STS、DANE 和 DNSSEC,基于信誉和基于内容的垃圾邮件过滤,国际化(EIA/IDNA),使用 ACME 和 Let’s Encrypt 自动 TLS,帐户自动配置,网页邮件。
其次就是,资源占用低,使得低配置VPS也能流畅运行。

部署条件
- Linux 服务器
- Docker 和 Docker Compose 已安装
- 能开放25端口(SMTP)、80端口(HTTP)、443端口(HTTPS)、143端口(IMAP)、465端口(SMTPS)、587端口(SMTP Submission)、993端口(IMAPS)。
- 可以在设置 rDNS(反向解析)的服务器,
- 域名(推荐使用独立域名)
在本文使用的是 Netcup 的 1o小鸡。
部署步骤
设置rDNS
rDNS(反向解析)是指通过IP地址查询对应的域名。设置rDNS有助于提高邮件的送达率,防止邮件被标记为垃圾邮件。
登录到你的VPS提供商的控制面板,找到DNS管理或类似的选项,设置rDNS记录,将你的服务器IP地址指向你的域名。例如,如果你的域名是 mail.example.com,那么你需要将rDNS记录设置为 mail.example.com。

开启域名DNSSEC
DNSSEC(Domain Name System Security Extensions)是一种用于保护DNS数据完整性和真实性的安全协议。开启DNSSEC可以防止DNS欺骗和缓存投毒等攻击,提高域名解析的安全性。
登录到你的域名注册商的控制面板,找到DNSSEC管理或类似的选项,启用DNSSEC功能。具体步骤可能因注册商而异,请参考注册商的帮助文档。
安装 Unbound (可选)
此步骤因为比较麻烦,暂时可不做。
目的是代替本机 systemd-resolved ,为了支持 DNSSEC、DANE。 安装教程
邮件服务器本机DNS不开DNSSEC,那么会用 SPF/DKIM/DMARC/MTA-STS/TLS-RPT。Mox 会退回到 MTA-STS 或 opportunistic TLS。
解析域名
在你的域名注册商的DNS管理面板中,添加以下DNS记录:
- A记录:将你的域名(如 mail.example.com)指向你的服务器IP地址。
关于其他DNS记录(如MX、SPF、DKIM等),稍后再设置。
设置主机名
在服务器上设置主机名为你的域名(如 mail.example.com):
| |
核实 /etc/hosts 文件中有正确的主机名映射:
| |
下载 Mox Mail Docker Compose 文件
创建一个目录来存放 Mox Mail 的 Docker Compose 文件:
| |
docker-compose.yml 内的 image 版本,建议设置固定的, 官方版本记录: https://r.xmox.nl/r/mox/
创建用户
在启动 mox 之前,运行快速入门程序以创建配置文件,以便以mox 用户身份运行。
| |
初始化配置文件
| |
ps:
you@yourdomain.example是初始域邮箱地址,例如admin@yourdomain.example。$(id -u mox)是获取用户 ID 的命令,用于指定以哪个用户身份运行。
运行时,mox 会进行本服务器的外网 IP 进行 rDNS 检查,然后在配置文件中将Hostname初始化为你的 rDNS域名。
运行后, 屏幕会输出一些初始化信息, 包括生成的密码等, 请妥善保存, 其中的
Admin password,you@yourdomain.example账户密码 需要记录下来初始化中信息中的解析信息(DKIM、spf等)暂时不用理会,如果有配置错的地方,会有输出提示,虽然后续可以手动修改配置文件,但建议一次性设置好后,再次初始化,方便后续添加解析记录。
运行后,mox 会在 config data web 目录中生成相应的配置文件。
启动 Mox Mail
| |
管理Mox Mail
在这里,我们使用SSH隧道来访问 Mox Mail 的 Web 界面。
| |
更简单的是使用Xshell的SSH隧道功能,设置本地端口8080映射到服务器的80端口。

然后在浏览器中访问 http://localhost:8080/admin,使用你在初始化时的Admin passwor登录。

查看域名:

后续的图片就懒得打码了,也不是什么隐私信息~
获取完整的域名DNS解析记录值
查看DNS设置:

将 Required DNS records 中的内容保存复制到本地txt文件.

批量在 Cloudflare 设置解析
如果是使用 Cloudflare 解析域名, 那么则可以直接上传 txt 文件,否则需要自行手动添加。


注意: 我看大佬说, Mox 为兼容部分垃圾 DNS 服务商,将 2 条 DKIM 长记录拆分为多段,Cloudflare 支持标准长记录。请务必手动将 DKIM 字段拼接为完整的记录,确保邮件签名校验正常。, 但我测试,我没拆分倒是也可以用,此处我借鉴大佬的经验, 直接写在此处备份:
如原DKIM
| |
那么则是删除双引号和换行, 拼接为一行:
| |
到此为止,就算搭建完成了,接下来就是测试收发邮件。
测试收发邮件
在浏览器中访问 http://localhost:8080/webmail,有一个比较简单的网页邮件客户端,可以用来测试收发邮件。
用户名可以用初始化时创建的邮箱地址,密码是初始化时生成的密码。
或者是在 admin 控制台 中创建新的邮箱账户,http://localhost:8084/admin/#accounts。

打开 https://www.mail-tester.com ,获取一个测试邮箱地址,然后从 Mox Mail 发送一封邮件到这个测试邮箱地址。
发送以后查看测试结果,看看是否有问题。如果有问题,可以根据提示进行调整。

尽量达到10分再进行发邮件, 但难的不是搭建服务,是邮箱域名怎么被大厂支持不拉黑,所以,自己搭建玩玩就好,或者当作自己的私人邮件服务器使用。别说后续还有反垃圾、反病毒等等。
https://internet.nl/test-mail/?invalid 也是一个不错的测试网站, 可以测试邮件服务器的各项指标。

一些查邮箱是否被拉黑的网站:
https://multirbl.valli.org/lookup/
注意
- 在本文档中默认生成的配置文件中,Mox Mail 会尝试使用
mail.example.com自动获取和续订 TLS 证书。 - https://internet.nl/test-mail/?invalid 检测可以看出,启用不完善,例如 没有开启IPv6、DANE,会导致不是全绿,我个人使用倒是觉得没什么影响。但是,如果你的服务器有IPv6,那么还需要配置 ipv6的 PTR / rDNS,发信主机名的 AAAA 记录、SPF。这是很重要的一点,如果有IPv6而没有配置,那么会导致优先使用IPv6进行发件,从而导致对方邮局 rtp、spf 校验失败从而进垃圾箱或者拒收!!!,所以,要么配置,要么禁用IPv6发件
- 如果要开启 DANE ,那么前提是你的域名注册商支持 DNSSEC, 并且你已经开启 DNSSEC。Linux自带的
systemd-resolved不支持本地 DNSSEC 解析, 可以安装使用unbound作为本地 DNS 解析器 安装教程, 并开启 DNSSEC 支持。 (同时需要在dns服务商添加 TLSA 记录,记录值在 mox admin面板的 DNS 设置中可以看到_25._tcp.mail.xxx开头的)
配置IPv6(如果有)
- 配置 IPv6 的 PTR / rDNS
在 云厂商 / VPS 面板 设置 IPv6 的 PTR / rDNS,指向你的邮件服务器域名(如 mail.example.com)。 - 添加 AAAA 记录
在你的域名注册商的 DNS 管理面板中,添加 AAAA 记录,将你的域名(如 mail.example.com)指向你的服务器 IPv6 地址。 - 更新 SPF 记录
在你的域名注册商的 DNS 管理面板中,更新 SPF 记录,添加你的 IPv6 地址。例如,如果你的 IPv6 地址是 2a00:0000:00:0001::/64,那么 SPF 记录应该类似于:
| |
Mox如何禁用 IPv6 发件
如果你的服务器有 IPv6 地址,但你不想配置 IPv6,可以通过以下方式禁用 IPv6 发件:
编辑 Mox Mail 的配置文件 config/mox.conf,添加以下行:
| |
domains.conf 文件中顶部新增 ipv4only 传输:
| |
总结
个人感觉Mox Mail 还是挺不错的, 一步到位直接生成 ssl\tls 证书、dns记录,后台管理面板虽然简单没有css样式装饰,但基本功能还是有。
其次是 MTA-STS policies、DMARC evaluations、TLS connection results、DNSBL、DMARC aggregate reports 这些功能。
参考文章
https://blog.dejavu.moe/posts/hosting-mox-mail-server-on-debian-13/
附录(基础知识)
系统 DNS 解析器无 DNSSEC 验证有什么影响?
不验证 DNSSEC(比如用的是公共 DNS 但没开启验证,或本地链路被劫持/不可信),或
不在“可信路径”(mox 的判断里,如果不是 loopback 例如 127.0.0.1,或者没有 trust-ad,会认为不够可信)。
影响什么:
出站投递:对方的 MX 记录你是“未受保护”地查到的(理论上有 DNS 投毒风险)。
DANE(TLSA)验证无法用:即使对方发布了 TLSA,你这边也无法基于 DNSSEC 去验证 TLS 公钥,只能退化到:
MTA-STS(如果对方部署了)
或“opportunistic TLS”(加密但不验证证书,容易被中间人降级/替换)
但注意:这不是“发不出去邮件”,只是“安全能力下降”。
没有启用 DNSSEC 签名有什么影响?
即使本机 DNS 解析器能验证 DNSSEC,但如果 你的域名 mail.example.com 的 zone 本身没做 DNSSEC 签名,那别人收你的邮件/给你发邮件时:
也无法验证你在 DNS 里发布的 MX/SPF/DKIM/DMARC/MTA-STS 是否“不可篡改”
你也没法让 mox 自动配置 DANE (TLSA)(因为 TLSA 依赖 DNSSEC)
因此 mox 在 TLSA 记录(_25._tcp.mail.example.com TLSA …)注释掉了,提醒:启用 DNSSEC 后再加回来。
影响什么:
投递率:基本没影响(主流大厂不因没 DNSSEC 拒收)。
安全性:少了 DANE 这条“强认证”的路,只能依赖 CA 证书 + MTA-STS 或机会性 TLS。
MX 记录
「别人怎么把邮件投递给你」
| |
- 告诉全世界: “给 @example.com 的邮件,请投递到 mail.example.com 这台服务器”
没有会怎样
- 别人给你发邮件 → 直接失败
A / AAAA 记录
| |
- 把邮件服务器主机名解析成 IP
- MX 指向的目标必须能解析到 IP
没有会怎样
- MX 存在但投递失败(找不到服务器)
SPF 记录
「这封信是不是你授权的服务器发的」
| |
做什么
告诉收件服务器:
“只有这些 IP / MX,才允许代表 example.com 发信”
没有会怎样
- SPF fail / neutral
- 很容易进垃圾箱
- DMARC 无法通过
能解决什么
- 防止别人伪造
@example.com发垃圾邮件 - 提高投递评分
DKIM 记录
| |
做什么
- 邮件发出时,mox 用私钥给邮件签名
- 收件方用 DNS 里的公钥验证签名
没有会怎样
- DMARC 只能靠 SPF(不稳定)
- 很多大厂(Gmail 等)评分降低
能解决什么
- 防篡改
- 明确“这是你域名真实发的邮件”
现代邮件系统核心组件
DMARC
| |
做什么
定义 最终裁决规则
告诉对方:
- SPF / DKIM 都不通过 → 直接拒收
- 并给我发报告
没有会怎样
- 别人可以“半伪造”你的域名
- 你也拿不到失败报告
能解决什么
- 真正阻止域名被滥用
- 控制你域名的“邮件声誉”
MTA-STS
| |
做什么
告诉对方:
“给我投递邮件时,必须用 TLS,并验证证书”
没有会怎样
- 回退到 opportunistic TLS(可被中间人降级)
能解决什么
- 防止 STARTTLS 降级攻击
- 提高传输安全性
TLSRPT
「TLS 出问题时告诉我」
| |
做什么
- 当 TLS / MTA-STS / DANE 验证失败时
- 对方给你发 机器可读报告
能解决什么
你能知道:
- 哪些服务器连不上你
- 是证书问题 / DNS 问题 / 配置问题
诊断工具
DANE(TLSA)
「不用 CA,直接用 DNS 认证证书」
| |
做什么
- 用 DNSSEC 保护的 DNS
- 告诉对方:你的 SMTP 证书公钥长这样
没有会怎样
- 只能依赖 CA + MTA-STS
关键前提
❗ 必须启用 DNSSEC
在初始化mox时,如果检测到本机dns不支持,Required DNS records页面会自动注释相关解析。(ps: 就算后面才安装Unbound,那么点击后台 Check current actual DNS records and domain configuration 功能时,如果校验本机dns开启了 DNSSEC ,那么这条记录也会自动取消注释,但依旧需要手动添加记录)
Autoconfig / Autodiscover / SRV
| |
做什么
- Thunderbird / Outlook 自动识别服务器
- 用户只填邮箱地址和密码
没有会怎样
- 只能手动填服务器地址/端口
体验优化,不影响投递
“禁用明文端口”的 SRV
| |
做什么
明确告诉客户端:
“别用不加密端口”
安全姿态声明
CAA
「谁可以给我签 TLS 证书」
| |
做什么
- 限制只有 Let’s Encrypt 能给你发证书
能解决什么
- 防止 CA 被滥用签发证书