1. 什么是SPF

SPF记录(Sender Policy Framework)是一种DNS记录类型,它是通过DNS文本(TXT)记录实现的,主要用于防止电子邮件地址欺骗和垃圾邮件。SPF记录的作用是允许域名所有者声明哪些IP地址(邮件系统的出口IP)或者主机被授权使用该域名发送电子邮件。

2. SPF工作原理

✅ 当邮件服务器收到一封声称来自example.com的邮件时,它会查看SMTP命令中MAIL FROM的发件人地址。

✅ 邮件服务器随后在DNS中查询example.com的SPF记录。

✅ SPF记录以特定的语法列出了一组规则,这些规则定义了哪些IP地址或网络范围(以及其他可能的机制如MX记录等)是被授权发送带有example.com发件人地址的邮件的。

✅ 如果实际发送邮件的IP地址与SPF记录中允许的地址匹配,则邮件被认为是经过验证的,否则邮件可能会被拒绝、退回,或者根据邮件服务器的配置进行其他处理(比如标记为垃圾邮件)。

3. SPF记录语法

v=spf1 <机制>[ <参数>] ... ~all

🔹 v=spf1:

表示这是版本1的SPF记录。

🔹 <机制> :可能包括但不限于以下几种:

        🔸ip4: 后接IPv4地址或CIDR地址块,例如 ip4:173.194.72.103 或 ip4:192.0.2.0/24。

        🔸ip6: 类似于 ip4:, 但针对IPv6地址。

        🔸mx: 表示任何该域名的MX记录指向的服务器都可以发送邮件。

        🔸a: 表示与该域名A记录相匹配的IP地址可以发送邮件。

        🔸include: 引用另一个域名的SPF记录。

🔹 <参数> :

可能包括: -(减号)表示“硬失败”,邮件应该拒收。 ~(波浪线)表示“软失败”,邮件可能被标记,但通常不会被直接拒收。?(问号)表示“不确定”,邮件通常会被接受,但可能不会被信任。 +(加号)表示“通过”,邮件来源得到授权。

🔹 ~all 或 -all:

结尾指示对于未明确提及的其他所有IP地址,邮件应该如何处理。-all意味着除了前面明确许可的IP地址之外,其他任何地址发送的邮件都应该被视为未经授权。

4. SPF配置示例

以163.com的SPF记录设置为例,可以通过nslookup命令(Windows、Linux系统均支持)或dig命令(Linux系统常用)查询SPF记录,记录如下:

[root@localhost ~]# dig +short 163.com txt
"qdx50vkxg6qpn3n1k6n1tg2syg5wp96y""google-site-verification=hRXfNWRtd9HKlh-ZBOuUgGrxBJh526R8Uygp0jEZ9wY""v=spf1 include:spf.mail.163.com -all""57c23e6c1ed24f219803362dadf8dea3""facebook-domain-verification=kqgnezlldheaauy9huiesb3j2emhh3 ""0hz8zn8jpkr3vffgll8hnd6j873bzvsg"

可以看出,TXT类型的记录有多种,分别有不同的用途,这里不做详述。其中”v=spf1 include:spf.mail.163.com -all” 表示SPF记录,根据上述语法解释,这里采用spf1版本,通过include引用spf.mail.163.com的SPF记录,-all表示硬失败。

可以通过命令继续查询spf.mail.163.com的SPF记录如下:

[root@localhost ~]# dig +short spf.mail.163.com txt
"v=spf1 include:spf-a.mail.163.com include:spf-b.mail.163.com include:spf-c.mail.163.com include:spf-d.mail.163.com include:spf-e.mail.163.com -all"

通过查询结果,可以看出由于163.com的出口IP众多,这里又通过include引用其他域名的SPF记录,继续通过命令查询spf-a.mail.163.com的SPF记录,示例如下:

[root@localhost ~]# dig +short spf-a.mail.163.com txt
"v=spf1 ip4:220.181.12.0/22 ip4:220.181.31.0/24 ip4:123.125.50.0/24 ip4:220.181.72.0/24 ip4:123.58.177.0/24 ip4:123.58.178.0/24 ip4:123.126.96.0/24 ip4:123.126.97.0/24 ip4:103.129.252.0/25 ip4:60.191.83.0/24 ip4:103.136.33.32/28 -all"

查到这一层,终于看到ip4的语法,这里显示的就是邮件系统的出口IP。不过大部分企业邮箱没有那么多的出口IP,也不需要通过include做复杂的嵌套查询,以mailabc.cn域名为例,查询SPF记录如下:

[root@localhost ~]# dig +short mailabc.cn txt
"qqmail-site-verification=f193a312a02073591521506eb8add0835942bced458""v=spf1 ip4:124.221.166.127 -all""V0n5mDTE1Mm"

“v=spf1 ip4:124.221.166.127 -all” 这是mailabc.cn邮箱的SPF记录,可以看出这个域名对应的邮箱只有一个出口IP。

5. 如何配置SPF记录?

通过上面介绍,大家已经了解SPF记录其实是一种TXT类型的DNS记录。如果需要配置该记录,需要通过域名服务商或者域名托管机构进行管理。大企业一般是通过自己的DNS服务器管理域名记录,中小企业大多通过域名服务商提供的管理后台进行管理。以mailabc.cn为例,该域名目前托管在阿里云。可以进入阿里云的“域名控制台”,然后根据向导进入“域名解析”界面“添加记录”即可,示例如下:

阿里云域名解析添加记录页面

参考来源:SPF记录语法、工作原理及配置示例|MailABC邮件知识百科 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐