기술 · 출처 기반 답변

SPF(Sender Policy Framework)란? 개념 설명

SPF(Sender Policy Framework)는 도메인 소유자가 자신의 도메인을 대신해 이메일을 보낼 수 있는 메일 서버를 지정할 수 있게 하는 DNS 기반 이메일 인증 메커니즘입니다. 수신 메일 서버가 발신 IP 주소가 해당 도메인의 SPF 레코드에 등록되어 있는지 검증할 수 있게 해 스푸핑을 방지합니다.

SPF의 동작 방식

이메일을 수신하면 수신 서버는 SMTP MAIL FROM 주소에 있는 도메인의 TXT 레코드를 조회합니다. SPF 레코드에는 허용된 IP 주소나 서드파티 서비스 목록이 들어 있습니다. 수신자는 연결한 SMTP 서버의 IP 주소를 이 목록과 비교합니다. IP가 목록에 있으면 검사를 통과합니다. 없으면 사용한 레코드의 한정자에 따라 fail 또는 softfail이 됩니다.

발신자에게 중요한 이유

SPF는 이메일 스푸핑과 피싱에 대한 주요 방어 수단입니다. 유효한 SPF 레코드가 없으면 수신 서버는 내 도메인에서 왔다고 주장하는 이메일이 정당한지 확인할 방법이 없습니다. 그 결과 이메일이 스팸으로 표시되거나 완전히 거부되는 경우가 많습니다. SPF 구현은 DMARC 정렬의 선행 조건이며, DMARC는 이메일 보안 정책의 보고와 적용을 위한 더 견고한 체계를 제공합니다.

흔한 운영 실수

흔한 오류는 DNS 조회 10회 제한을 초과하는 것입니다. include 메커니즘을 너무 많이 사용하는 SPF 레코드는 PermError를 일으켜 인증이 실패합니다. 또 다른 흔한 실수는 한 도메인에 SPF 레코드를 여러 개 두는 것으로, 이는 유효하지 않으며 자동으로 실패 처리됩니다. 일관된 평가를 위해 허용된 모든 발신 출처를 하나의 TXT 레코드로 합쳐야 합니다.

SPF 레코드 예시

일반적인 SPF 레코드는 v=spf1 ip4:1.2.3.4 include:_spf.google.com ~all 같은 모양입니다. 이 예에서 v=spf1은 버전을 나타내고, ip4:1.2.3.4는 특정 서버를 허용하며, include:_spf.google.com은 Google Workspace를 허용하고, ~all은 그 밖의 모든 출처에 대해 softfail을 나타냅니다. https://sendhq.cc/tools 의 SendHQ 무료 도구로 현재 레코드의 구문이 올바른지 확인할 수 있습니다.

평가 한정자

레코드는 허용되지 않은 메일을 수신자가 어떻게 처리할지 알려 주는 한정자로 끝납니다. 마이너스 기호가 붙은 -all은 hard fail을 나타내며 메일을 거부하라는 뜻입니다. 물결표가 붙은 ~all은 softfail을 나타내며 메일을 수락하되 의심스러운 것으로 표시하라는 뜻입니다. 물음표가 붙은 ?all은 neutral 결과로, 수신 서버에 특별한 지시를 하지 않습니다.

팀에서 자주 묻는 질문

SPF 레코드를 두 개 이상 둘 수 있나요?

아니요. 도메인에는 SPF 레코드가 정확히 하나만 있어야 합니다. 레코드가 여러 개이면 영구 오류가 발생해 인증에 실패합니다.

DNS 조회 제한이란 무엇인가요?

SPF 레코드는 재귀 DNS 조회가 10회로 제한됩니다. 이 제한을 초과하면 PermError가 발생해 레코드가 무효가 됩니다.

SPF가 모든 스푸핑을 막나요?

SPF는 사용자에게 보이는 From 헤더가 아니라 Return-Path 주소만 검증합니다. 헤더 전체를 검증하려면 DKIM과 DMARC가 필요합니다.

1차 출처