Sun Java System Messaging Server 6.3 管理指南

15.1 操作原理

当邮件传入 Messaging Server 时,MTA 将进行 SPF 查询以确定地址是否确实来自该地址上的域。SPF 查询查阅 DNS 中属于此邮件的域的 TXT 记录 (domain)。 domain 可以是作为 HELO 或 EHLO 参数指定的域名(如果使用了 spfhelo 通道关键字),也可以是在 MAIL FROM: 命令中给出的邮件始发者地址中的域名(通常是 @ 字符之后的部分)。如果没有指定的或可用的域名,则在 HELO/EHLO 期间指定的那个域名将被用作 domain。请注意,大部分 ISP 会发布一个与其域匹配的授权 IP 地址列表。如果 IP 地址与域名不匹配,则邮件将被认为是伪造的。


注 –

在查询 DNS 之前,我们会先检查 SPF_LOCAL 映射表中是否存在匹配的域。如果在表中找到匹配的域,则首先使用此域。


如果在映射表中找到的记录包含 redirect = domain 子句,则会通过 DNS 查询重定向到域,而跳过递归和冗余的映射文件检查。

生成的 TXT 记录示例:

v=spf1 +mx a:colo.siroe.com/28 -all

对于此 RFC 支持的 SPF 记录而言,v=spf1 令牌是必须的。

+mx 指示我们检查 domain 的 MX 记录,并确认此 SMTP 连接的源 IP 地址与作为 domain MX 查询结果给出的 IP 地址之一匹配。如果存在匹配项,则 + 表示此操作的结果为 Pass

a:colo.siroe.com/28 指示我们检查 colo.siroe.com 的 A 记录,然后确认此 SMTP 连接的源 IP 地址与 A 记录位于同一指定的 CIDR 子网,只比较 28 位(掩码 255.255.255.240)。未指定限定字符,因此使用默认值 +,表示匹配导致 Pass

最后,-all 与任何其他项匹配,并导致 Fail。有关 SPF 记录更完整的介绍,请参阅 http://www.ietf.org/rfc/rfc4408.txt 上的 RFC 4408。

SPF 处理可以得到以下结果之一。下表显示了结果及其说明。

表 15–1 SPF 处理结果

结果 

说明 

Pass

查找已通过,表示找到了 SPF 记录,并且该记录验证了始发系统有权使用 domain

Fail

查找找到了匹配的 SPF 记录,但是,该记录明确地拒绝向 SMTP 客户端授予在 SMTP 事务期间使用 domain 的权限。我们 SPF 实现的默认行为是使用 5xx 回复拒绝 SMTP 命令。

SoftFail

查找找到了匹配的 SPF 记录并且该记录也拒绝为 SMTP 客户端授权使用 domain,但是,拒绝不是很严格且记录不会指向彻底失败。我们实现的默认行为是接受邮件,但是在 Received-SPF: 标题中注明 SoftFail,以进行后续评测,如 Sieve 处理。

Neutral

SPF 记录未声明授权 SMTP 客户端使用 domain。邮件将被接受。规范要求 Neutral 与下面的 None 处理方法一样。

None

未找到匹配 SPF 记录,因此不进行任何 SPF 处理。 

PermError

在 SPF 处理中遇到永久错误,例如 SPF 记录中的语法错误、处理嵌套 SPF 记录时发生 DNS 故障(由于 include: 机制或 redirect= 修饰符所致),或处理嵌套 SPF 记录时超过为 SPF 处理配置的限制。默认行为是使用 5xx 回复拒绝 SMTP 命令。

TempError

在 SPF 处理中遇到临时错误,很可能是由于查询 SPF 记录时 DNS 超时。默认行为是使用 4xx 回复拒绝 SMTP 命令。 

在 SPF 处理完成后,Received-SPF: 标题将被写入记录 SPF 处理结果的邮件。然后,可以在 Sieve 处理期间查询此标题以做进一步考虑。如果启用 option.dat 文件中的 MTA 选项 MM_DEBUG (>0),则可以使用全面的调试。