设置 DKIM 以防止电子邮件遭到篡改

DomainKeys Identified Mail (DKIM) 是加密邮件验证系统,它能用于防范网络诈骗(伪造他人的邮件地址以假扮不同的邮件发件人)。 不仅如此,因为大多数的垃圾邮件都包含欺骗性地址,因此尽管 DKIM 不是专门设计用于反垃圾邮件的工具,但它们有助于显著减少垃圾邮件。DKIM 还能用于确保入站邮件的完整性,或确保邮件从离开签名邮件服务器到送达您的服务器之间中途未被篡改。换言之,有了 DKIM 密码验证系统,接收服务器可以肯定到达的邮件是来自为其签名的服务器,且未以任何方式做过更改。

为了确保邮件的有效性和完整性,DKIM 使用公共和私人密钥对系统。经加密的公共秘钥被发布到发送服务器的 DNS 记录中,随后该服务器使用相应的经加密私人密钥为每个出站邮件签名。对于入站邮件,当接收服务器发现它已有签名时,将从发送服务器的 DNS 记录中检索公共秘钥,然后将其与该邮件的加密签名进行比较来确定该邮件的有效性。 如果入站邮件无法通过验证,那么接收服务器就知道它包含了伪造的地址或曾被篡改。验证失败的邮件可以被拒收,或者被接受但同时调整其垃圾邮件分数。

下面这张图展示了DKIM验证的整个过程:

设置 DKIM 以防止电子邮件遭到篡改

DKIM签名验证过程

如何设置DKIM

目前大部分自建邮件系统都不支持设置DKIM签名和DKIM验证的,Linux环境下的自建邮件系统可以通过安装opendkim来生成DKIM key,之后再把DKIM key添加到DNS解析中。

如果您使用的是MDaemon自建邮件系统,可以参考:https://www.altn.com.cn/webhelp/index.html?security--dkim_sign.htm 进行DKIM签名设置。

如果您使用的是其他自建邮件系统,可以考虑使用SecurityGateway邮件网关,它不仅可以防外部垃圾邮件,还可以针对外发邮件设置DKIM签名。

具体设置步骤如下:

1.以管理员身份登录SecurityGateway的web控制界面,导航到“安全->反欺诈->DKIM签名”

设置 DKIM 以防止电子邮件遭到篡改

启用DKIM签名

2.点击“新建”,填写选择器名称,获得对应的DNS的DKIM选择器记录。

设置 DKIM 以防止电子邮件遭到篡改

获得DNS的DKIM选择器记录

3.在域名解析商处设置域名解析。记录类型为TXT,主机记录填写<选择器名>._domainkey,记录值填写上一步中获得的记录。

设置 DKIM 以防止电子邮件遭到篡改

设置DKIM解析记录

4.添加完成。

设置 DKIM 以防止电子邮件遭到篡改

DKIM记录

验证DKIM记录是否生效

添加完成记录后可以在下面的网站上进行检测,看DKIM记录是否有效:

https://tools.wordtothewise.com/authentication

如果生效的话,会出现“Valid Record”字样

设置 DKIM 以防止电子邮件遭到篡改

DKIM标签说明

DKIM记录生效后,我们可以外发一封邮件看DKIM签名是否生效:

设置 DKIM 以防止电子邮件遭到篡改

带有DKIM签名的邮件原文

可以在邮件原文里看到带有DKIM-Signature字样的报头,

v=1:表示版本1,将来要有新的版本,就扩展之。
a=rsa-sha1:表示算法(algorithm)。有rsa-sha1和rsa-sha256两种。
c=simple:表示不以任何方式更改标头字段,包括空格。还可以用relaxed,表示标准化方法(Canonicalization),具体规范步骤可以查看RFC6376
d=securemail.ink:发件人的域名。
s=test:表示域名的selector(选择器),通过这个selector,可以允许一个域名有多个public key,这样不同的server可以有不同的key。
h=...:是header list,表示对header中哪些字段签名。
bh=...:是body hash。也就是内容的hash。
b=...:是header的签名。也就是把h=那个里面所有的字段及其值都取出来,外加DKIM-signature这个头(除了b=这个值,因为还不存在),一起hash一下,然后用rsa加密。

提高电子邮件安全性

除 DKIM 外,我们还建议您设置以下安全防护机制:

上一篇:关于redis的几件小事(三)redis的数据类型与使用场景


下一篇:Python基础之列表