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并返回通行证。该主机被允许发送。

所以失败包括是一种反转测试并要求主机通过(不匹配)多个测试的方法。