SPF与邮件头简述

SPF(Sender Policy Framework)工作原理

首先声明,SPF记录其实是DNS上的一条TXT记录

SPF是跟DNS相关的一项技术,它的内容写在DNS的txt类型的记录里面。mx记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟mx相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。


任何组织或者企业一般都会有一个邮件服务器。倘若这个服务器开启了SPF且接收到了邮件,那么就会按照如下流程工作。

1.当前邮件服务器接收到了一封邮件,邮件头内容是声称ip为123.123.123.123,发件人为[email protected]
2.这时候邮件服务器就会去查询cow.com的SPF记录看是否允许123.123.123.123这个ip发邮件。根据SPF记录值作出后续的决断例如是否拦截。


SPF语法

每条SPF记录开始都会是:
v=spf1
且都会有自己的前缀,默认是"+"。

前缀 意义
“+” Pass(通过)
“-” Fail(拒绝)
“~” Soft Fail(软拒绝)
“?” Neutral(中立)

例如下图为一个拦截实例:
在这里插入图片描述


all

表示所有 IP,肯定会命中。因此通常把它放在 SPF 记录的结尾,表示处理剩下的所有情况。例如:

“v=spf1 -all”
拒绝所有ip发送邮件,或者说这个域名不会发邮件。
“v=spf1 +all”
接受所有


ip4

指定一个IPv4地址或者地址段。例如:

“v=spf1 ip4:123.123.123.1/24 -all”
只允许在 123.123.123.1 ~ 123.123.123.255 范围内的 IP


ip6

格式和ip4的很类似,例如:

“v=spf1 ip6:1080::8:800:200C:417A/96 -all”
只允许在 1080::8:800:0000:0000 ~ 1080::8:800:FFFF:FFFF 范围内的 IP


a 和 mx

这俩的格式是相同的,以a为例,格式为以下四种之一:

a
a/x #这个x就类似于123.123.123.123/23中的23.
a:test.com
a:test.com/24

会命中相应域名的a记录(或mx记录)中包含的IP地址(或地址段)。如果没有提供域名,则使用当前域名。例如:

“v=spf1 mx -all”
允许当前域名的mx记录对应的所有IP地址,也可以说是当前域名的邮件服务器发出的所有邮件都是合法的,只要查找邮件服务器ip进行判断就好。

“v=spf1 mx mx:demo.test.com -all”
允许当前域名和 demo.test.com 的 mx 记录对应的IP地址。

“v=spf1 a/24 -all”
类似地,这个用法则允许一个地址段。

在这里插入图片描述
上图就表示此域名发去出去的ip为123.59.170.202与后面的那个ip这两个是合法的。其余的生成是此域名发出去的都软拒绝。


include

格式为include:test.com,表示引入test.com域名下的SPF记录,如果该域名下不存在 SPF记录,则会出现一个PermError结果。例如:

“v=spf1 include:test.com -all” 继承test.com的SPF记录。
在这里插入图片描述


exp

格式为exp=test.com,目的是如果邮件被拒绝,可以给出一个消息。而消息的具体内容会首先对test.com执行TXT查询,然后执行宏扩展得到。


redirect

格式为redirect=test.com

类似于include。

++SPF相关的介绍在这里就结束了++


邮件头相关知识


++在无SPF的前题下++

假设A的邮箱为[email protected],邮件服务器为mail.test.com,主机名为xiaokeai。
假设B的邮箱为[email protected],邮件服务器为mail.demo.com,主机名为fffff。

此时A给B发了封邮件内容如下

From: [email protected]
To: [email protected]
Date: …
X-Mailer: Outlook
Subject: hello

邮件先被上传到了mail.test.com,被这个邮件服务器加上一个邮件头信息,最终结果如下:

Received: from xiaokeai(xiaokeai [xiaokeaid的ip]) by mail.test.com (8.8.5) id 004A21; Tue, Mar 18 2003 14:36:17 -0800 (PST)
From: [email protected]
To: [email protected]
Date: …
X-Mailer: Outlook
Subject: hello

这时候mail.test.com把邮件又转发了mail.demo.com,这时候邮件头变为了:

Received: from mail.test.com (mail.test.com [mail.test.com的ip]) by mail.demo.com (8.8.5/8.7.2) with ESMTP id LAA20869 for [email protected]; Tue, 18 Mar 2003 14:39:24 -0800 (PST)
Received: from xiaokeai(xiaokeai [xiaokeaid的ip]) by mail.test.com (8.8.5) id 004A21; Tue, Mar 18 2003 14:36:17 -0800 (PST)
From: [email protected]
To: [email protected]
Date: …
X-Mailer: Outlook
Subject: hello


这时候B就可以看自己的mail.demo.com这个邮件服务器上A发给自己的邮件了。

++from mail.test.com(mail.test.com[ip])++

这句话表示,有邮件声称是mail.test.com发送来的,看了看邮件的ip后发现确实是。

++with ESMTP id LAA20869++

邮件的ID号。

++by mail.test.com (8.8.5)++

表示邮件服务器运行的程序的版本号。

参考
email邮件头详解

猜你喜欢

转载自blog.csdn.net/qq_41874930/article/details/107937048