邮件安全之SPF记录详解

什么是SPF  
就是Sender Policy Framework。SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你的domain name的SPF记录之后,接收邮件方会根据你的SPF记录来确定连接过来的IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则 则认为是一封伪造的邮件。

下面为SPF的详细介绍,

一 句型

在一条SPF记录中,按照排列的先后顺序,对所给出的机制进行验证.如果在SPF记录中,没有机制或修改符,默认结果是中性(Neutral);如果域没有SPF记录,结果是:”无”(None);如果在DNS解析期间,有一个临时错误,会报”临时错误”(TempError)(以前的规划中称作”错误”(error));如果SPF记录句型错误,比如写法错误或者使用了未知句型,会报”永久错误”(PermError)(以前称作”unknown”)

1 机制

1.1 机制表示

1.1.1 all

这个机制总是匹配的,通常用在记录的结尾.例:

“v=spf1 mx –all” 允许所有该域的MX邮件服务器发送邮件,禁止所有其他的.

“v=spf1 –all” 该域根本不能发送邮件

“v=spf1 +all” 任何服务器都可以发送邮件

1.1.2 ip4

“v=spf1 ip4:192.168.0.1/16 –all” 允许192.168.0.1到192.168.255.255的服务器发送邮件

“v=spf1 ip4:192.168.0.1 –all” 允许192.168.0.1发送邮件,与“v=spf1 ip4:192.168.0.1/32 –all”同意

1.1.3 ip6

单个IP,于ip4不同,/128为默认前缀 例:

"v=spf1 ip6:1080::8:800:200C:417A/96 -all"

允许1080::8:800:0000:0000 和 1080::8:800:FFFF:FFFF之间的主机发送

"v=spf1 ip6:1080::8:800:68.0.3.1/96 -all"

允许 1080::8:800:0000:0000 和1080::8:800:FFFF:FFFF之间的主机发送

1.1.4 a

例:假设当前域为example.com

"v=spf1 a -all" 当前域被使用

"v=spf1 a:example.com -all"当前域被使用

Equivalent if the current-domain is example.com.

"v=spf1 a:mailers.example.com -all" 指定mailers.example.com的主机IP可以外发邮件

"v=spf1 a/24 a:offsite.example.com/24 -all" 如果example.com解析到192.0.2.1,那么全部的C类地址192.0.2.0/24将作为可外发 邮件的IP地址;同样,如果offsite.example.com有多个A记录地址,每一个IP地址也会被扩展到CIDR子网,作为可外发邮件IP地址.

1.1.5 mx

所有域的MX记录对应的A记录,按照MX记录的优先级进行验证.如果发送IP在这些记录中,则机制匹配.如果域未指定,默认为当前域.

A记录需要精确匹配发送邮件的IP地址.如果有CIDR前缀,则需要逐个对应IP地址验证.

例:

v=spf1 mx mx:deferrals.domain.com -all"

Perhaps a domain sends mail through its MX servers plus another set of servers whose job is to retry mail for deferring domains.

也许一个域可以通过他的MX服务器发送邮件,而另外也可以通过deferrals.domain.com的MX服务器发送邮件.

"v=spf1 mx/24 mx:offsite.domain.com/24 -all"

也许一个域的MX服务器在一个IP接收邮件,而用临近的另一IP发送邮件.

1.1.7 prt

发送IP的PTR记录至少有一个和给定域相匹配.尽量避免使用这种机制,因耗费大量的DNS查询

例子:

"v=spf1 ptr -all"

"v=spf1 ptr:otherdomain.com -all"

1.1.8 exists

对被提供的域进行A记录查询,如果有结果,则匹配.如果结果是”-“,会被当作127.0.0.2对待.

在下面的例子中,发件IP地址为1.2.3.4,当前域为example.com

"v=spf1 exists:example.net -all"

如果example.net不能解析,结果失败.如果可以解析.机制匹配.

1.1.10 include

句型:include:<domain>

指定的域被查询后匹配.如果查询无匹配或者有错误,接着开始下一个机制处理.警告:如果指定域不是合法有效的SPF记录,返回”永久性错误”结果.某些邮件接收者会基于此错误,拒绝接受邮件.

例:

在下面的例子中,发信IP是1.2.3.4,当前域是example.com

“v=spf1 include:example.net –all”

如果example.net没有SPF记录,结果是”永久错误”(PermError)

假设example.net的SPF记录是”v=spf1 a –all”

查询exapmle.net的A记录,如果匹配1.2.3.4,结果是”通过”(Pass);如果不匹配,,则include整体匹配失败,后面的-all将不再验证,最后总的结果还是”失败”(Fail).

这个机制会涉及信任关系,可能会有越权行为,可能被人假冒.因此可以设置为中性,在include前加上标识符?

“v=spf1 ?include:example.net –all”

该机制一般不宜选择.

1.2 标识符

作为机制的前缀,表明机制的状态.机制的默认标识符为”+”

"+" Pass (通过)

"-" Fail (失败)

"~" SoftFail (软失败)

"?" Neutral (中性)

2修改符

在一个SPF记录中,每个修改符只能使用一次,不能重复使用.未知修改符将会在验证时忽略。

1.2.1 redirect

句型: redirect=<domain>

将会用指定域代替当前域

在下面的例子里:当前域为example.com,发信IP是1.2.3.4

“v=spf1 redirect=example.net”

如果example.net没有SPF记录,返回”unknown”的错误

假设example.net的SPF记录是”v=spf1 a –all”

查询example.net的A记录,如果匹配1.2.3.4,则”通过”(Pass);如果不匹配,该行为失败,接着开始执行-all机制.

1.2.2 exp

句型: exp=<domain>

提供解释性的语句.如果SMTP接收者拒绝一个信息,它可以包含一个返回给发信者的解释信息.SPF记录里可以包含一个解释字符串给发送者,告之相关的错误信息或需要访问的帮助页面等.

二 处理过程

三 错误代码

验证SPF记录的结果只能有如下几在种:


结果


解释


可做行为


Pass


SPF记录指定,主机被允许发送


接受


Fail


SPF记录指定,主机不被允许发送


拒绝


SoftFail


SPF记录指定,主机不被允许发送,但可以再发送


接受但做标记


Neutral


SPF记录详尽,但不能确认其有效性


接受


None


无SPF记录或SPF记录验证无结果


接受


PermError


永久错误(例如不正确的格式记录)


未指明


TempError


临时错误发生


接受或拒绝

设置SPF记录

SPF记录类似类似这样:

v=spf1 a mx mx:mail.jefflei.com ip4:202.96.88.88 ~all

这条SPF记录具体的说明了允许发送 @yourdomain.com 的IP地址是:

  • a (这个a是指 yourdomain.com 解析出来的IP地址,若没有配置应取消)
  • mx (yourdomain.com 对应的mx,即 mail.yourdomain.com的A记录所对应的ip)
  • mx:mail.jefflei.com (如果没有配置过mail.jefflei.com这条MX记录也应取消)
  • ip4:202.96.88.88 (直接就是 202.152.186.85 这个IP地址)

其他还有些语法如下:

- Fail, 表示没有其他任何匹配发生

~ 代表软失败,通常用于测试中

? 代表忽略

如果外发的ip不止一个,那么必须要包含多个

可以通过这个网站的向导自动生成SPF记录:http://www.openspf.org/ ,Godaddy域名解析面板的TXT记录也提供了设置SPF记录的向导,设置很方便。

检测SPF记录设置是否正确

发信到 [email protected] ,如果收到的信息是 :SPF check: pass 就说明设置成功了。

查看域名的SPF记录

Windows下,开始菜单—>运行—>输入cmd ,然后回车,在命令行下输入:

nslookup -type=txt 域名

就可以看到域名设置的TXT记录了。

Unix操作系统下用:

dig -t txt 域名

时间: 2024-10-06 07:02:55

邮件安全之SPF记录详解的相关文章

邮件服务器DNS设置-----MX、SPF、DKIM记录详解

邮件服务器的DNS设置 DNS记录,需要你到你的域名托管商那里进行设置或者你自己管理DNS服务器.不少域名托管商不支持txt记录或者不支持DKIM记录,所以你就无法使用SPF和DKIM的功能.DNS的修改,需要48小时以上才能生效.国内的万网是不支持DKIM,目前新网是支持SPF和DKIM. 1.MX记录邮件的MX记录最好是指向机器A记录,尽量不要直接指向IP地址(不符合规范).1.1 添加A记录mail.example.com 192.168.1.1001.2 添加MX记录example.co

postfix 邮件服务的安装及详解

sendmail:性能好,设置复杂,适合老手 qmail:体积小260+k ,模块化.需要做二次开发,适合对邮件性能有要求的 postfix:前身是sendmail,postfix原本是sendmail里面的一个模块,红帽6默认安装好postfix zmailer:近几年才出来的邮件 coremail:国内做的最好的商业平台,运行在linux上 Pop:允许客户端下载邮件,移动标记已读等操作  不会反馈到服务器. Imap4:双向通讯,客户端的操作会反馈到服务器,提供想更过的功能,听歌更好的邮件

python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)

简介 前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到.因此如果想向领导汇报工作,不仅需要提供更直观的测试报告.而是我们需要将生 成测试报告发个相关的负责人,需要他们看一下测试结果,把控一下项目的接口有风险,会不会影响项目进度等等一些事吧. 发邮件需要用到python两个模块,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块

python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)

简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 MIMEMultipart.还有就是测 试负责人不止一个人,需要将测试报告发给多个人,也就是多个收件人.这篇主要是围绕这两个主题进行讲解的. 大致思路 (一)带有附件发送邮件 1.导入模块 MIMEMultipart from email.mime.multipart import MIMEMult

zabbix邮件通知,短信通知配置详解

1.前提条件是zabbix我们已经安装完成 2.在官网我们下载msmtp的文件http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download tar jxvf msmtp-1.4.32.tar.bz2 cd msmtp-1.4.32 ./configure--prefix=/usr/local/msmtp make make install 3.下面开始安装 MUTT如果是CentOS的

linux中的磁盘的MBR记录详解

在硬盘中,硬盘的0柱面0磁头第一个1扇区称为主引导扇区,也叫主引导记录-MBR(main boot record),其中MBR是以下三个部分组成 1.Bootloader,主引导程序---446个字节 2.Dpt(Disk Partition table),硬盘分区表---64个字节 3.扇区结尾标志(55aa)--2个字节 总共512字节,前446个字节是主引导记录,是bios加电自检后要运行的代码,中间64字节为分区表. 简单的来说MBR=bootloader+dpt(64)+结尾标志(55

DNS设置SPF记录全攻略

邮箱域名的spf记录(邮箱反向解析DNS记录)添加方法(常用的域名提供商的解析方法) 当您使用中网科技旗下(中国万维网 WWW.C3W.CN )自带的DNS时,就可以使用这个功能: 域名管理下面的mydns中的txt记录就是spf记录:加入代码 v=spf1 include:spf.c3w.cn -all 请将c3w.cn改成您自己的域名. 具体的设置办法也可以看网上的关于spf的资料. 什么是SPF 就是Sender Policy Framework.SPF可以防止别人伪造你来发邮件,是一个反

Java学习-007-Log4J 日志记录配置文件详解及实例源代码

此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!

&lt;转&gt;详解DNS的常用记录(上):DNS系列之二

详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派到我们的DNS服务器上,这样我们才可以获得对所申请域名的解析权.本文中我们将再进一步,假设我们已经为公司成功申请了一个域名hexun.com,现在hexun.com的解析权被委派到公司的DNS服务器202.99.16.1,那我们在202.99.16.1服务器上该进行什么样的配置呢? 一 安装DNS服