本文主要是介绍邮件的安全认证(dkim/spf/dmarc),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
dkim
dkim是用来识别电子邮件合法以及完整性的一种技术手段,主要方式是通过非对称加密对邮件本身进行签名,邮件接收方可以使用发送方提供的公钥对签名进行校验,来确认邮件是否伪造或者被篡改。
如何查看dkim
dkim签名被放在邮件原始内容的header DKIM-Signature中。用来验证签名的公钥放在指定域名的txt记录中,域名格式为:[selector]._domainkey.[domain],其中selector和domain两个字段我们可以从签名里面获得。
如下是DKIM-Signature的样本:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=okta.com; h=content-type:from:mime-version:subject:reply-to:list-unsubscribe: list-unsubscribe-post:to:cc:content-type:from:subject:to; s=cs1; bh=ypeqONcClQagR0kT04HrbN3qC+qUicpfaZbwpvfEk4g=; b=CtgFBpVnIQICeGi5jNo4ih4jmvIkqeME229RRxP7ZuUx3W/oo9efsVXq5fxInlxHD8+C o2xAvL7WzEA6uqQdT3qZ5hGYDx8FDg8aBJBsa4R3NilKqt/ke9rxwzIXSIiUchV4In2+ev N7YhwbM0wSVEkBY3pPLOmnPkk9cPMY/2zT7ySxoNrOLvF3l7mnBrXp/O9xi3P3U/FVuF4N F8cUzSkD3nj4ic9VftCiZGwB9tdv+1cIPTFothrwbsk/6zfd2Ecc88jMAcC4V36XPqTmVQ WixvOZf3R0zK/v69gdd0jBHpZjlY18rWFysE6wltYV9ALFay0YLpBRBNEYcxbbZw==
d: 获取公钥的根域名
s: 获取公钥域名的selector
以上面的签名内容为例,那么我们可以从域名cs1._domainkey.okta.com中获取公钥。
h:列出了用于创建数字签名的字段
bh:邮件正文的hash值
b:邮件签名内容,使用b和bh生成,并使用私钥签名。
SPF
SPF是用来验证发送邮件的服务器合法性的一套机制。通过声明指定域名的邮件服务器ip地址列表,收件人可以根据发送着封邮件的服务器ip地址来判断这封邮件是否来自合法的发送方。
spf如何工作
当服务器a发送电子邮件到服务器b时,服务器b会读取电子邮件的返回路径email@xxreturn.com (返回地址不同于“发件人”地址,专用于收集和处理退回的消息)。之后搜寻该邮箱域名的spf记录,之后验证服务器a的ip地址是否在spf记录中,如果不在则说明该邮件并不来自于合法的发件服务器。
如何查询spf记录
spf记录存放于邮箱域名的txt记录中,以v=spf1开头。spf记录支持引用关系,很多时候一条spf记录会引用其他记录,只要是在被引用的列表中的ip都认为是合法ip地址。
以gmail.com为例,首次查询txt记录时会看到如下结果:
"v=spf1 redirect=_spf.google.com"
我们再次查询 _spf.google.com的spf记录
v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all
继续查询_netblocks.google.com的spf记录
"v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
这里所列出来的ip地址均为gmail.com邮件服务器合法ip。当然不止这些,我们需要把所有被引用的记录都遍历一遍才能拿到所有的ip列表。
DMARC
DMARC政策用来告诉邮件服务器如何处理那些spf或者dkim校验失败的邮件。是忽略这些失败的校验,还是放到垃圾邮箱或者不做转发。
如何查询DMARC记录
dmarc记录可以在邮箱域名的_dmarc子域名的txt记录中找到,比如邮箱@gmail.com, 对应的dmarc记录在_dmarc.gmail.com的txt记录中,以v=DMARC1开头。如下是gmail邮箱的dmarc记录
"v=DMARC1; p=none; sp=quarantine; rua=mailto:mailauth-reports@google.com"
DMARC的定义
p=quarantine
表示电子邮件服务器应当“隔离”未通过 DKIM 和 SPF 的电子邮件,将它们视为潜在的垃圾邮件。其他可能的设置包括p=none
,它允许未通过检查的电子邮件仍然传递,以及p=reject
,它指示电子邮件服务器阻止未通过检查的电子邮件。adkim=s
意味着 DKIM 检查是“严格的”。将s
改为r
,即可将其设置为“宽松的”,比如adkim=r
aspf=s
与adkim=s
的意义相同,但是针对 SPF- sp 用于设定该域名下其他子域名邮箱的策略
- rua=mailto:mailauth-reports@google.com 当出现邮件的安全校验未通过时,发送报告到邮箱mailauth-reports@google.com
这篇关于邮件的安全认证(dkim/spf/dmarc)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!