SPF

SPF는 이 도메인 이름으로 메일을 보낼 수 있는 서버가 어디인지 도메인 소유자가 선언해 두는 TXT 레코드입니다. 받는 서버는 이 목록과 실제 접속한 서버를 비교합니다.

작성

SPF(Sender Policy Framework)는 이 도메인 이름으로 메일을 보낼 수 있는 서버가 어디인지를 도메인 소유자가 선언해 두는 TXT 레코드입니다. 메일을 받은 서버는 발신 도메인의 SPF를 조회해, 방금 접속한 서버의 IP가 목록에 있는지 확인합니다. 목록에 없다면 그 도메인 이름을 도용한 메일일 가능성이 높다고 판단합니다.

문법 요소

example.co.kr. 3600 IN TXT "v=spf1 include:_spf.mailservice.example ip4:203.0.113.10 ~all"
요소뜻
v=spf1SPF 레코드임을 알리는 머리표. 반드시 맨 앞
include:도메인그 도메인의 SPF를 불러와 함께 허용. 메일 서비스가 안내하는 형태
ip4: / ip6:주소나 대역을 직접 지정. 사내 메일 서버나 알림 발송 서버
a / mx같은 도메인의 A 레코드나 MX 레코드에 해당하는 서버를 허용
~all위에 없는 서버는 softfail. 의심하되 거부하지는 말라는 뜻
-all위에 없는 서버는 fail. 거부하라는 뜻
?all판단하지 않음. 사실상 선언의 의미가 없어 권하지 않습니다

구성은 왼쪽부터 차례로 평가하고 처음 일치하는 항목에서 멈춥니다. 그래서 all 은 항상 마지막에 둡니다.

한 도메인에 하나

규격상 한 이름에 유효한 SPF 레코드는 하나뿐입니다. 메일 서비스를 도입할 때마다 레코드를 새로 추가하면 v=spf1 로 시작하는 TXT가 둘이 되고, 받는 서버는 어느 쪽을 믿을지 정할 수 없어 검사를 오류(permerror)로 끝냅니다. 업무 메일, 고객 알림 발송, 마케팅 메일을 각각 다른 서비스로 보낸다면 하나의 레코드에 include 를 나란히 적어 합쳐야 합니다.

"v=spf1 include:_spf.mailservice.example include:spf.notify.example ip4:203.0.113.10 ~all"

DNS 조회 10회 제한

SPF 검사 한 번에 허용되는 DNS 조회 횟수는 10회입니다. include, a, mx, ptr, exists, redirect 가 이 횟수를 소비하고, include 가 불러온 레코드 안의 include 도 누적됩니다. ip4와 ip6는 조회가 필요 없어 횟수를 쓰지 않습니다.

10회를 넘기면 받는 서버는 목록 전체를 무시하고 permerror로 처리합니다. 레코드를 공들여 써 두어도 인증이 통과하지 않는 흔한 원인입니다. 횟수가 빡빡해지면 쓰지 않는 include 를 지우고, 고정 IP로 보내는 서버는 include 대신 ip4로 바꾸어 조회를 줄입니다.

전달에서 깨지는 이유

메일이 중간에서 다른 주소로 전달(forwarding)되면 최종 수신 서버가 보는 접속 서버는 원래 발신 서버가 아니라 전달해 준 서버입니다. 그 서버의 IP는 원래 도메인의 SPF 목록에 없으므로 검사는 실패합니다. 개인 주소로 회사 메일을 돌려 받는 구성, 메일링 리스트를 거치는 경우가 여기에 해당합니다.

이것은 설정 실수가 아니라 SPF 구조의 한계입니다. 그래서 전달을 거쳐도 유지되는 DKIM 서명을 함께 두고, DMARC가 둘 중 하나라도 통과하면 합격으로 보도록 설계되어 있습니다. 셋을 묶어 설정하는 순서는 SPF, DKIM, DMARC 설정에서, 도달률 관점의 점검은 메일 도달률 높이기에서 다룹니다.

자주 묻는 질문

네, 한 도메인 이름에 v=spf1 로 시작하는 TXT는 하나만 있어야 합니다. 두 개 이상이면 받는 서버는 규격에 따라 검사를 오류로 처리하고, 결과적으로 인증이 통과하지 않습니다. 여러 발신 서비스를 쓴다면 하나의 레코드 안에 include 를 나열해 합칩니다.

목록이 완전하다고 확신할 때까지는 ~all(softfail)을 쓰고, 누락이 없음을 확인한 뒤 -all(fail)로 좁히는 순서가 안전합니다. -all 은 목록에 없는 서버의 메일을 거부하라는 뜻이어서, 빠뜨린 발신 경로가 있으면 정상 메일이 차단됩니다.

부족합니다. SPF는 접속한 서버의 IP만 검사하고 본문이나 보낸 사람 표시 주소는 보지 않습니다. 서명으로 내용을 보증하는 DKIM, 두 결과의 취급 방식을 정하는 DMARC를 함께 두어야 의미가 생깁니다.

관련 가이드