邮箱学堂:SPF详解

时间:2022-08-27 19:13:00
【中国邮箱网 电子邮件频道】
 
1月18日,什么是SPF?关于SPF的一些基础知识有哪些?SPF有哪些需求?什么是SPF的TXT记录?本文的微软Exchange专家围绕SPF做了非常详细的介绍与分析。
 
什么是SPF?
 
这里的SPF不是防晒指数,而是指Sender Policy Framework。翻译过来就是发信者策略架构,比较拗口,通常都直接称为SPF。
 
SPF是跟DNS相关的一项技术,它的内容写在DNS的txt类型的记录里面。mx记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟mx相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。
 
由定义可以看出,SPF的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件。
 
例如:当coremail邮件服务器收到自称发件人是spam@gmail.com的邮件,那么到底它是不是真的gmail.com的邮件服务器发过来的呢?那么我们可以查询gmail.com的SPF记录。
 
关于SPF的一些知识
 
当前市场上很多邮件系统和供应商都已经开始支持SPF,比如163.com,那么该如何得到163.com的SPF值呢?在CMD环境中,键入:
 
nslookup
set type=txt
163.com
就会得到以下的结果:
163.com text ="v=spf1 include:spf.163.com -all"
其中:="v=spf1 include:spf.163.com -all" 就是163.com的SPF值。这个数据中说明了163.com有效合法服务器都有哪些!
 
那么我们该如何创建呢?
 
进入域名解析创建一条TXT记录填写正确的SPF数据就可以生效了。
 
在MDaemon7.x中启用SPF功能,并作适当调整就可以了。
 
另外8.x版本新增加了一个DomainKey签名,不过MDaemon已经自动帮你创建。
 
另外给大家一个网址,很实用
 
 
这个网址是一个创建SenderID的向导网站,他能帮你创建一个SenderID值。
SenderID (寄件人身份识别技术)。
SPF(SenderPolicyFramework,寄件人政策架构)。
SenderID技术与SPF一样,都是一种以IP(互联网协定)位址认证电子邮件寄件人身份的技术。
 
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 来保护你的系统,你必须:
 
配置 DNS,添加 TXT 记录,用于容纳 SPF 问询的信息。
 
配置你的电子邮件系统(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 了。 
 
这里是你可以考虑的几个步骤。
 
首先设置你的 MTA 使用 SASL,比如,你可以在端口 25 和 587 使用它。
 
告诉你的用户你已经使用了这个策略(spf.pobox.com 给出了一个通知的例子,参见参考文献)。
 
给你的用户一个宽限期,也就是说,把你的 SPF 记录加入到域名服务器之中,但使用“软失败”(~all)而不是“失败”(-all)。
 
这样,你就保护了你的服务器、你的客户和整个世界免受垃圾邮件之类的困扰了。
 
SPF 的官方站点上有很多信息,还等什么呢?
 
有什么需要担心的?
 
SPF 是一个对于欺骗的完美保护。但它有一个局限:传统的邮件转发方式不再有效了。你不能仅仅从你的 MTA 接受邮件并简单地重新发送它了。你必须重写发送地址。常见的 MTA 的补丁可以在 SPF 的网站找到。换句话说,如果你把 SPF 记录加入到了域名服务器,你就必须更新你的 MTA 来进行发送地址改写,即使你还没有对 SPF 记录进行检查。
 
结论
 
你可能觉得 SPF 的实施有点难以理解。不过这确实不算复杂,而且还有一个不错的向导来帮你完成这个转换(参见参考文献)。
 
如果你被垃圾邮件所困扰的话,SPF 将可以帮助你,保护你的域名免受伪造邮件地址的影响,你所要做的仅仅是在域名服务器上添加一行文本并配置你的电子邮件服务器而已。
 
SPF 的优点有很多。不过,像我对一些人所说的,这不是一夜之间就可以达到的,SPF 的好处将通过日积月累来表现出来,当其他人都使用它的时候就能明显地看到了。
 
我也提到了 Sender ID,这和 SPF 有关,但我没有去解释它。可能你已经知道原因了,微软的策略一向如此---软件专利。在参考文献中,你可以看到 openspf.org对于 Sender ID 的立场声明。
 
我仅仅希望给你一个 SPF 的简短说明。如果你对此感兴趣,想要了解更多信息的话,你可以看看参考文献,本文的内容就来自于此。
 
解决MT发送邮件通知给GMail遇到的SPF校验问题
 
blog系统有一个很有用的功能就是邮件发送留言通知:但是发送到GMail邮箱的通知信十有八九都会被标记为垃圾邮件。原因就是SPF:Sender Policy Framework (SPF) 要做发送人校验,而MT设置的发信人是留言者的邮件地址,而退信地址是MT系统所在服务器的邮箱。
 
Received-SPF: neutral (google.com: 60.195.249.163 is neither permitted nor denied by domain of apache@localhost.localdomain)
 
我的WEB服务器上没有任何邮件系统。所以无法通过SPF校验,有严格的SPF校验这也是GMail相对Spam比较少的原因。
 
如何解决呢:
 
1 增加邮件系统,设置MX记录等,需要学不少东西;
 
2 简单的就是先发到不支持SPF校验的邮件系统上,然后再转发给GMail,这时候的退信地址已经转发邮箱了:
Received-SPF: pass (google.com: domain of #####@yeah.net designates 60.12.227.137 as permitted sender)
 
什么是SPF?
 
SPF 是发送方策略框架 (Sender Policy Framework) 的缩写,正在逐步成为一个防伪标准,来防止伪造邮件地址。
 
您的域管理员或托管公司仅需在域名系统 (DNS) 中发布 SPF 记录。这些简单的文本记录标识了经过授权的电子邮件发送服务器(通过列出这些服务器的 IP 地址)。电子邮件接收系统会检查邮件是否来自经过正确授权的电子邮件发送服务器。检查步骤如下,发送人向接收方发送一封电子邮件后,邮件接收服务器接收电子邮件并执行如下操作:
 
• 检查哪一个域声称发送了该邮件并检查该域的 SPF 记录的 DNS。
• 确定发送服务器的 IP 地址是否与 SPF 记录中的某个已发布 IP 地址相匹配。
• 对电子邮件进行打分:如果 IP 地址匹配,则邮件通过身份验证并获得一个正分。如果 IP 地址不匹配,则邮件无法通过身份验证并获得一个负分。然后,对现有的防垃圾邮件筛选策略和启发式筛选应用这些结果。
 
如何给邮件服务器增加SPF设置,请参考chicheng的文章:
 
《为你的mail server增加SPF记录》
 
什么是SPF
 
就是Sender Policy Framework。SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你的domain name的SPF记录之后,接收邮件方会根据你的SPF记录来确定连接过来的IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。关于更详细的信息请参考RFC4408(http://www.ietf.org/rfc/rfc4408.txt )
 
如何增加SPF记录
 
非常简单,在DNS里面添加TXT记录即可。登陆http://www.openspf.org/wizard.html 在里面输入你的域名,点击Begin,然后会自动得到你域名的一些相关信息。
a 你域名的A记录,一般选择yes,因为他有可能发出邮件。
mx 一般也是yes,MX服务器会有退信等。
ptr 选择no,官方建议的。
 
a: 有没有其他的二级域名?比如:bbs.extmail.org和www不在一台server上,则填入bbs.extmail.org。否则清空。
mx: 一般不会再有其他的mx记录了。
ip4: 你还有没有其他的ip发信?可能你的smtp服务器是独立出来的,那么就填入你的IP地址或者网段。
include: 如果有可能通过一个isp来发信,这个有自己的SPF记录,则填入这个isp的域名,比如:sina.com
~all: 意思是除了上面的,其他的都不认可。当然是yes了。
 
好了,点击Continue.....
自动生成了一条SPF记录,比如extmail.org的是
v=spf1 a mx ~all
并且在下面告诉你如何在你的bind里面添加一条
extmail.org. IN TXT "v=spf1 a mx ~all"
 
加入你的bind,然后ndc reload即可。
检查一下:
dig -t txt extmail.org

邮箱学堂:SPF详解的更多相关文章

  1. SPF详解2

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

  2. SPF详解

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

  3. ucos事件邮箱信号量队列详解

    Ucos的事件分为时钟,信号量,互斥性信号量,消息队列,以及消息邮箱 首先说信号量 信号量在ucos中的类型定义为OS_EVENT_TYPE_SEM,在任务控制块ecb中,主要是用到的是信号量计数器O ...

  4. php-正则邮箱验证及详解

    当前的邮箱格式有哪些//1.第1种是QQ邮箱,它的后缀名是,@qq, .com.// 2.第2种是网易邮箱后缀名是,@163.com或者,@126.com// 3.第3种是雅虎邮箱,后缀名是,@yah ...

  5. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  6. 网易DMARC设置详解

    网易企业邮箱DMARC协议设置详解 发布时间:2013-09-27 尊敬的企业用户: 据统计,全球范围内被投递的钓鱼邮件每天约达到1亿封,无孔不入的钓鱼邮件.诈骗邮件,威胁着用户的信息和财产安全.网易 ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. out和ref详解

    要想充分理解C# out和ref,必须先明确如下两个概念(对值类型与引用类型掌握比较好的,可以跳过"一.明确两个基本概念") 一.明确两个基本概念 值类型: 定义:通过值的方式来传 ...

  9. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

随机推荐

  1. 关于DCMTK3&period;6&period;0源代码编译的总结

    1.DCMTK cmake出来的代码是一样的.MT和MD版本的区别在于DCMTK工程下的每个子工程的代码生成中的MT还是MD,只要修改成为相应的值就可以了. 2.依赖包的选择.依赖包必须与上面中所说的 ...

  2. POJ 2635 The Embarrassed Cryptographer 大数模

    题目: http://poj.org/problem?id=2635 利用同余模定理大数拆分取模,但是耗时,需要转化为高进制,这样位数少,循环少,这里转化为1000进制的,如果转化为10000进制,需 ...

  3. 100个精选zencart扩展插件

    100个精选zencart扩展插件 特别推荐 1. 数据库备份 2. 产品横向布局. 3. 邮件订阅Newsletter Subscribe. 4. google 翻译google_translate ...

  4. 查找算法(I) 顺序查找 二分查找 索引查找

    查找 本文为查找算法的第一部分内容,包括了基本概念,顺序查找.二分查找和索引查找.关于散列表和B树查找的内容,待有空更新吧. 基本概念 查找(search)又称检索,在计算机上对数据表进行查找,就是根 ...

  5. 性能测试三十六:内存溢出和JVM常见参数及JVM参数调优

    堆内存溢出: 此种溢出,加内存只能缓解问题,不能根除问题,需优化代码堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java h ...

  6. 05&colon; python中的函数

    1.1 python 函数   1.函数作用 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得 ...

  7. 浏览器请求中文乱码&lpar;ISO-8859-1 to UTF-8&rpar;

    String utfString=new String(param.getBytes("iso-8859-1"),"utf-8");

  8. mysql 集群 数据同步

    mysql集群配置在网站负载均衡中是必不可少的: 首先说下我个人准备的负载均衡方式: 1.通过nginx方向代理来将服务器压力分散到各个服务器上: 2.每个服务器中代码逻辑一样: 3.通过使用redi ...

  9. bzoj1619 &sol; P2919 &lbrack;USACO08NOV&rsqb;守护农场Guarding the Farm

    P2919 [USACO08NOV]守护农场Guarding the Farm 相似题:P3456 [POI2007]GRZ-Ridges and Valleys 按海拔是否相同分块 每次bfs海拔相 ...

  10. beego——session控制

    beego内置了session模块,目前session模块支持的后端引擎包括memory.cookie.file.mysql.redis.couchbase.memcache.postgres, 用户 ...