SPF多重要求示例如何工作?
问题描述:
SPF RFC最后包含一个complex example,这让我很困惑。SPF多重要求示例如何工作?
A.4. Multiple Requirements Example
Say that your sender policy requires both that the IP address is
within a certain range and that the reverse DNS for the IP matches.
This can be done several ways, including the following:
example.com. SPF ("v=spf1 "
"-include:ip4._spf.%{d} "
"-include:ptr._spf.%{d} "
"+all")
ip4._spf.example.com. SPF "v=spf1 -ip4:192.0.2.0/24 +all"
ptr._spf.example.com. SPF "v=spf1 -ptr +all"
This example shows how the "-include" mechanism can be useful, how an
SPF record that ends in "+all" can be very restrictive, and the use
of De Morgan's Law.
如果IP地址失败两种模式包括,是不是由最后+all
接受?
答
简短版本:只有在包含的测试通过时,include机制才会匹配。该算法在匹配时停止并在该示例中返回失败。
长版本: 为了理解本例,您需要知道算法何时停止。它停止并返回任何匹配的结果。让我们来看看一个稍微不同的例子不包括机制:
v=spf1 +mx +ip4:192.0.2.0/24 -all
它说:如果IP地址有一个MX记录或者是在给定的IP范围内,则通过,否则失败。如果测试主机具有MX记录,则该算法将在该匹配处停止并且不检查IP范围。未到达-all
。
这种编写SPF记录的方式允许定义多个条件,充当白名单和黑名单。第一场比赛获胜。
包含机制有点不同。包含的SPF记录会返回结果,例如合格或不合格。并且该结果确定包含机制是否匹配。 include specification表示它只在返回通行证时才匹配。现在,让我们看一下例子再次:
example.com. SPF ("v=spf1 "
"-include:ip4._spf.%{d} "
"-include:ptr._spf.%{d} "
"+all")
ip4._spf.example.com. SPF "v=spf1 -ip4:192.0.2.0/24 +all"
ptr._spf.example.com. SPF "v=spf1 -ptr +all"
如果被测试主机的IP地址为10.0.0.1
,第一包括记录v=spf1 -ip4:192.0.2.0/24 +all
给出了一通。这意味着包含匹配并停止处理。包含之前的-
限定符使包含记录失败。该主机不允许发送。
如果测试主机的IP地址为192.0.2.1
,则它将匹配-ip4:192.0.2.0/24
。这使得第一个包含的记录失败。但失败的结果意味着包含机制说:“不匹配”。算法将继续到第二个包含机制。包含的记录也会失败,这意味着它不会再次匹配。最后,达到+all
并返回通行证。该主机被允许发送。
所以失败包括是一种反转测试并要求主机通过(不匹配)多个测试的方法。