前言
之前我写了一篇文章介绍如何下载安装和设置 Mox 邮件服务器,而我的动机则在此
完成了之前的步骤后,现在我们在小鸡上搭建的服务器还只是初步阶段,能运行,也其实能发邮件了,但目前还远远说不上“完美”
我知道很多人会说: 搭个邮件服务器这么麻烦不如XX面板或者XX平台。确实,这是一条比较麻烦的路子
但是最初我就说过,我的想法和教程,是让小白也能跟着一步步搭出最完美的邮件服务器
这个服务器是要在除了IP本身质量的影响之外,本身没有任何的技术上瑕疵的
碎碎念
用工商营业执照成功把 CrunchBits 服务器的25端口解封了,可喜可贺~ 

虽然看起来 IPv6 还是封住的就是了
正式开始
1.开启管理员后台确认状态
在之前的步骤中我们把邮件服务器开起来了,第一步当然是去管理员后台确认各种配置的状态

嗯没错,还是那个梦回1997的界面 
最上方的错误是希望我们去设置开启自动检查更新,这其实目前不重要,但如果有需要的话请在配置文件 config/mox.conf 中,将 CheckUpdates: true 前面的注释符号去掉即可
接下来点击 Domain 中的 example.com (你的邮件服务器域名)

最上方的选项,第一个 Required DNS records 是查看全部所需 DNS 记录的入口,我们可以无视;第二个 Check current actual DNS records and domain configuration 才是重点,点开后可以查看我们现在的服务器和完美的差距~

DNSSEC
关联: DNS和域名供应商或者主机
如果这个没有标记完成有两种可能: 1. 你根本没在域名和DNS注册商完成 DNSSEC 的登记;2. 你的小鸡的系统不识别 DNSSEC 存在。
如果是前者,请回到第一篇文章看看,如果你的服务商不同请自行寻找解决方案;如果是后者,有三个办法:
- 无视它,反正 DNSSEC 实际能用了(但是后面的 DANE 设置会出现问题)
- 在 /etc/resolv.conf 最后加上
options trust-ad - 安装本地 DNS 解析工具 Unbound 并且进行设置
第一种就不用多说了,第二种是一个临时方案,重启便会失效。有兴趣的可以研究 resolv.conf 持久化,但我们此处不会对这个做研究。我们本次使用的是第三种方法(也是 Mox 推荐的方法: 安装 Unbound 解析 DNS)
安装 Unbound
sudo apt install unbound resolvconf dnsutils
这会安装 Unbound DNS 解析器和相应的一些依赖,然后我们可以输入
dig ns.
你大概会看到以下类似结果
; <> DiG 9.18.24-1-Debian <> ns.
;; global options: cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 56894
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;ns. IN A;; AUTHORITY SECTION:
. 3445 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2024040700 1800 900 604800 86400;; Query time: 80 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sun Apr 07 15:40:06 CST 2024
;; MSG SIZE rcvd: 106
观察其中的 flags 区域,如果其中有 ad 存在,则表示配置是有效的
无需重启小鸡,现在回到 Mox 管理员后台刷新即可看到这一项变成已完成了
除此之外,还可以在终端输入以下内容,保证能够看到完整的 DNS 输出(非必要)
开启 EDE (扩展 DNS 错误输出)
sudo cat </etc/unbound/unbound.conf.d/ede.conf
server:
ede: yes
val-log-level: 2
EOF
IPRev
关联: 主机商
此处涉及的是主机商的反向DNS(rDNS 或者说 PTR 记录)。如果显示没有完成请看我的第一篇文章或者寻找你的主机商的设置方法(不能设置主机 IP 的反向 DNS 解析也是很常见的结果)
MX
关联: DNS 供应商
此处是最初就应该准备的,如果标记没有完成请看我的第一篇文章 
TLS
关联: 主机
如果你选择了使用 Mox Docker 镜像,或者你的域名申请太多 TLS 证书,或者你让 Mox 和反向代理共存,或者25端口没有开放,都可能造成本项存在问题。
如果你想让反向代理和 Mox 共存,80/443 端口总归是在其中一方手里,虽然很麻烦... 但我相信你能自己找到方法 
如果你是用的 Docker 镜像部署,Mox 无权部署任何 TLS 证书,请用你的反向代理解决~
如果你是因为之前申请太多证书,还想啥?直接躺平等着 
还有就是你小鸡根本没开通25端口这情况。嗯,要么工单要么就是本来就开着,如果工单也不能开那就寄了。不用继续了,没有25端口开放是不能当邮件服务器的 
DANE
关联: DNSSEC 或 DNS 供应商
就算你没完成这个,只完成了 DNSSEC 这个也是标记完成的。如果你有强迫症请展开此项的设置,将其中说明的 TLSA 记录加到 DNS 记录中。如果没有完成 DNSSEC 设置,则此项不能够继续设置
SPF
关联: DNS 供应商
这个也许被标记完成了,但是建议是展开对比一下,然后把其中推荐的 TXT 记录加到 DNS 记录中
DKIM
关联: DNS 供应商
这个请如实填写到 DNS 供应商的记录中。你可能看到此处 Mox 给了4个栏位:
2024a._domainkey
2024b._domainkey
2024c._domainkey
2024d._domainkey
其中比较长的请去掉 "" 符号,只取其中的值,否则无效。合法的设置应该是
v=DKIM1;h=sha256;p=MI114514BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvzz7b8PFo5yoAOOwsqvigHgK6VEcZXuupx55XpgSLnVbraG7n9Ihy1cmksQUi/Rdp4W114514WQCjNYbjX7fZsMjNa/Bpg4Je7wf2T1qp07fZFT114514UpJ08wa7DWTe4btb9NHbTv/N8Bxsk6TjZo1114514tftQ 2x/Z2d/114514wEpAEad0tBMBE7C5CPzT114514LsHAHzUQdZaQfghaPnpBqIVAfOJqFZSH07IjutQOs7wxnmcFCnHWE2qDtY7kXdjZo/AnEIH13nw2/clM736NTDAY54zOPcdWiP8114514v8M6bzxnAHD7GNAkm1145148FO7CicLxd wIDAQAB
这样的格式
DMARC
关联: DNS 供应商
按照提示值填入 DNS TXT 记录即可
HOST TLSRPT
关联: DNS 供应商
这里给的值在发文时的 0.0.10 版本依然是有误的。如果你的域名是 example.com,邮局在 mail.example.com,则应该设置为
_smtp._tls.mail TXT "v=TLSRPTv1; rua=mailto:[email protected]"
而且此处值的检测存在延时情况,如果设置完成后迟迟没有看到标记完成,请放置一天后再来看
Domain TLSRPT
关联: DNS 供应商
这里给的值在发文时的 0.0.10 版本依然是有误的。如果你的域名是 example.com,邮局在 mail.example.com,则应该设置为
_smtp._tls TXT "v=TLSRPTv1; rua=mailto:[email protected]"
而且此处值的检测也存在延时情况,如果设置完成后迟迟没有看到标记完成,请放置一天后再来看
MTA-STS
关联: DNS 供应商和配置文件
这里话老长了,看的我都麻了。但实际上要做的很简单: 添加最底下给的 CNAME 和 TXT DNS 记录到你的供应商记录中,并且修改配置文件 config/domains.conf 中的 Domains 区域中 example.com 的 MTASTS 部分的 MaxAge 数值为 168h0m0s 即可
SRV conf
关联: DNS 供应商
按照给出的值填写 SRV DNS 记录即可,遇到域名设置是 . 的,真的填个点就好了 
Autoconf
关联: DNS 供应商
不太必要,按照给出的 CNAME 记录填写即可
Autodiscover
关联: DNS 供应商
同上没太必要,就是一个 SRV 和 TXT 记录,加上就好
2. 安装 Roundcube Docker 替代网页客户端(可选)
其实到上一步结束,恭喜你已经有一个完美等级的邮箱服务器了!但是,这个邮箱的某些功能目前看来依然不够完美~
注意: 如果你的小鸡 RAM 连 2GB 都没有,不建议安装执行以下步骤,请使用内置邮件网页客户端并且直接进入第三步
没错,那个网页管理员后台和用户后台平时用不上就算了,那个邮件收发客户端就显得非常毛坯房了。利用 Docker 和 Mox 本身的功能,我们可以搭建一个更好看的前端使用
安装 Docker-compose 和配置镜像
sudo apt install docker-compose
Roundcube 官方的 Docker 镜像在这里
如果你有兴趣可以去研究一下,如果没有则直接使用下面的简易配置文件。用 nano, vi 或 vim 将下文内容粘贴到某个目录(建议是当前用户的个人目录,创建一个 roundcubemail 文件夹并放进去)的 compose.yaml 即可。
version: '2'
services:
roundcubemail:
image: roundcube/roundcubemail:latest
container_name: roundcubemail
restart: unless-stopped
volumes:
- ./www:/var/www/html
- ./db/sqlite:/var/roundcube/db
ports:
- 9002:80
environment:
- ROUNDCUBEMAIL_DB_TYPE=sqlite
- ROUNDCUBEMAIL_SKIN=elastic
- ROUNDCUBEMAIL_DEFAULT_HOST=ssl://mail.example.com
- ROUNDCUBEMAIL_DEFAULT_PORT=993
- ROUNDCUBEMAIL_SMTP_SERVER=ssl://mail.example.com
- ROUNDCUBEMAIL_SMTP_PORT=465
其中 example.com 请改成你的自己的值。数据库储存的默认路径以上设置为你的小鸡执行指令的相对目录,你可以将上述的 ./www 和 ./db/sqlite 改成你想要的路径
接下来输入以下指令测试运行(如果要防止中断请使用 tmux 或 screen):
sudo docker-compose up
接下来... 嗯把它放一边...
调整 Mox 配置文件
在 Mox 的配置文件 config/domains.conf 中加入以下内容:
WebHandlers:
-
LogName: roundcube
Domain: mail.example.com
PathRegexp: ^/
WebForward:
StripPath: true
URL: http://127.0.0.1:9002/
ResponseHeaders:
X-Content-Type-Options: nosniff
其中 example.com 请改成你的自己的值。再次提醒,Mox 的配置文件是 sconf 格式,仅支持 Tab 缩进 不支持空格,随意更改会导致服务器无法启动!
然后接着来到 config/mox.conf,在所有 AccountHTTPS AccountHTTP 后加上 Path: /account/,使其成为以下状态
AccountHTTPS:
Enabled: true
Path: /account/
这里要说到一个 Bug,Mox 中管理员后台,用户后台和网页客户端优先级很高,因此在任何用 Mox 反向代理的网站后都会看到 /admin/ /webmail/ 被跳转到邮件服务器的服务上。此处设置 Path: /account/ 就是因为默认路径是 /,所以你设置任何路径都会显示404。
现在找到最初执行 sudo ./mox serve 的窗口,按 Ctrl C 终止服务器然后再次执行,以重启服务器
此时就可以登录 https://mail.example.com 看看全新的网页客户端了~

保存 Docker Compose 镜像
找到之前执行 Roundcube 的窗口,按 Ctrl C 结束运行。之后输入
sudo docker-compose start
这样 Docker 镜像就会每次开机自动运行了,到此 Roundcube 配置全部完成~ 如果你会修改 Docker 镜像,也可以自己打包,这样 Roundcube 的各处文字也就都能修改了。
有的人可能会疑惑,为什么不安装独立的 Roundcube?嗯,因为 Mox 没法转发 PHP-FPM...
3. 结束部署工作
到此其实都完成了,但是在小鸡上我们一般希望是把服务都设置为自动启动的,而 Mox 在最初就很贴心的生成了可以搭配 Systemd 运行的配置文件
首先确定功能正常后,我们可以减少输出的日志量。在 config/mox.conf 中设置 LogLevel 为 error 即可
接下来找到执行 sudo ./mox serve 的窗口,按 Ctrl C 停止运行
输入以下内容:
sudo chmod 644 mox.service
sudo systemctl enable $PWD/mox.service
sudo systemctl start mox.service
这样就完成了开机启动邮件服务器设置。输入
sudo systemctl status mox.service
如果看到
mox.service - mox mail server
Loaded: loaded (/etc/systemd/system/mox.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-04-07 17:37:50 CST; 15s ago
这样的文字,恭喜你,全部工作都完成了~
如果你发觉自己不知道账户的密码,可以到管理员后台重置,而重置管理员密码的步骤我写在前一篇文章的最后了
结语
之前的邮件检测结果

嗯,技术来说,这样就是一个完美的邮件服务器了,但是像是病毒扫描,收件审核的功能我们都还没部署,仍然有待完善。排除 IP 太脏导致被拒件的问题,这已经是努力到极致了 
那么本文就到这里,请尽情享受自建的邮局~
声明: 本文全部由本人编写,除参考链接无任何第三方参考内容,允许不经过授权在标明来源的情况下引用本文对应发表网址。本文首度发表于 NodeSeek,如有需求直接使用内文文字请向本人申请,否则本人保留追究版权责任的权利。文中提到的第三方产品之版权由各自版权方所有
白话文: 自动机器人退散~~ 

mark一下
有没有支持ptr的主机推荐一下
支持技术贴