SPF 简介

摘要:

SPF 是发送方策略框架 (Sender Policy Framework) 的缩写,希望能成为一个防伪标准,来防止伪造邮件地址。这篇文章对 SPF 进行了简单介绍,并介绍了它的一些优点和不足。

_________________ _________________ _________________

SPF 诞生于2003年,它的缔造者 Meng Weng Wong 结合了反向 MX 域名解析(Reverse MX) 和 DMP (Designated Mailer Protocol) 的优点而付予了 SPF 生命。

SPF 使用电子邮件头部信息中的 return-path (或 MAIL FROM) 字段,因为所有的 MTA 都可以处理包含这些字段的邮件。不过微软也提出了一种叫做 PRA (Purported Responsible Address)的方法。PRA 对应于 MUA (比如 thunderbird) 使用的终端用户的地址。

这样,当我们把 SPF 和 PRA 结合起来的时候,就可以得到所谓的“Sender ID”了。Sender ID 允许电子邮件的接收者通过检查 MAIL FROM 和 PRA 来验证邮件的合法性。有的说法认为,MAIL FROM 检查由 MTA 进行,而 PRA 检查由 MUA 来完成。

事实上,SPF 需要 DNS 以某种特定的方式来工作。也就是必须提供所谓的“反向 MX 解析”记录,这些记录用来解析来自给定域名的邮件对应的发送主机。这和目前使用的 MX 记录不通,后者是用来解析给定域名对应的接收邮件的主机的。

SPF 有哪些需求?

要想用 SPF 来保护你的系统,你必须:

  1. 配置 DNS,添加 TXT 记录,用于容纳 SPF 问询的信息。
  2. 配置你的电子邮件系统(qmail, sendmail)使用 SPF,也就是说对服务器上每封进入的邮件进行验证。

上述第一步要在邮件服务器所属的域名服务器上进行调整,下一节中,我们将讨论这个记录的细节内容。你首先需要确定的一点是你的域名服务器(bind,djbdns)所使用的语法。但别担心,SPF 的官方网站提供了一个很好用的向导来指导你如何添加记录。

SPF 的 TXT 记录

SPF 记录包含在一个 TXT 记录之中,格式如下:

		v=spf1 [[pre] type [ext] ] ... [mod]

每个参数的含义如下表所示:

参数 描述
v=spf1 SPF 的版本。如果使用 Sender ID 的话,这个字段就应该是 v=spf2
pre 定义匹配时的返回值。

可能的返回值包括:

返回值 描述
+ 缺省值。在测试完成的时候表示通过。
- 表示测试失败。这个值通常是 -all,表示没有其他任何匹配发生。
~ 表示软失败,通常表示测试没有完成。
? 表示不置可否。这个值也通常在测试没有完成的时候使用。
type 定义使用的确认测试的类型。

可能的值包括:

候选值 描述
include 包含一个给定的域名的测试
以 include:domain 的形式书写。

all 终止测试序列。
比如,如果选项是 -all,那么到达这条记录也就意味着测试失败了。但是如果无法确定,可以使用"?all"来表示,这样,测试将被接受。

ip4 使用 IPv4 进行验证。
这个可以以 ip4:ipv4 或 ip4:ipv4/cidr 的形式使用。建议使用这个参数,以减少域名服务器的负荷。

ip6 使用 IPv6 进行验证。

a 使用一个域名进行验证。
这将引起对域名服务器进行一次 A RR 查询。
可以按照 a:domain, a:domain/cidr 或 a/cidr 的形式来使用。

mx 使用 DNS MX RR 进行验证。
MX RR 定义了收信的 MTA,这可能和发信的 MTA 是不同的,这种情况基于 mx 的测试将会失败。 
可以用 mx:domain, mx:domain/cidr 或 mx/cidr 这些形式进行 mx 验证。

ptr 使用域名服务器的 PTR RR 进行验证。
这时,SPF 使用 PTR RR 和反向图进行查询。如果返回的主机名位于同一个域名之内,就验证通过了。
这个参数的写法是 ptr:domain

exist 验证域名的存在性。
可以写成 exist:domain 的形式。

ext 定义对 type 的可选扩展。如果没有这个字段,那么仅使用单个记录进行问询。
mod 这是最后的类型指示,作为记录的一个修正值。

修正值 描述
redirect 重定向查询,使用给出的域名的 SPF 记录。
以 redirect=domain 的方式使用。

exp 这条记录必须是最后一条,允许给出一条定制的失败消息。
IN TXT "v=spf1 mx -all exp=getlost.example.com"

getlost IN TXT "You are not authorized to send mail for the domain"

嘿!我是 ISP

ISP 实施 SPF 可能对于他们处于漫游状态(roaming)的用户带来一些麻烦,当这些用户习惯使用 POP-before-Relay 这样的方式处理邮件,而不是 SASL SMTP 的时候问题就会出现。

嗯,如果你是一个被垃圾邮件、地址欺骗所困扰的 ISP 的话,你就必须考虑你的邮件策略、开始使用 SPF 了。

这里是你可以考虑的几个步骤。

  1. 首先设置你的 MTA 使用 SASL,比如,你可以在端口 25 和 587 使用它。
  2. 告诉你的用户你已经使用了这个策略(spf.pobox.com 给出了一个通知的例子,参见参考文献)。
  3. 给你的用户一个宽限期,也就是说,把你的 SPF 记录加入到域名服务器之中,但使用“软失败”(~all)而不是“失败”(-all)。

这样,你就保护了你的服务器、你的客户和整个世界免受垃圾邮件之类的困扰了。

SPF 的官方站点上有很多信息,还等什么呢?

有什么需要担心的?

SPF 是一个对于欺骗的完美保护。但它有一个局限:传统的邮件转发方式不再有效了。你不能仅仅从你的 MTA 接受邮件并简单地重新发送它了。你必须重写发送地址。常见的 MTA 的补丁可以在 SPF 的网站找到。换句话说,如果你把 SPF 记录加入到了域名服务器,你就必须更新你的 MTA 来进行发送地址改写,即使你还没有对 SPF 记录进行检查。

结论

你可能觉得 SPF 的实施有点难以理解。不过这确实不算复杂,而且还有一个不错的向导来帮你完成这个转换(参见参考文献)。

如果你被垃圾邮件所困扰的话,SPF 将可以帮助你,保护你的域名免受伪造邮件地址的影响,你所要做的仅仅是在域名服务器上添加一行文本并配置你的电子邮件服务器而已。

SPF 的优点有很多。不过,像我对一些人所说的,这不是一夜之间就可以达到的,SPF 的好处将通过日积月累来表现出来,当其他人都使用它的时候就能明显地看到了。

我也提到了 Sender ID,这和 SPF 有关,但我没有去解释它。可能你已经知道原因了,微软的策略一向如此---软件专利。在参考文献中,你可以看到 openspf.org 对于 Sender ID 的立场声明。

下一篇文章中,我们将讨论 MTA 的设置,我们到时再见。

我仅仅希望给你一个 SPF 的简短说明。如果你对此感兴趣,想要了解更多信息的话,你可以看看参考文献,本文的内容就来自于此。

转:http://www.linuxfocus.org/ChineseGB/December2004/article354.shtml

SPF 简介的更多相关文章

  1. SPF详解2

    什么是SPF?   这里的SPF不是防晒指数,而是指Sender Policy Framework.翻译过来就是发信者策略架构,比较拗口,通常都直接称为SPF.   SPF是跟DNS相关的一项技术,它 ...

  2. SPF详解

    什么是SPF? 这里的SPF不是防晒指数,而是指Sender Policy Framework.翻译过来就是发信者策略架构,比较拗口,通常都直接称为SPF. SPF是跟DNS相关的一项技术,它的内容写 ...

  3. 邮箱学堂:SPF详解

    [中国邮箱网 电子邮件频道]   1月18日,什么是SPF?关于SPF的一些基础知识有哪些?SPF有哪些需求?什么是SPF的TXT记录?本文的微软Exchange专家围绕SPF做了非常详细的介绍与分析 ...

  4. Amazon SES SPF和DKIM设置教程

    SPF和DKIM设置是争对域名邮箱而言的(公共邮件也不会给你修改DNS的权限),主要作用就是防止邮箱伪造提升邮件信用度 首先到亚马逊添加域名并验证 添加后,给出了域名验证的方法,就是在dns记录里添加 ...

  5. Swaks绕过SPF验证进行邮件伪造

    0x00 swaks简介 Swaks是一个功能强大,灵活,可编写脚本,面向事务的SMTP测试工具,由John Jetmore编写和维护. 目前Swaks托管在私有svn存储库中.官方项目页面是http ...

  6. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  7. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  8. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  9. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

随机推荐

  1. 如何成为Python高手(转载)

    本文是从 How to become a proficient Python programmer 这篇文章翻译而来. 这篇文章主要是对我收集的一些文章的摘要.因为已经有很多比我有才华的人写出了大量关 ...

  2. spring配置entitymangerfactory

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerE ...

  3. 改写libsvmread读取多标记数据集

    在libsvm和liblinear软件包里有一个C函数叫libsvmread,这个函数的作用是把如下格式的文本文件\begin{align*} 1 & \ \ *:* \ \ *:* \\ - ...

  4. atitit.spring3 mvc url配置最佳实践

    atitit.spring3 mvc url配置最佳实践 1. Url-pattern  bp 1 2. 通用星号url pattern的问题 1 3. Other code 1 4. 参考 2 1. ...

  5. webpack学习之入门实例

    webpack:前端打包神器,目前活跃度甚至超过了gulp.grunt等,使用webpack打包,简单快速,下面记录下webpack环境搭建以及基本使用: 1.首先新建一个空白目录,用于项目根目录,比 ...

  6. Leetcode 19 Remove Nth Node From End of List 链表

    删除从后往前数的第n个节点 我的做法是将两个指针first,second 先将first指向第n-1个,然后让first和second一起指向他们的next,直到first->next-> ...

  7. “LAMP“或“LNMP”组合

    Linux作为操作系统,Apache和 Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器. 由于这四个软件都是免费或开放源码软件(FLOSS ...

  8. 转:最简单的基于 DirectShow 的视频播放器

    50行代码实现的一个最简单的基于 DirectShow 的视频播放器 本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectSho ...

  9. [MS bug]安装SQL Server 2008 错误:is not a valid login or you do not have permission

    环境: Windows 7 sp1 x64. 问题描述: 安装到几乎要完成的时候爆出:is not a valid login or you do not have permission.安装失败. ...

  10. css3动画特效:纯css3制作win8加载动画特效

    Windows 8     完整效果如上图:这个里面可能是css冲突,喜欢的可以自己去体征一下:   css特效代码: <style type="text/css"> ...