通过上一篇文章,我们的电子邮件服务器已经基本成型了,安全传输、转发策略控制都已经设置妥当,但如果此时我们进行测试,大概率发出去的邮件还是会被各大邮箱服务商拒收,或者当垃圾邮件处理。原因就在于我们还未设置电子邮件身份认证,本篇就来详解一下电子邮件的身份认证相关内容。
SPAM历史
系列一中我们介绍了,电子邮件是诞生于阿帕网中,而当时阿帕网的主要使用者是学校的师生和科研工作者。当时的互联网设计者还是秉承着一种“人人为我,我为人人”的理想主义精神(读书人嘛,总是认为人性本善),网络中的邮箱服务器都被设计为所谓的“开放中继”(open relay )。即这些服务器不会校验发件人身份,也不会校验收件人身份,你只要往我这里发,我就转发。在互联网的早期,当时网络环境不是很好,网速也非常慢(当时甚至TCP/IP协议都还没有成为标准,跨多个网域的数据传输非常困难)。open relay 在此时发挥了非常重要的作用,网络上产生了一批免费的中继服务器,用来帮助户用户转发邮件,且清单有专人维护、定期更新,这样发件人就可以根据自己的目标地址,选择相应的smtp服务器来发送自己的邮件。
随着互联网的高速发展,上网人员构成早已不是当初那么单纯,而毫不设防的开放中继服务器很快被那些别有用心的人盯上,成为了垃圾邮件滋生的温床。“SPAM”最初是一个罐装肉的牌子。对于这个牌子的名字来源有很多解释,官方版本说它是“Specially Processed Assorted Meat”,特殊加工过的混合肉。这种SPAM在二战后粮食短缺的欧美非常普及,已到了无处不在而令人厌恶的程度。1970年蒙提·派森中有个喜剧小品就叫Spam,剧中两位顾客试图点一份没有SPAM的早餐,但却无法如愿。在互联网流行后,Spam被用来称呼互联网上遍布的垃圾邮件,形容其无处不在又令人讨厌,而垃圾邮件的发送者被称为Spammer。
电子邮件评分
目前主流的电子邮件服务商都有部署了反垃圾邮件的技术,如果没有进行正确的设置,那么通过你自己搭建的电子邮件服务器发送的邮件,有大概率会被他们标记为垃圾邮件,从而拒收。这里推荐一个神奇的网站:https://www.mail-tester.com/。通过向其指定邮箱发送电子邮件,可以查看自身邮件的评分,从而确定自身需要在哪方面进行改进。
上图是一个自建的邮件系统的评分,一般超过8分基本就不会被拒收了。至于改进项里面也写得非常清楚,直接根据提示操作即可。下面简单介绍一下一般需要的常规设置,可以参考:https://support.google.com/a/topic/9061731。
SPF
SPF(Sender Policy Framework) 是电子邮件系统中发送方策略框架的缩写,它的内容写在DNS的txt类型的记录里面,作用是防止别人伪造你的邮件地址进行发信,是一种非常简单高效的反垃圾邮件解决方案。原理是通过在txt记录里声明授权的ip地址列表,这样别人没法使用你的身份来进行发件(ip地址无法伪造),一般记录内容如下所示:
HOSTNAME | TYPE | ADDRESS / VALUE | TTL |
---|---|---|---|
TXT | v=spf1 a mx ip4:123.123.123.123 ip4:123.123.123.124 | 3600 |
上面这条意思是,授权dns记录中的A地址记录ip以及mx地址记录ip,此外再加上123.123.123.123、123.123.123.124这两个地址。spf记录有专门的语法,详细请参考:http://www.open-spf.org/SPF_Record_Syntax/
DKIM
//todo
DMARC
DMARC是 "基于域的消息认证、报告和一致性 "的缩写。DMARC是一个电子邮件认证协议,允许电子邮件域名所有者指定他们使用哪些机制来认证他们的电子邮件,以及接收来自他们域名的邮件服务器应如何处理认证失败。下面是一个配置的示例:
HOSTNAME | TYPE | ADDRESS / VALUE | TTL |
---|---|---|---|
_dmarc | TXT | v=DMARC1; p=none; rua=mailto:dmarc@abc.mail; ruf=mailto:dmarc@abc.mail | 3600 |
p:用于告知收件方,当检测到某邮件存在伪造发件人的情况,收件方要做出什么处理,reject为拒绝该邮件;none为不作任何处理;quarantine为将邮件标记为垃圾邮件。
ruf:用于当检测到伪造邮件,收件方须将检测结果发送到哪个邮箱地址。
建议:p值最优设置方式是第一次设置选择none,观察发信情况一个月,再改为quarantine,再观察一个月,最后再设为reject。
rDNS
反向DNS解析(rDNS)是查询域名系统(DNS)来确定IP地址关联的域名的技术,也就是根据ip反查域名。反向DNS查询的过程使用PTR记录。互联网的反向DNS数据库植根于 .arpa 顶级域名。因为一般垃圾邮件发送者都使用反向的动态域名,所以这项技术也被用于判断邮件发送方是否是垃圾邮件发送者,有些服务商也会根据你有没有反向域名解析来判断是否要拒收你的邮件。
这里要注意的是,rDNS不是在你的域名服务商那里设置,而是在你的vps服务商那里设置,一般主流的vps供应商目前都提供反向域名解析服务,去vps的管理页面设置即可。
收件方身份认证
上面介绍的是我们作为发件方,需要进行的相关身份验证设置,目的是为了让接收方相信我们MTA的身份。那么作为邮件接收方,自然也需要进行对方的身份认证,以防止收到不明来历的垃圾邮件,使用的策略也是spf、dkim、dmarc这些。下面我们来看下作为接收方如何做这些设置。
//todo
总结
通过这四篇系列文章,我们从原理开始了解,一步步搭建出了一个具有SMTP、IMAP传输安全的、带合适的转发策略控制的、可以和各大主流邮箱收发邮件的且支持outlook、foxmail等主流邮件客户端连接的自有邮件系统。想想带自己域名后缀的邮箱地址,是不是很酷呢😄?
当然,这里仅仅为了演示电子邮件系统的工作原理,搭建的一个简易的邮箱系统。真正大型的邮箱系统,用户不可能使用操作系统的用户,一般都会建一个数据库,而邮件数据也不一定会使用mailbox,可能会使用自研的邮件文件格式。同时还需要考虑高可用、存储、备份、可扩展等各方面的问题,但万变不离其宗,不管内部如何修改,对外暴露的一定是标准的smtp和imap/pop3协议接口,从而保障全球邮件系统的互联互通。
参考资料
1、SPF 记录:原理、语法及配置方法简介
https://www.renfei.org/blog/introduction-to-spf.html