终于有的水了

背景

因项目需求,市面上的邮局服务都太贵了,所以就需要自己搭一个邮局。这次选择了 VestaCP,免费,还能对接 whmcs 开店虚拟主机玩。

所需物资

  • 域名
  • 独立 IP 服务器(切不封邮箱端口)

过程

创建 rDNS

搭建邮局,先要做好 rDNS. 这个一般 IDC 是不会让你自己弄的,你需要开一个工单给他们,让他们给你做 rDNS(当然,有的 IDC 可能不给做 rDNS. 买之前建议先发个工单问下). rDNS 记录值的内容,就是你要用来发邮箱的域名了(邮箱地址中 @ 后面的那一部分)。做好之后,使用 mtr 等工具可以看到。

rDNS


配置 VestaCP

安装

使用 SSH 连接至服务器,直接复制粘贴一把梭,走起(建议开个 screen 装,保险)。

curl -O http://vestacp.com/pub/vst-install.sh
bash vst-install.sh

它会让你输入 FQDN Hostname,写做了 rDNS 的那个。
等个 10 分钟左右就能好,都装完之后会告诉你后台管理员账号的密码,记得记下来。

配置 SSL

登录到 VestaCP 的后台( ip:8083 ), 先点右上角的 admin, 然后在 language 那里可以改语言,你也可以顺便把 admin 密码改了

Snipaste_2019-08-21_22-04-47.png

到 web 服务这里,点那个加号

Snipaste_2019-08-23_17-58-08.png

点开下面的高级选项,然后选上启用 SSL,和采用 lets encrypt。再输入你想作为管理 vestacp 用的域名(为了方便介绍,称其为 example.com),点击保存,应该会提示成功。在 web 服务板块下,点击你刚刚添加成功的那个域名的编辑选项。

Snipaste_2019-08-21_22-21-56.png

往下翻,你应该就能看到签发成功的 SSL 证书了。

Snipaste_2019-08-21_22-23-49.png

开一个新的页面,进入 VestaCP 上面的 服务器 选项中,然后对默认站点进行配置。

Snipaste_2019-08-21_22-26-52.png

把刚刚签发下来的 SSL 证书信息粘贴上去,保存。

Snipaste_2019-08-21_22-28-03.png

配置邮箱

然后到邮箱服务这里来,再点加号加一个新的邮箱域名。域名就填 rDNS 设置的那个。

Snipaste_2019-08-21_22-29-31.png

成功之后,点添加账号。自己用的话,其实高级账号可以不用管。如果你需要弄转发,则需要在高级选项中的 转发到 进行设置

Snipaste_2019-08-21_22-29-31.png


针对 VestaCP 的设置完成了。进入 webmail(https://example.com/webmail),就可以发信了。如果一切正常的话,outlook 会进垃圾邮件箱,gmail 会拒信。请继续进行下面的步骤,确保正常发信。


配置 SPF.

这一步其实很简单。进入你邮局域名的 DNS 管理(不是 VestaCP 那个),添加一个 TXT 记录,主机值的你设置的 rDNS 域名,内容为如下:

v=spf1 ip4:x.x.x.x ~all

记得将其中的 x.x.x.x 替换为你邮局服务器的 IP.


配置 DKIM

运行下面这个脚本。不过记得把 example.com 换成你做 rDNS 的那个域名

/usr/local/vesta/bin/v-list-mail-domain-dkim-dns admin example.com

得到的输出应该是长这样的

Snipaste_2019-08-21_22-43-23.png

你需要向域名添加两条 TXT 记录。第一条的主机名是 _domainkey,内容为 t=y; o=~;。第二条的主机名是 mail._domainkey,内容为 k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1VY7IfMq6Lqp3CzydTyoffAv76kvkQ3+bWKXrC7YZxIhC2owm5HQjA7qH4pt15oA1cwM97sHKpJ5zdxmcf6wODQARxEnNU2D1bL7J95iWRMdjlzE99V1ae6u2bsDS3LvXWEadfpEpD9XacYliFkslMs/+vtsxOVyaglc/WbVY6wIDAQAB。其中 p 的值,每个域名是不一样。p 后面的这一串,就是脚本输出的第二条 TXT 记录的 p 的值。只不过你在创建 mail._domainkey 记录的时候,还应在最前面加上 v=DKIM1;


配置 DMARC

创建一条 TXT 记录,主机名为 _dmarc,内容为 v=DMARC1;p=none;pct=100;rua=mailto:[email protected]. 记得把 rua= 后面的邮箱换成你自己邮局的一个邮箱。理论上来讲,各个邮箱会把滥用报告发送至那个邮箱。这里简单说下几个字段的含义。

p

这里的 p 代表的是 policy(政策)。这个字段定义了所有没有通过 DMARC 检查的邮件的政策,默认为 none. 合法的值除了 none 还有 quarantine(放行) 和 reject(拒信)。none 可以让你在不干扰收信者邮件流动的情况下,收集分析反馈。而 quarantine 则会放行,一般邮件会出现在垃圾箱里。而 reject 就是告知上游直接拒信了。作为一个刚刚搭建的邮局,p 应设为 none. 在收集到一定的反馈后,可以事情况改为 rejectquarantine

pct

这个字段告知收信者,你希望其将 p 定义的政策实施于百分之多少的未通过 DMARC 检查的邮件。需要 p 字段值为 rejectquarantine 才能工作。默认为 100


最终检查

https://dmarcguide.globalcyberalliance.org/#/

你可以去这里检查 SPF, DKIM 和 DMARC 的配置。一般情况下来讲,应该是可以通过的

Snipaste_2019-08-21_23-04-13.png


如果你做完了上述操作,再去发一封信试试吧。它应该还在垃圾邮件箱里,但是 Gmail 不会退信了。

除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。