引
今年年初搭建过邮件服务器。当时是 RackNerd 做的新年促销,我买了一台 2h3g 的服务器,照着教程搭建了一个 iRedMail 服务器,也用了一段时间。可是 rn 的 ip 质量和链路质量确实不行,性能和价格倒是可以。
现在服务器快到期了,我想给邮件服务器搬个家。一方面我希望 ip 不要在黑名单,另一方面我希望找一个轻量化的邮件服务器,不要像 iRedMail 一样一启动就吃 3g 多的内存。
准备工作
之前在 BWG 那边我买了一台 $46.6 一年服务器,可以换机房,我给换到了日本软银。但是实测的时候比较惊喜,电信去程居然是 CTG 的线路。(CTG 就是原来的 CN2),就选这台了。邮件服务器的话我找到了一款叫做 maddy 的软件。它实现了邮件的全功能,但是待机占用只有 10m 左右,极其轻巧。
上MXTOOLBOX查询了一下,发现 ip 在 BarracudaCentral 黑名单上在列。这个问题不大,搭好服务器之后再去解决。
域名就选择 mail.insmtr.cn 作为 mail 服务器域名。
ssl 证书我才用 acme.sh 申请,申请的证书文件默认保存在 /root/.acme.sh/*.insmtr.cn_ecc/
下。
我平时喜欢在服务器端使用 alpine ,而 maddy 是 systemd 管理的,所以最好的办法就是使用 docker 。
配置
启动 docker 容器相比直接在 alpine 上手动搭建 maddy 就简单了很多。
docker run \
-id \
--name maddy \
-e MADDY_HOSTNAME=mail.insmtr.cn \
-e MADDY_DOMAIN=insmtr.cn \
-v maddydata:/data \
-v /root/.acme.sh/*.insmtr.cn_ecc/fullchain.cer:/data/tls/fullchain.pem \
-v /root/.acme.sh/*.insmtr.cn_ecc/*.insmtr.cn.key:/data/tls/privkey.pem \
-p 25:25 \
-p 143:143 \
-p 465:465 \
-p 587:587 \
-p 993:993 \
--restart always \
foxcpp/maddy:latest
其中,MADDY_HOSTNAME
的值替换为你的 mx 邮件服务器的域名,MADDY_DOMAIN
的值替换为你自己的域名。容器内证书默认要求存放在 /data/tls
下,如想要自行修改,可以直接修改存储卷里面配置文件,按照我这个配置,应该是 /var/lib/docker/volumes/maddydata/_data/maddy.conf
。
接下来就是一系列的解析记录的添加了。
我使用 Cloudflare 作为域名托管平台,其它平台的配置方法类似。
下面是我的配置,请将相关域名替换成你的域名。
进入 DNS 配置界面之后,我们需要添加多条记录,点击右侧的「添加记录」来添加。
「类型」选 MX
,「名称」填 @
,「邮件服务器」填 mail.insmtr.cn
。
「类型」选 A
,「名称」填 mail
,「IPv4 地址」填你的邮件服务器的 ip 。
「类型」选 A
,「名称」填 mta-sts
,「IPv4 地址」填你的邮件服务器的 ip 。
「类型」选 TXT
,「名称」填 @
,「内容」填 v=spf1 mx ~all
。
「类型」选 TXT
,「名称」填 _dmarc
,「内容」填 v=DMARC1; p=quarantine; ruf=mailto:insmtr@insmtr.cn
。里面的邮箱填的是当邮件发送失败的时候,失败报告该发到哪个邮件。
「类型」选 TXT
,「名称」填 mta-sts
,「内容」填 v=STSv1; id=1
。
「类型」选 TXT
,「名称」填 _smtp._tls
,「内容」填 v=TLSRPTv1;rua=mailto:insmtr@insmtr.cn
。
然后进入到存储卷里面找到 dkim_keys/insmtr.cn_default.dns
这个文件,我这里的绝对目录是 /var/lib/docker/volumes/maddydata/_data/dkim_keys/insmtr.cn_default.dns
,将其中的内容复制出来。
「类型」选 TXT
,「名称」填 default._domainkey
,「内容」填刚才复制的内容。
最后大概配置如下:
然后在这台服务器上安装 nginx ,或者其它你用着顺手的 web 服务器软件。
apk add nginx
然后在 /etc/nginx/http.d
中增加一个配置文件,比如名字叫做 mta-sts.conf
,在里面写入:
server {
server_name mta-sts.insmtr.cn;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_certificate /root/.acme.sh/*.insmtr.cn_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/*.insmtr.cn_ecc/*.insmtr.cn.key;
location = /.well-known/mta-sts.txt {
default_type text/plain;
return 200 "version: STSv1\r\nmode: enforce\r\nmx: mail.insmtr.cn\r\nmax_age: 86400\r\n";
}
}
最后解决一下黑名单问题。
这个 ip 被列入了一个叫 BarracudaCentral 的黑名单,但这个黑名单解除起来也很方便,毕竟这是 BWG 的机器,价格的门槛保证了 ip 不会被滥用。
打开 http://www.barracudacentral.org/lookups 输入 ip 和验证码查询,然后点击「click here」申请恢复。填上邮箱、手机号以及申诉理由即可申诉。这里邮箱建议填 outlook 邮箱。大约一个小时后,再查询发现已经从黑名单移除了。
最后改一下服务器的 rDNS / PTR 记录。我这边是直接在 BWG 后台修改 PTR 记录为 mail.insmtr.cn
创建用户
进入 maddy 的 docker 容器中的终端:
docker exec -it maddy ash
创建 insmtr@insmtr.cn
账号:
maddy creds create insmtr@insmtr.cn
maddy imap-acct create insmtr@insmtr.cn
用其它邮箱向 insmtr@insmtr.cn
发信,查询收信情况:
maddy imap-msgs list insmtr@insmtr.cn INBOX
可以看到正常收信。
至于前端界面嘛,直接使用第三方工具就可以,比如我用的 Thunderbird ,直接密码登录即可。
结语
本文写的比较简陋,更适合有基础的同学速成使用。自己折腾这些东西的过程当中也能收获不少乐趣,学到不少知识。