如何配置SPFv1:大众化详解
Kent Ickler 和 Derrick Rauch*
防晒系数?
等等不对… 是发送方策略框架(Sender Policy Framework)
“1997届的女士们先生们,记得涂防晒霜…现在我要给出我的建议:”
背景介绍
当今网络中存在邮件"伪造"现象(感谢@ustayready)。发送方策略框架(SPF)最初创建于2005年(RFC 4408),最新版本于2014年更新(RFC 7208),并与DKIM和DMARC共同更新。它通过为收件邮件服务器提供验证方法,尝试阻止伪造邮件,判断邮件是否来自FROM字段中域名的授权发送服务器。收件邮件服务器从而能够判断入站邮件更可能是伪造/钓鱼邮件还是合法邮件。
- 如果收件邮件服务器收到来自SPF授权服务器的邮件,则有理由认为是有效/“好"邮件
- 如果收到来自SPF未授权服务器的邮件,则有理由认为是无效/恶意邮件
SPF记录还可以"告知"收件邮件服务器在收到未授权邮件时应采取的措施:继续投递、标记为可疑(增加风险评级)或直接拒绝。当然,SPF记录并非金科玉律,收件邮件服务器可以自行决定如何权衡SPF记录的重要性。
营销人员的困境
营销人员经常为此苦恼。这是SendGrid、MailGun、MailChimp等工具面临的难题。他们购买了花哨的新营销邮件工具,但大家总是将他们的活动邮件标记为垃圾邮件!如果营销团队没有确保其FROM域名的SPF记录准确,收到的邮件更容易被判定为垃圾邮件/恶意邮件,从而进入垃圾箱被遗忘。
前瞻性思考
发送方策略框架并未消亡,但在反垃圾邮件和反钓鱼领域有了新的兄弟技术。DKIM和DMARC是较新的框架,扩展了SPF最初开始的验证功能。它们共同尝试在域名所有权和收件邮件服务器之间建立信任网络。请关注我们未来关于DMARC和DKIM的博客文章。
DNS记录配置
“授权"邮件服务器/中继发送邮件的SPF记录是一个DNS TXT记录,必须在注册商指定的名称服务器上设置。由于这涉及域名所有权,它允许域名所有者告知收件方:收到带有其域名的FROM字段的邮件是否来自预期的邮件服务器。
下面讨论的DNS记录必须在域名注册商NS记录定义的域名名称服务器上创建。
语法详解
有许多工具可帮助构建SPF记录,但您仍需了解其工作原理。SPF记录由SMTP收件方从左到右读取,首次匹配时记录分析停止并返回配置结果。
- DNS记录类型 = TXT
- 主机 = @(您的主要TLD或要保护的域名)
- 值 = [语法]!!
值键是记录的核心部分,让我们仔细看看:
"v=spf1 " [机制-动作] [机制-对象] [机制-动作] [机制-对象]...
机制-动作
动作参数告知收件邮件服务器应采取的操作:
+通过邮件:SPF记录指定主机已授权(邮件接受)-拒绝邮件:SPF记录指定主机未授权(邮件拒绝)~软失败:SPF记录指定主机未授权但,嗯,可能(标记/增加风险)?中立:SPF记录指定不知道,双重嗯(邮件接受)
机制-对象
有多种选项:
all所有服务器,所有地方ip4:<邮件服务器IP地址>ip4:<IP地址>/CIDR样式ip6:<IPv6地址>ip6:<IP地址>/CIDR样式a:[域名]包含[x-域名]的所有A记录a:[域名]/CIDR包含[x域名]所有A记录的/CIDR网络a包含此域的所有A记录a/CIDR包含此域所有A记录的/CIDR网络mx包含此域的mx记录mx/CIDR包含此域所有mx记录的/CIDR网络mx:[域名]包含[x-域名]的所有mx记录mx:[域名]/CIDR包含[x域名]所有mx记录的/CIDR网络ptr包含此域ptr记录的IPptr:[域名]包含[x-域名]ptr记录的IPexists:[域名]YES/NO触发器。如果A记录存在=通过redirect:[域名]用[域名]的SPF记录替换整个SPF记录include:[域名]包含[域名]的SPF记录。匹配=通过,不匹配=失败。这种类型记录通常用于大型邮件提供商如Google、Office等,也常用于邮件中继如SendGrid、MailGun等。
include:是一种信任机制。它允许您将授权发送邮件的信任代理到另一个域名/组织的SPF记录,您承认该组织负责发送您的邮件。这些组织通常将其SPF记录覆盖所有可能的邮件服务器。
示例
-
v=spf1 +mx -all
接受来自此域mx记录的邮件,拒绝其他所有来源 -
v=spf1 +a:AnotherDomain.com ?a:google.com -all
接受来自AnotherDomain.com的A记录邮件,对Google.com的A记录持中立态度,但拒绝其他所有 -
v=spf1 exists:AnotherDomain.com -all
如果AnotherDomain.com存在A记录则接受邮件,否则拒绝 -
v=spf1 -all
拒绝来自此域的所有邮件,无论谁发送 -
v=spf1 include:mailgun.com include:sendgrid.com -all
遵循mailgun.com和sendgrid.com的SPF记录规则,拒绝所有其他 -
v=spf1 redirect=AnotherDomain.com
仅遵循AnotherDomain.com的SPF记录规则
再谈营销
回到营销部分,MailChimp、MailGun和SendGrid在做什么?
有趣的是,如果您使用邮件中继或群发邮件服务,邮件可以被视为授权,从而突破垃圾箱。但是,我内心的红队人员不得不问…
第三方能否在我信任的第三方处创建账户,并在未经我明确批准的情况下以我的名义发送邮件?
嗯,是…也不是。
这些服务可以在您配置SPF记录授权其邮件服务器的情况下以您的名义发送邮件。它们各自采取一些措施确保第三方不能使用您的发件地址发送邮件,通过在代表该域名发送邮件前强制用户验证FROM域名。每种服务的做法不同。有些在其域名上创建DNS记录,应包含为+a:yourdomain.mailrelayservice.com,这可以为您提供一些保证。但最终,您需要信任您的邮件服务器,如果您觉得不能,那么…这是个艰难的世界,瘫痪性偏执将会出现。
更多资源
有关SPF记录等的更多信息,请查看以下链接。同时请关注我们即将发布的关于DKIM(RFC 7372)和DMARC(RFC 7489)的博客!
SPF记录生成器
有些平台可以帮助构建适合您特定需求的SPF记录。大多数工作方式相似…有些甚至要钱$$!我不建议为帮助创建SPF记录付费,但一如既往,使用免费服务时要小心。也就是说,MXToolbox多年来一直在我的系统管理员和蓝队工具箱中,从未让我失望。
在线构建SPF:https://mxtoolbox.com/SPFRecordGenerator.aspx
链接
- Open Sender Policy Framework:http://www.openspf.org/Project_Overview
- SPF V1: RFC 7208 (obs 4408, 6652) https://tools.ietf.org/rfc/rfc7208.txt
- SPF V1: RFC 6652 (obs by RFC-7208) https://tools.ietf.org/html/rfc6652
- SPF V1: RFC 4408 (obs by RFC-7208) (2006) https://tools.ietf.org/html/rfc4408
即将发布的博客阅读:DKIM, DMARC!
- 基于域的消息认证、报告和一致性:https://dmarc.org/
- SPF V1: RFC 7960 – DMARC互操作性 https://tools.ietf.org/rfc/rfc7960.txt
- SPF V1: RFC 7489 – DMARC https://tools.ietf.org/rfc/rfc7489.txt
- SPF V1: RFC 7372 -DKIM (更新7208) https://tools.ietf.org/rfc/rfc7372.txt
“但请相信我的防晒建议。”
*Kent和Derrick是我们系统管理员团队的一员——没有他们我们该怎么办?