whoistool
← 모든 가이드

SPF·DKIM·DMARC 이해하기: 위조를 막고 받은편지함에 도착하기

마지막 확인: 2026. 10. 20.

누구나 이메일의 보낸 사람 칸에 여러분의 도메인을 적을 수 있습니다. SPF, DKIM, DMARC는 수신 서버가 메일이 정말 여러분에게서 왔는지 확인하게 해 주는 세 가지 DNS 레코드입니다. 2024년부터 Gmail과 Yahoo는 이 확인을 통과하지 못한 메일을 거부하거나 스팸함으로 보냅니다.

요점

  • SPF는 도메인 이름으로 메일을 보낼 수 있는 서버 목록입니다.
  • DKIM은 메일마다 서명을 붙이며, 검증용 공개 키는 DNS에 게시됩니다.
  • DMARC는 SPF와 DKIM이 실패했을 때 수신 측이 어떻게 처리할지 알려 주고 보고서를 보내 줍니다. 눈에 보이는 보낸 사람 주소의 도메인과 일치해야만 통과합니다.
  • p=none으로 시작해 보고서를 읽고, 정상 발신자가 모두 통과하면 quarantine, 이어서 reject로 바꾸세요.

세 가지 레코드 한눈에 보기

레코드위치예시
SPF도메인 자체의 TXTv=spf1 include:_spf.google.com ~all
DKIMselector._domainkey.example.com의 TXT(또는 CNAME)v=DKIM1; k=rsa; p=MIIBIjANBg…
DMARC_dmarc.example.com의 TXTv=DMARC1; p=none; rua=mailto:[email protected]

지금 중요한 이유

2024년 2월부터 Gmail과 Yahoo는 모든 발신자에게 SPF 또는 DKIM을 요구합니다. 대량 발신자(Google 기준으로 Gmail 주소에 하루 5,000통 넘게 보내는 발신자)는 SPF, DKIM, DMARC 레코드(p=none이면 충분), SPF나 DKIM과 정렬된 보낸 사람 도메인, 마케팅 메일의 원클릭 수신 거부, 0.3% 미만의 스팸 신고율이 필요합니다.

메일을 적게 보내더라도 레코드가 없으면 피싱에서 도메인을 쉽게 사칭할 수 있고, 수신 측도 그런 도메인의 메일을 덜 신뢰합니다.

SPF

SPF는 도메인에 하나만 두는 TXT 레코드로, v=spf1로 시작해 허용된 발신자를 나열하고 나머지 모두에 대한 규칙으로 끝납니다. include:는 서비스 업체의 목록을 가져오고, ip4:/ip6:는 자체 서버를 추가하며, mx는 도메인의 MX 서버를 허용합니다.

  • SPF 레코드는 정확히 하나만 게시하세요. v=spf1 레코드가 두 개면 SPF가 오류(permerror)가 되므로 하나로 합치세요.
  • SPF는 DNS 조회를 최대 10번까지만 할 수 있습니다(include, a, mx, exists, redirect 모두 포함되며 중첩된 것도 셉니다). 넘으면 SPF가 실패하니 쓰지 않는 include를 지우세요.
  • -all(fail)은 목록에 없는 발신자를 거부하라는 뜻이고, ~all(softfail)은 의심스럽게 처리하라는 뜻입니다. DMARC를 쓰고 있다면 ~all이 일반적이고 안전합니다.
  • SPF는 사람이 보는 보낸 사람 주소가 아니라 봉투 발신자(Return-Path)를 확인하며, 메일이 전달(포워딩)되면 깨집니다. 그래서 DKIM도 필요합니다.

DKIM

발송 서버가 헤더와 본문에 개인 키로 서명하면, 수신 측은 selector._domainkey.example.com에서 공개 키를 가져와 서명을 확인합니다. 셀렉터는 서비스 업체가 정한 이름(google, selector1, s1, k1 등)이므로 서비스마다 별도의 키를 갖습니다.

메일을 보내는 모든 서비스(메일 서비스, 뉴스레터 도구, CRM, 쇼핑몰 등)에서 DKIM을 켜고, 안내하는 레코드(보통 TXT 또는 CNAME)를 게시하세요. 가능하면 2048비트 키를 쓰세요. DKIM은 전달 후에도 유지되므로 DMARC에서 더 믿을 만한 쪽입니다.

DMARC

DMARC는 _dmarc.example.com에 둡니다. SPF나 DKIM이 통과하고, 통과한 도메인이 보낸 사람 주소의 도메인과 일치(정렬)하면 메일이 DMARC를 통과합니다. 서비스 업체가 자기 도메인으로 서명한다면, 여러분 도메인으로 DKIM을 설정하기 전까지는 도움이 되지 않습니다.

rua=mailto:를 지정하면 수신 측이 매일 집계 보고서(XML)를 보내 주며, 어떤 서버가 여러분 도메인으로 메일을 보냈고 통과했는지 알 수 있습니다. 정책을 강화하기 전에 이 보고서로 빠뜨린 발신자를 찾습니다.

정책실패한 메일의 처리
p=none평소처럼 전달되고 보고서만 받습니다. 시작 단계입니다.
p=quarantine스팸함으로 보내집니다.
p=reject전달 단계에서 거부됩니다. 사칭을 완전히 막습니다.

안전하게 적용하는 순서

  • 도메인 이름으로 메일을 보내는 모든 것을 정리하세요: 메일함, 웹사이트 양식, 뉴스레터, 청구서 발송, 고객 지원 시스템.
  • 이들을 모두 포함하는 SPF 레코드를 하나 게시하고, 각 서비스에서 DKIM을 켜세요.
  • v=DMARC1; p=none; rua=mailto:…를 추가하고 2–4주 동안 보고서를 읽으세요.
  • 실패하는 정상 발신자를 모두 고친 뒤 p=quarantine으로 바꾸고(원하면 pct=로 단계적으로), 이후 p=reject로 바꾸세요.
  • 메일을 전혀 보내지 않는 도메인은 v=spf1 -all과 v=DMARC1; p=reject를 게시해 사칭을 막으세요.

한 걸음 더

  • MTA-STS와 TLS-RPT를 쓰면 다른 서버가 검증된 TLS로만 메일을 전달하고 문제를 보고합니다.
  • BIMI는 지원하는 메일함에서 메일 옆에 로고를 표시하며, DMARC 정책이 quarantine 또는 reject여야 합니다.

도메인 검사하기

이메일 보안 검사는 MX, SPF(DNS 조회 수 포함), 일반 셀렉터나 직접 입력한 셀렉터의 DKIM, DMARC, MTA-STS, TLS-RPT, BIMI를 읽고 발견한 문제를 보여 줍니다. DNS를 바꿀 때마다 다시 실행하세요. TTL에 따라 새 레코드가 보이기까지 몇 분에서 한 시간 정도 걸릴 수 있습니다.

출처

이 가이드는 공개된 정보를 요약한 것으로 법률 자문이 아닙니다. 규정은 바뀔 수 있으며 공식 문서와 공지가 우선합니다.

다른 가이드