邮件中MX,PTR,SPF,DKIM,DMARC的原理及详解

MX,SPF,DKIM,DMARC记录由DNS管理配置。

PTR需联系公网IP提供方来协助添加。

注意:MX,PTR,SPF,DKIM,DMARC都要配置。

一:MX

通俗说:mx记录是收邮件用的,邮件来了由mx来安排哪个服务器收对应的邮件。

MX(邮件交换器)记录指定接收邮件发送到您域名的邮件的接收邮件服务器的优先级。举例:

PS C:\Users\junyang> nslookup -qt=mx mail.test.com
服务器:  public2.alidns.com
Address:  8.8.8.8

非权威应答:
mail.test.com  MX preference = 10, mail exchanger = mx02.mail.test.com #本文简称mx02  优先级是10 ,优先级低 
mail.test.com  MX preference = 1, mail exchanger = mx01.mail.test.com #本文简称mx01   优先级是0,优先级高
mx的特点:

1.mx必须解析到域名(再通过A或AAA记录找到IP,并且不能指向CNAME),不能直接解析到IP。

2.低优先级的mx服务器只为充当存储和转发的邮件服务器。

3.多条mx记录时有优先级,数字低的优先级高。如上mx01的优先级高,正常情况下是mx01收邮件。当mx01挂了,mx02会收邮件并存起来。当mx02发现mx01修好了,会把邮件再发给mx01,mx01发给对应的收件邮箱。

mx推荐的高可用方法

高优先级的mx的A记录记录多个IP做轮询或其它负载均衡。并设置一个低优先级的mx记录增加可靠性。

问题:

1.mx优先级的范围是多少?(推荐用法:10,20,30)

答:没有找到mx的优先级范围。推荐从10开始,如10,20,30等等。根据 RFC 5321,编号最低的记录是最首选的。这种措辞可能会令人困惑,因此偏好数字有时被称为距离:距离越小越可取。

2.2个mx解析的优先级一样高会怎样?(个人不推荐这样用,因为没试过)

答:在确定将邮件发送到哪个具有相同优先级的服务器时,“发件人-SMTP 必须随机化它们,以将负载分散到特定组织的多个邮件交换器中”,除非有明确的理由支持一个服务器。

参考 :RFC 5321: Simple Mail Transfer Protocol (rfc-editor.org)

参考:MX记录 - 维基百科,自由的百科全书 (wikipedia.org)

参考:MX 记录 - 维基百科 (wikipedia.org)

二:PTR

通俗点说是反垃圾邮件用的。收件方会查来源公网IP有没有配置对应的发件人域名。

PTR也叫反向解析,根据IP查域名。

不是靠DNS管理员来添加,是由公网IP提供方来添加PTR解析的。需要找公网IP的提供方。

邮箱反向dns是接收方在收到ip时解析这个ip是不是这个邮政服务器发的,主要是为了降低垃圾邮件的数量。

PS C:\Users\junyang> nslookup -qt=ptr 1.2.3.4
服务器:  public2.alidns.com
Address:  8.8.8.8

非权威应答:
1.2.3.4.in-addr.arpa       name = mx01.mail.test.com
问题:

1.动态IP可以做反解解析吗?
不能。 有些adsl的ip或台湾的某些宽带用用户的ip已经带了反向解析,但是反解的结果里有 dynamic 字样,仍会被当作垃圾邮件服务器。

2.一个公网IP能配置多个PTR解析吗?

理论上一个IP可以做多条 PTR 记录的。

3.做那个Ip的反向解析?

做出口的公网Ip。由于线路原因有多个出口Ip的,几个Ip都要做反向解析。

三:SPF

通俗点说SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。

当你定义了你的domain name的SPF记录之后,接收邮件方会根据你的SPF记录来确定连接过来的公网IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则 则认为是一封伪造的邮件。

问题:

1.为啥有了PTR了还要SPF?

答:PTR是公网IP提供方添加的,配置了PTR就能证明这个公网IP是你的。

SPF是域名持有者添加的,配置了SPF就证明了这个域名就是你的。PTR和SPF都配置,邮件更加可信。

四:DKIM

通俗点说DKIM就是给邮件的标题和邮件内容签名防止邮件在传输过程中内容被篡改的。

原理:非对称加密,把公钥放到DNS上,发件MTA(如阿里云邮件推送服务,亿邮等)用私钥把邮件头和邮件内容做hash,再把hash添加到邮件头中。收件方收到邮件后根据dns获得公钥,并对收到的邮件做签名验证。

问题:

1.秘钥对是谁生产的?

发件MTA。如阿里云邮件推送(他们只给用户公钥,配dns用),亿邮(页面点击生产,页面只能看到公钥,配dns用)。

2.自己怎么生成对应的秘钥对?

方法1:linux安装opendkim来生成

方法2: 如下

#在命令行中,输入以下命令以生成私有密钥,将 nnnn 替换为长度至少为 1024,至多为 2048 的位数:
openssl genrsa -f4 -out private.key nnnn

#在命令行中,输入以下命令可生成公有密钥:
openssl rsa -in private.key -outform PEM -pubout -out public.key

3.DKIM配置有到期时间吗?

没有。秘钥对是RSA,没有有效期限制。

4.为什么需要多个 DKIM selectors?

不同selectors可以有不同的秘钥对,一个域名可以有多个selectors。当有多个selectors时DNS要配置多个对应的DKIM解析。

一个域名可能会部署多套邮件推送服务,每套用不同的selector,可互不干扰。

5.通过smtp或sdk发邮件时需要考虑DKIM相关的事情吗?

完全不需要。邮件服务有没有配置DKIM与smtp(或sdk)发邮件互不影响。是发件MTA(如阿里云邮件推送服务,亿邮等)自动用私钥把邮件头和邮件内容做hash,再把hash添加到邮件头中。

6.dkim还有啥作用?

dkim也能保证,即便是同一个公网出口(同一个公司),未经允许的邮件系统发出的邮件,DKIM也会验证失败,邮件可能直接被退回或到垃圾邮件目录。起到内部邮件管控的作用。

7.DKIM key rotation 是什么?

DKIM 已经证明是用来验证邮件完整性的有效手段。但是 DKIM 也有自身的弱点。如果保存 DKIM 的私有密钥的系统被入侵的话,安全性将大打折扣。因此,为了最小化被破解的风险,应该定期改变 DKIM 密钥对。这叫 DKIM key rotation (DKIM 密钥轮换)。

每次密钥轮换的时候,一个新的 {selector, 私有密钥, 公有密钥} 元组将被产生。然后公有密钥将被发布在 DNS 中,你需要重新配置邮件发送服务器来使用新的私有密钥。完成以后,该服务器将会使用新的私有密钥来对所有即将被发送的邮件签名。

原来的密钥应当继续保存7天,然后就可以安全地移除。原因是在邮件发送以后和到达接受服务器之间可能会有延迟。如果在接受服务器上有临时错误的话,这样的延迟可能长达几天。为了让 DKIM 验证通过,接收服务器必须能够在 DNS 中找到对应的公有密钥。

只有当你运行自己的邮件发送服务器的时候,你才需要手工做 DKIM 密钥轮换。如果你使用类似 SendGrid, Office 365, 或者 GSuite 等服务来发送邮件的话,你无需做任何事 — DKIM 密钥轮换是自动完成的。

参考链接:

什么是 DKIM?如何设置 DKIM 记录? (alibabacloud.com)

DKIM Selector的原理及用法是什么-29分享网 (29jy.cn)

五:DMARC

通俗点说就是邮件管理员用dns的方式告诉收件人当spf或dkim认证不过的时候,该怎么处理邮件。是严格点呢?还是宽松点?严格的话可能邮件直接就拒收了,宽松点可能不管或者把可疑邮件扔到垃圾邮件目录。

并且DMARC可以发送报告给邮件管理员,通过DNS告诉收件人的邮箱地址。

参考链接:

什么是DMARC?DMARC记录中常用参数有哪些-腾讯企业邮箱 (qqmail.zj.cn)

什么是 DMARC?如何设置 DMARC 记录? (alibabacloud.com)

基于网域的邮件认证、报告和一致性协议 (DMARC) (securitygateway.com.cn)

猜你喜欢

转载自blog.csdn.net/sinat_24354307/article/details/129760600