2017-05-08 12 views
0

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에서 허용하지 않습니까?

답변

0

짧은 버전 : 포함 메커니즘은 포함 된 테스트가 통과하는 경우에만 일치합니다. 이 알고리즘은 일치시 중지되고 해당 예제에서 실패를 반환합니다.

긴 버전 : 이 예를 이해하려면 알고리즘이 중지되는시기를 알아야합니다. 그것은 어떤 일치든지에 멈추고 결과를 돌려 보낸다. 메커니즘을 포함하지 않고의 약간 다른 예를 살펴 보자 :

v=spf1 +mx +ip4:192.0.2.0/24 -all 

그것은 말한다 : IP 주소가 MX 레코드를 가지고, 또는 지정된 IP 범위에있는 경우, 다음 통과, 그렇지 않으면 실패합니다. 테스트 된 호스트에 MX 레코드가있는 경우 알고리즘은 일치하는 위치에서 중지하고 IP 범위를 확인하지 않습니다. -all에 도달하지 않았습니다.

SPF 레코드를 작성하는이 방법은 허용 목록 및 블랙리스트처럼 작동하는 여러 조건을 정의 할 수 있습니다. 그리고 첫 번째 경기에서 승리합니다.

포함 메커니즘은 조금 다르게 작동합니다. 포함 된 SPF 레코드는 결과를 반환합니다 (예 : 통과 또는 실패). 그리고 그 결과는 include 메카니즘이 일치하는지 아닌지를 결정합니다. 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에 도달하여 패스를 반환합니다. 이 호스트는 보낼 수 있습니다.

그래서 실패한 포함은 테스트를 뒤집고 호스트가 여러 테스트를 통과 (일치하지 않음)하도록하는 방법입니다.