完善的邮件相关DNS需要设置以下记录.
- MX 记录 - 指导如何收信,也有设置A记录来收信的,也有部分提供商看到MX错误就会直接拒收.
- SPF 记录 - 记录我将使用的发件服务器IP,若使用的IP不在这个列表,可以认为邮件是伪造的.
- DKIM 记录 - 在邮件发送时候使用私钥签名,如无这个签名,可以认为邮件是伪造的.
- DMARC 记录 - 指导发生拒收时候的操作.
假设我现在要给guru.taterli.cyou设置邮局相关内容.
首先,我要设置MX记录,MX记录是一个指向域名的记录,所以首先有设置一个记录指向MX记录,比如我用的邮局指向的是guru.serverexperts.org,则我的MX记录可以填写这个,由于只有一个服务器,优先级随便填.如果有多条,优先级数字更低的,会先被使用,如果失败,则使用数字更高的,如果同一个优先级有多个,则在同优先级里随机选择一个.
SPF记录(记录从前往后匹配):
- 允许当前域名记录的A记录的IP发送
- 允许当前域名记录的MX记录的IP发送
- 允许IP地址172.99.249.107的服务器发送
- 允许IP地址2602:ffc8:1:28:2bd:bdff:fe17:b5ad的服务器发送
- 允许relay.mailbaby.net记录的SPF中记录的值发送
- 其他不在上面列表的会直接触发禁止发送(即如果对方服务器收到后会直接拒收)
v=spf1 a mx ip4:172.99.249.107 ip6:2602:ffc8:1:28:2bd:bdff:fe17:b5ad include:relay.mailbaby.net -all
DKIM记录:
- 首先生成一个私钥,然后通过私钥生成对应的公钥.
- 随便指定一个domain key,我这里选x,然后设定记录如下.
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArndmfcvBoLqfabVgIpS0FMd7LhxOiNBd4+jG5jnCsD2pUICObxobUdq6MRbBuvnQXowjGf0cWKUinV4SRI8Yyz/tjDlJi1KWqDZ/+4Ub51KOM5QV7XzuRSU+CcveM9gVfqRfx4Lz/IoIA9xU3Fd1ZwJTK9DgWBzFw+7fd8hjcehJpM2n909AWe6+E6LoHHt67icroOKaRuvZPvNOmOndXjIHeeDQCz4nhlTVKt/TQMv7qy5jzdD9y2Dui617aBj7P47pUBoTKKfLuh/qRDLAIRVtyRM2afsBnpM/Fdgggf3Kw8KCkzDU0UE5As7EUK5C1B3i7jfbd8B0fkd5/AJ2mwIDAQAB
最难也是最被忽略的就是DMARC了,在rfc7489中有记载,主要看6.34
adkim
(可选,缺省是"r") 指定 DKIM Identifier 对齐模式.可以是以下其中之一:- r: 宽松模式
- s: 严格模式
aspf
(可选,缺省是"r")指定 SPF Identifier 对齐模式.可以是以下其中之一:- r: 宽松模式
- s: 严格模式
fo
(可选,缺省是"0") 指定 failure/forensic 报告选项。如果 ruf 标签未定义的话,该标签会被忽略。这个标签的值是一串由冒号隔开的字符:'0', '1', 'd', 和 's':- 0: 发送 DMARC failure/forensic 报告,如果 SPF 和 DKIM 同时对齐失败.
- 1: 发送 DMARC failure/forensic 报告,如果 SPF 和 DKIM 之一对齐失败.
- d: 发送 DKIM failure 报告,如果邮件的 DKIM 签名验证失败.
- s: 发送 SPF failure 报告,如果邮件的 SPF 验证失败.
p
是 DMARC 策略.可以是:none
,quarantine
, 和reject
, 依次对应 DMARC 的三个模式.- none: 不采取策略
quarantine
: 进垃圾箱reject
: 不接收
pct
(可选,缺省是 100) 指定将 DMARC 策略应用到的邮件的百分比.rf
(可选,缺省是 "afrf") 指定 failure/forensic 报告的语法.当前只有 "afrf" 被支持.ri
(可选,缺省是 86400) 指定发送 aggregate 报告的时间间隔,以秒计算.缺省情况下,DMARC aggregate 报告每天发送.v
是 DMARC 版本,总是DMARC1
.rua
指定接收 DMARC aggregate 报告的邮箱的 URI.要请求 DMARC aggregate 报告的话,这是必须的,多条用逗号分隔就行.ruf
指定接收 DMARC failure/forensic 报告的邮箱的 URI.要请求 DMARC failure/forensic 报告的话,这是必须的,多条用逗号分隔就行.
v=DMARC1;adkim=s;aspf=s;fo=0:1:d:s;p=reject;pct=100;rf=afrf;ri=86400;rua=mailto:admin@guru.taterli.cyou;ruf=mailto:admin@guru.taterli.cyou
这样邮件配置就是最严格的配置了.
10分如此轻松.