전달(포워딩)
- SPF192.0.2.80은 example.com의 SPF에 없음
- DKIM서명 온전함
보고서 표시spf=fail dkim=pass → pass
모든 메일에 DKIM 서명: DKIM은 전달 후에도 유지됩니다. ARC(RFC 8617)는 전달자가 메일을 보증하는 데 도움이 됩니다.
테마
수신 메일 서버가 읽는 방식 그대로 도메인의 DMARC 레코드를 확인합니다. 정책이 어디에 있는지, 인증에 실패한 메일은 어떻게 처리되는지, 보고서가 누군가에게 도달하는지, 정책을 적용하기 전에 SPF와 DKIM에 무엇이 필요한지 알려 드립니다.
위 입력란에 도메인을 입력하세요. 이 도구는 DNS에 _dmarc.에 도메인을 붙인 이름의 TXT 레코드를 조회하고, 없으면 조직 도메인까지 거슬러 올라가며(RFC 9989 §4.10), 인증에 실패한 메일을 수신 서버가 어떻게 처리하는지 보여 줍니다.
직접 확인하려면 같은 이름을 조회하세요. dig +short TXT _dmarc.paypal.com, Windows에서는 nslookup -type=TXT _dmarc.paypal.com(DMARC nslookup)입니다. v=DMARC1로 시작하는 응답이 하나면 그것이 레코드이고, 둘이면 수신 서버는 어느 쪽도 사용하지 않습니다(RFC 9989 §4.10).
dig는 거기까지입니다. 서브도메인에서 상위로 올라가지 않고, 보고서 주소가 보고서를 받아 주는지도 확인하지 않으며, 수신 서버가 어느 RFC를 따르는지도 알려 주지 않습니다. 이 도구가 그 부분을 채웁니다.
dig +short TXT _dmarc.example.com이 이름의 모든 응답을 보여 줍니다. v=DMARC1로 시작하는 하나가 레코드입니다.
dig가 보여 주는 것과 보여 주지 않는 것
$ dig +short TXT _dmarc.paypal.com 1
"v=DMARC12; p=reject; rua=mailto:d@rua.agari.com,mailto:dmarc_agg@vali.email; ruf=mailto:d@ruf.agari.com,mailto:MTc4Mzcw@ruf.vali.email3"
$ dig TXT _dmarc.mail.google.com | grep status 4
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN
먼저 한 문장으로 답이 나옵니다. 그 아래에 근거가 이어집니다. 수신 서버가 해석한 레코드(각 태그를 실제 문자 위치에 색으로 표시), 그리고 남색 영역에는 이 도메인에 대해 수신 서버가 거치는 경로와 실패한 메일의 최종 처리가 나옵니다.
점수는 없습니다. none 정책은 실패가 아니라 하나의 단계이며, 경로 아래의 적용 단계표가 다음 단계에 무엇이 필요한지 알려 줍니다.

판정실패한 메일을 수신 서버가 어떻게 처리하는지 한 문장으로 보여 주며, 정책, SPF, DKIM을 한눈에 확인할 수 있습니다.레코드각 태그를 문자 위치에 색으로 표시합니다. 마우스를 올리거나 탭하면 역할을 알 수 있고, 아래에 기본값이 나옵니다.수신 서버의 시점도메인에 대해 수신 서버가 보내는 모든 DNS 질의를 순서대로 응답과 함께 보여 줍니다.DMARC에 실패한 메일도메인 자체, 존재하는 서브도메인, 존재하지 않는 이름에서 수신 서버가 하는 처리입니다.적용 단계표도메인이 none과 reject 사이 어디에 있는지, 다음 단계에 무엇이 필요한지 보여 줍니다.DMARC는 From: 줄에 내 도메인을 쓰지만 내가 보냈다는 것을 증명하지 못하는 메일을 수신 메일 서버가 어떻게 처리할지 알려 주고, 그 메일에 관한 보고서를 어디로 보낼지도 알려 줍니다(RFC 9989 §4.7).
증명 수단은 From: 도메인과 정렬된 SPF 또는 DKIM입니다. 같은 조직 안의 반송 도메인에 대한 SPF 통과, 또는 d=가 내 도메인인 DKIM 서명입니다. 정렬된 통과가 하나만 있으면 충분합니다(RFC 9989 §5.3.5). 나머지는 모두 DMARC에 실패하며, 레코드의 정책에 따라 전달, 스팸함, 거부 중 하나가 됩니다.
보고서는 나머지 절반입니다. rua를 따르는 수신 서버는 내 도메인으로 메일을 보낸 모든 서버의 일일 요약을 보내 줍니다. 정책을 적용하기 전에 잊고 있던 정상 발신원을 찾는 방법입니다.
메일 두 통, 같은 From: 줄
메일 서비스를 통해 보낸 실제 청구서커스텀 DKIM을 설정한 서비스 경유라서 d=example.com으로 서명
203.0.113.9에서 온 위조 청구서example.com이 허용한 적 없는 서버
550 5.7.1 Email rejected per DMARC policy for example.com
내일의 집계 보고서가 dmarc@example.com으로 전달됩니다: 203.0.113.9에서 온 메일 1통, SPF fail, DKIM 없음, 처리 reject.
p=none은 실패한 메일을 평소처럼 전달하고 보고만 하도록 요청하고, quarantine은 의심스러운 메일로 취급해 보통 스팸함으로 보내도록 요청하며, reject는 SMTP 대화 중에 수신을 거부하도록 요청합니다.
none은 실패가 아니라 하나의 단계입니다. RFC 9989 §7.4는 보고서를 받으면서 none에서 최소 한 달, reject로 가기 전에 quarantine에서도 다시 같은 기간을 보내라고 권장합니다. 사용자가 메일링 리스트에 글을 올리는 도메인은 quarantine에서 멈추는 편이 좋습니다.
대형 메일 제공업체도 정책을 나눠 씁니다. gmail.com과 outlook.com은 도메인 자체에는 p=none, 서브도메인에는 sp=quarantine을 게시하고, google.com, yahoo.com, microsoft.com은 reject를 게시합니다.
위조 메일이 도착하는 곳
전달p=none
apache.orggmail.comsamsung.com
192개 중 23개
스팸함p=quarantine
github.comapple.comamazon.com
192개 중 30개
거부p=reject
google.compaypal.commicrosoft.com
192개 중 139개
네. Gmail, Yahoo, Outlook.com으로 대량 발송한다면 필요합니다. 세 곳 모두 DMARC 레코드를 요구하며 p=none이면 규칙을 충족합니다. 다른 사람이 내 도메인으로 메일을 보내는 것을 막는 것은 적용 단계(quarantine 또는 reject)이고, BIMI 로고에도 필요합니다.
Gmail은 2024년 2월 1일부터 Gmail 계정으로 하루 5,000통을 넘게 보내는 발송자에게 요구합니다. Yahoo는 2024년 2월부터 요구하며 발송량 기준은 밝히지 않습니다. Outlook.com은 2025년 5월 5일부터 하루 5,000통을 넘게 보내는 발송자에게 요구합니다. 레코드가 없으면 Gmail은 4.7.31(From: 주소가 정렬되지 않으면 4.7.32)로 응답하고, Outlook.com은 550 5.7.515로 거부합니다.
메일을 보내지 않는 도메인에서는 DMARC가 가장 저렴한 보호책입니다. example.com이 게시한 것처럼 p=reject, Null MX, v=spf1 -all을 설정하세요(M3AAWG).
각 메일 제공업체가 대량 발송자에게 요구하는 것
4.7.31 · 4.7.32DMARC를 통과해야 함550 5.7.515✓필수: 레코드, p=none 이상i보호: quarantine 또는 reject
집계 보고서에서 실패하는 발신원을 찾아 발신 측에서 고치세요. 내 도메인으로 DKIM 서명을 하거나, 조직 안의 반송 도메인으로 옮기면 됩니다. 실패의 대부분은 세 가지 원인으로 설명됩니다.
전달(포워딩)은 DKIM 서명은 유지하지만 SPF를 깨뜨리므로 DKIM이 통과를 책임집니다. 메시지를 수정하는 메일링 리스트는 둘 다 깨뜨립니다. 그리고 자기 도메인으로 서명하는 메일 서비스는 나의 도메인이 아니라 서비스 자신의 DKIM만 통과합니다. 해당 서비스의 커스텀 DKIM(보통 s1._domainkey 같은 CNAME)과 커스텀 반송 경로를 켜세요.
세 가지 실패, 보고서에 나오는 내용, 해결법
보고서 표시spf=fail dkim=pass → pass
모든 메일에 DKIM 서명: DKIM은 전달 후에도 유지됩니다. ARC(RFC 8617)는 전달자가 메일을 보증하는 데 도움이 됩니다.
보고서 표시spf=fail dkim=fail → fail
From:을 다시 쓰는 리스트는 해결됩니다. 사용자가 리스트에 글을 올리는 도메인은 quarantine에서 멈춥니다(RFC 9989 §7.4).
보고서 표시dkim=pass(esp.example) → fail
업체의 커스텀 DKIM을 켜세요. paypal.com의 s1과 s2는 SendGrid로 연결된 CNAME이며, SendGrid가 paypal.com으로 서명합니다.
자체 레코드가 없는 서브도메인은 조직 도메인의 정책을 따릅니다. 존재하는 서브도메인에는 sp, 존재하지 않는 이름에는 np가 적용되며, 둘 다 없으면 p가 적용됩니다(RFC 9989 §4.7).
자체 레코드를 게시한 서브도메인은 그것을 자기 자신에게 사용합니다. 하지만 어떤 이름과 그 조직 도메인 사이에 있는 레코드는 그 이름에 사용되지 않습니다. berkeley.edu의 트리가 그 예로, eecs.berkeley.edu의 sp=none은 www.eecs.berkeley.edu에 닿지 않습니다(RFC 9989 §4.10.1).
np는 가장 손쉬운 개선입니다. 존재하지 않는 이름에서는 정상 메일이 나가지 않으므로 p가 아직 none이어도 np=reject로 그곳에서의 위조를 차단할 수 있습니다. RFC 7489 수신 서버는 np를 모르고 sp를 사용합니다.
수신 서버가 읽는 berkeley.edu의 트리
eecs.berkeley.edu의 sp=none은 적용되지 않습니다. 어떤 이름과 그 조직 도메인 사이에 있는 레코드는 그 이름에 사용되지 않기 때문입니다(RFC 9989 §4.10.1). 이 도구는 이를 사용되지 않는 레코드로 표시합니다.
집계 보고서는 각 수신 서버가 매일 보내는 XML 파일로, 내 도메인으로 메일을 보낸 모든 서버, 메일 수, SPF, DKIM, DMARC 통과 여부가 들어 있습니다(RFC 9990).
발신원별로 읽으세요. 내 서버와 서비스는 정렬된 통과를 보여야 하고, 알려진 서비스가 실패하면 커스텀 DKIM이 필요하며, p=reject에서 실패하는 모르는 주소는 차단된 사칭입니다. 보고서 서비스(dmarcian, Valimail, EasyDMARC, Postmark 등)는 수천 개의 파일을 이런 목록으로 정리해 줍니다.
다른 도메인의 주소로 가는 보고서는 그 도메인이 동의해야만 도착합니다. 그 도메인이 값이 v=DMARC1인 yourdomain._report._dmarc.its-host를 게시해야 합니다(RFC 9990 §4). 이 도구가 대신 확인하고, 없으면 정확한 레코드를 알려 줍니다.
보고서 한 건을 한 줄씩 읽기
<org_name>google.com</org_name>1
<date_range>10월 23일 00:00 UTC ~ 10월 24일 00:00 UTC</date_range>
<policy_published>example.com · p=reject</policy_published>2
<source_ip>198.51.100.24</source_ip> <count>412</count> dkim=pass spf=fail → none3
<source_ip>203.0.113.9</source_ip> <count>37</count> dkim=fail spf=fail → reject4
paypal.com._report._dmarc.rua.agari.com TXT "v=DMARC1;"✓ 승인됨: 보고서가 도착합니다이 도구가 인식하는 보고서 서비스dmarcianValimailEasyDMARCPostmarkCloudflareMimecastProofpointAgariRed SiftPowerDMARC외 6개
부족한 점이 있습니까?기능 또는 새 도구 제안하기