不知不觉中已经划水摸鱼过去一年了,菜鸡依旧是那个毫无长进的菜鸡……确切地说是比原来更菜了,本学期的绩点创下了历史新低,仿佛已经看到了下个学期堕落成为玉泉废宅的自己。值得庆幸的是废宅今天终于配置好了自己的邮件服务器,新的邮箱是wu@x-nagi.com,欢迎来发邮件骚扰。

邮件服务器

基本配置

找到的比较靠谱的教程是DigitalOcean的这一篇。所有的virtual user的账户信息存储在virtual_users数据库里,这样所有的收发邮件都由一个vmail用户完成,和实际登陆的的linux用户名之类的都没有关系。可以在virtual_aliases数据库里设置别名,发送到source那一列的邮件就直接被放到了destination一列的邮箱里。

添加用户的时候直接向数据库里插入即可(id设成NULL自动增长):

1
2
INSERT INTO `servermail`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES
(NULL, '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com');

照着这篇教程来整的话应该不会出啥问题(Step 5的SpamAssassin没有试),值得注意的是有的主机提供商可能默认block了25端口,导致发送邮件时谜之失败,这时可以选择换一家提供商或者给提供商发工单请求解封

搞好之后就可以试着用Thunderbird之类的邮件客户端试着连接一下,连接不上可以先执行netstat -tulpn看看端口有没有打开:

登陆成功后可以试着给别的邮箱发几封邮件试试,基本都可以收到。

Advanced

上面发出的邮件大部分都被其他邮件服务识别成了垃圾邮件,这是因为域名还缺少一些配置,导致从该域名发出的邮件可信度不高,可以通过SPF等提高信誉。

PTR记录

给自己的邮件服务器的IP地址设置PTR记录(reverse DNS),指向邮件的域名,用来证明发出邮件的服务器确实是属于该域名的,注意PTR记录是与IP对应的,所以这个要在主机商处设置,下面的SPF等都是在域名商处设置。

SPF & DMARC

网上有很详细的SPF语法解释,只需要在自己的域名下添加一个TXT记录即可,例如我添加了"v=spf1 a mx -all",即只有IP存在于自己的域名的A或者MX记录中时才放行该邮件。

DMARC也是一个TXT记录,添加在_dmarc子域下,执行dig -t TXT _dmarc.x-nagi.com,可以看到"v=DMARC1; p=quarantine; rua=mailto:admin@x-nagi.com"。DMARC里面的rua字段填写一个“如果别人发现冒充的邮件时应该通知的管理员的邮箱”,设置了一天之后居然真的收到了一个定期的report……

DKIM

这个略微复杂,DKIM是在发送邮件时对该邮件进行一次签名,接收方利用DNS的TXT记录中存储的公钥验证签名。Postfix可以通过OpenDKIM来添加签名,参考又一篇DigitalOcean的教程

这些都整完了之后再发邮件就基本不会被分类成垃圾邮件了,可以在www.mail-tester.com测试一下(DNS记录要一段时间才能扩散出去)。

Encryption

前面Thunderbird使用了993、587等加密端口和协议,说明本地和自己的服务器交互是加密的,但是试着给gmail发两封邮件,可以看到一个红色的锁,表示邮件在传送过程中并没有加密,所以需要给Postfix启动STARTTLS(Postfix运行smtp,负责和其他的MTA交互,发出/接收邮件,Dovecot运行imap,将邮件从服务器上取到本地)。

我的邮件域名就是根域名,而我在设置https的时候已经申请了一个SSL证书,所以直接拿过来用就行了,然而比较奇怪的是前面的配置过程中明明已经指定证书和密钥了,但是依旧没有加密,后来查了一下发现是没有启用加密……在Postfix的main.cf里面再加上这4行:

1
2
3
4
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1

再来试着骚扰一下gmail,邮件详情里面可以看到一个灰色的锁,表示传输过程中使用了TLS。

GPG

劳苦人民终于也开始使用GPG了,目前还是入门阶段,正在研究怎么使用,我的公钥:nistp256/0x7DCED4FB 2019-07-26 Nagi Wu <wu@x-nagi.com>,指纹:8057 37D8 C919 EFD7 98FC 14DD E9A2 A095 7DCE D4FB,完整的公钥参见GPG Key,来交♂流啊。用--clearsign签名的纯文本:

1
2
3
4
5
6
7
8
9
10
11
12
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

I am Nagi.

-----BEGIN PGP SIGNATURE-----

iHUEARMIAB0WIQSAVzfYyRnv15j8FN3poqCVfc7U+wUCXTvnDQAKCRDpoqCVfc7U
++CnAQDtd1PzfHGzXNU8m/rWevW+Yk67q3uFWO3/yxodHpVDkAEAmGZ21BtEXF6t
KTkkckJdo2YR9gCYUlKlavY/YBPm/wY=
=/afJ
-----END PGP SIGNATURE-----

发现Protonmail是一个不错的邮件服务,有了自己的GPG密钥之后就能和Protonmail邮箱互相发送加密和签名的邮件了(才不是因为废宅因为买不起S/MIME证书)。