Messaging Server에 메시지가 오면 MTA는 SPF 쿼리를 통해 주소가 실제로 주소에 있는 도메인으로부터 왔는지 확인합니다. SPF 쿼리에서는 DNS를 참조하여 메시지의 도메인(domain)에 속한 TXT 레코드를 찾습니다. 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는 MX 레코드에서 domain을 검사하고 이 SMTP 연결의 소스 IP 주소가 domain의 MX 쿼리 결과로 얻은 IP 주소 중 하나와 일치하는지 확인하도록 지시합니다. 일치하는 항목이 있는 경우 표시되는 +는 결과가 Pass임을 의미합니다.
a:colo.siroe.com/28은 colo.siroe.com의 A 레코드를 검사한 후 28비트만을 비교하여(255.255.255.240에 대해 마스크 처리됨) 이 SMTP 연결의 소스 IP 주소가 A 레코드에 지정된 것과 동일한 CIDR 서브넷에 있는지 확인합니다. 한정자가 지정되지 않았기 때문에 기본값은 결과가 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 사용 인증이 거부되었지만 거부가 덜 명확해서 바로 실패로 확인되지는 않았습니다. 구현의 기본 동작은 메시지를 받지만 SoftFail을 Received-SPF: 헤더에 표시하여 시브(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) 본격적인 디버깅을 사용할 수 있습니다.