์๋ฆผ ๋ฉ์ผ์ด ์คํธํจ์ผ๋ก ๊ฐ ๋ SPF, DKIM, DMARC ๋ง์ถ๊ธฐ
์ด ๊ธ์ ์์ 11๊ฐ ์
- SPF, DKIM, DMARC๊ฐ ๊ฐ๊ฐ ๋ณด๋ ๋๋ฉ์ธ
- ๋ฐ์ก ์๋น์ค๋ฅผ ์ธ ๋
- dig๋ก ํ์ธํ๊ธฐ
- ๋ฐ์ ๋ฉ์ผ์์ ๊ฒฐ๊ณผ ๋ณด๊ธฐ
- p=none์์ p=reject๊น์ง
- rua ๋ณด๊ณ ์ ์ฝ๊ธฐ
- Gmail, Yahoo, Outlook.com ๋ฐ์ ์ ์๊ฑด
- Cloudflare DMARC Management๋ก ๋ณด๊ณ ์ ๋ฐ๊ธฐ
- ๋ฉ์ผ์ ์ฐ์ง ์๋ ๋๋ฉ์ธ
- ์ ๊ฒํ
- ์ฐธ์กฐ
์ธ์ฆ์ ๋ง๋ฃ ๊ฒฝ๊ณ ๋ฅผ ๋ฉ์ผ๋ก ๋ฐ๊ฒ ํด ๋์๋ค. ๋ฐ์ก ๋ก๊ทธ์๋ ์๋ ์๋ฒ๊ฐ ๋ฉ์ผ์ ๋ฐ์๋ค๋ 250 ์๋ต์ด
์ฐํ ์๋ค. ๊ทธ๋ฐ๋ฐ ๋ฉ์ผ์ ๋ฐ์ํธ์งํจ์ด ์๋๋ผ ์คํธํจ์ ์๋ค. ๋ง๋ฃ ๋น์ผ์์ผ ๊ทธ๊ฑธ ์ฐพ๋๋ค.
SMTP์ 250์ ์๋ ์๋ฒ๊ฐ ๋ฉ์ผ์ ๋๊ฒจ๋ฐ์๋ค๋ ๋ป์ผ ๋ฟ์ด๋ค. ๋ฐ์ํธ์งํจ์ ๋ฃ์์ง ์คํธํจ์ผ๋ก ๋ณด๋ผ์ง๋
๋ฐ๋ ์ชฝ์ด ์ฌ๋ฌ ์ ํธ๋ก ์ ํ๋ค. ๊ทธ์ค ๋ฐ์ ์๊ฐ ์๋ ์ ์๋ ์ต์ํ์ด ๋๋ฉ์ธ ์ธ์ฆ์ด๋ค. โ์ด ๋ฉ์ผ์ด ์ ๋ง
์ด ๋๋ฉ์ธ์์ ์๋คโ๋ฅผ SPF์ DKIM์ผ๋ก ์ฆ๋ช
ํ๊ณ , DMARC๋ก ์ฌ๋์ด ๋ณด๋ ๋ฐ์ ์ฃผ์์ ๋ฌถ๋ ์ผ์ด๋ค. Gmail๊ณผ
Yahoo๋ 2024-02๋ถํฐ ์ด๊ฑธ ๋ฐ์ ์ ์๊ฑด์ผ๋ก ๊ฑธ์๋ค.
SPF, DKIM, DMARC๊ฐ ๊ฐ๊ฐ ๋ณด๋ ๋๋ฉ์ธ
๋ฉ์ผ์๋ โ๋ณด๋ธ ์ฌ๋โ์ด ์ธ ๊ตฐ๋ฐ ์๋ค. ์์ ๋๋ฉ์ธ example.com์ผ๋ก ๊ตฌ์กฐ๋ง ๋ณด๋ฉด ์ด๋ ๋ค.
MAIL FROM:<bounce@bounce.example.com> โ SMTP ๋ดํฌ. SPF ๊ฐ ๋ณธ๋ค. ๋ฐ๋ ์ชฝ์ Return-Path ๋ก ๋จ๋๋ค
From: ์ธ์ฆ์ ์๋ฆผ <alerts@example.com> โ ํค๋. ์ฌ๋์ด ๋ณด๋ ์ฃผ์. DMARC ๊ฐ ์งํค๋ ๋๋ฉ์ธ
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=s1; ... โ DKIM ์ด ์ธ์ฆํ๋ ๋๋ฉ์ธ(d=)
SPF์์๋ ๋ฐ๋ ์๋ฒ๊ฐ MAIL FROM ๋๋ฉ์ธ์ SPF ๋ ์ฝ๋๋ฅผ ๋ณด๊ณ , ์ ์ํ IP๊ฐ ํ์ฉ ๋ชฉ๋ก์ ์๋์ง ํ์ธํ๋ค. SPF๋ HELO ์ด๋ฆ๋ ๊ฒ์ฌํ ์ ์์ง๋ง DMARC๋ MAIL FROM ๊ฒฐ๊ณผ๋ง ์ด๋ค.
DKIM์์๋ ๋ณด๋ด๋ ์ชฝ์ด ํค๋์ ๋ณธ๋ฌธ์ ๊ฐ์ธํค๋ก ์๋ช
ํด DKIM-Signature๋ฅผ ๋ถ์ธ๋ค. ๋ฐ๋ ์ชฝ์
s=(์
๋ ํฐ)์ d=(๋๋ฉ์ธ)๋ก s1._domainkey.example.com TXT์ ๊ณต๊ฐํค๋ฅผ ๊ฐ์ ธ์ ๊ฒ์ฆํ๋ค.
DMARC์์๋ ๋ฐ๋ ์ชฝ์ด ํค๋ From์ ๋๋ฉ์ธ์ผ๋ก _dmarc.example.com TXT๋ฅผ ์ฐพ๋๋ค. SPF๊ฐ pass์ด๊ณ ๊ทธ
๋๋ฉ์ธ์ด From๊ณผ ์ ๋ ฌ๋๊ฑฐ๋, DKIM์ด pass์ด๊ณ d=๊ฐ From๊ณผ ์ ๋ ฌ๋๋ฉด DMARC pass๋ค. ๋ ์ค ํ๋๋ฉด ๋๋ค.
์ธ ํ์ค์ ๋ฐ๋ก ๋์๋ค. DKIM์ RFC 6376(2011-09), SPF๋ RFC 7208(2014-04)์ด๋ค. DMARC๋ 2015-03์ RFC 7489๋ก ๋์๋๋ฐ, IETF ์์ ๋ฐ์ด ์๋ ๋ ๋ฆฝ ์ ์ถ์ด๋ผ Informational ๋ฌธ์์๋ค. 2026-05์ RFC 9989(DMARC, Standards Track), RFC 9990(์ง๊ณ ๋ณด๊ณ ), RFC 9991(์คํจ ๋ณด๊ณ )์ด ๋์ RFC 7489๋ฅผ ๋์ฒดํ๋ค.
์ ๋ ฌ(alignment)
RFC 9989์ ๋์ค๋ ์๋ค.
| ์ธ์ฆ๋ ๋๋ฉ์ธ | From ๋๋ฉ์ธ | ์ ๋ ฌ |
|---|---|---|
foo.example.com |
news.example.com |
relaxed: ์กฐ์ง ๋๋ฉ์ธ(example.com)์ด ๊ฐ๋ค |
news.example.com |
news.example.com |
strict: ์์ ํ ๊ฐ๋ค |
foo.example.net |
news.example.com |
์ ๋ ฌ ์ ๋จ |
์ ๋ ฌ์ด ์ ๋๋ฉด SPF์ DKIM์ด pass์ฌ๋ DMARC์๋ ์์ฉ์ด ์๋ค. ๋๊ตฌ๋ ์๊ธฐ ๋๋ฉ์ธ์ SPF๋ฅผ ๊ฑธ๊ณ pass๋ฅผ ๋ฐ์ ์ ์๊ณ , ์ด๋ ๋๋ฉ์ธ์ผ๋ก๋ DKIM ์๋ช ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ธฐ๋ณธ๊ฐ์ relaxed(adkim=r, aspf=r)๋ค. RFC 9989๋ ๊ฑฐ์ ๋ชจ๋ ๋๋ฉ์ธ ์์ ์์๊ฒ relaxed๋ก ์ถฉ๋ถํ๋ค๊ณ
์ ๋๋ค.
์กฐ์ง ๋๋ฉ์ธ์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋์๋ค. RFC 7489๋ Public Suffix List๋ฅผ ์ผ๊ณ , RFC 9989๋ DNS ํธ๋ฆฌ๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉฐ ๋ ์ฝ๋๋ฅผ ์ฐพ๋ โDNS Tree Walkโ๋ก ๋ฐ๊ฟจ๋ค. ๋ ๋ฐฉ์์ด ๋ค๋ฅธ ๋ต์ ๋ผ ์ ์๋๋ฐ, RFC 9989๋ strict ์ ๋ ฌ๊ณผ From ๋๋ฉ์ธ๋ง๋ค DMARC ๋ ์ฝ๋๋ฅผ ๋๋ฉด ์ด ์ฐจ์ด๋ฅผ ํผํ๋ค๊ณ ์ ๋๋ค.
์ ๋ฌ๋๋ฉด SPF๋ ๊นจ์ง๋ค
๋ฉ์ผ์ด ๋ค๋ฅธ ์ฃผ์๋ก ์ ๋ฌ๋๋ฉด ๋ค์ ์๋ฒ๋ ์ ๋ฌ ์๋ฒ์ IP์์ ๋ฉ์ผ์ ๋ฐ๋๋ค. ์ ๋ฌ ์๋ฒ๊ฐ MAIL FROM์
๋ฐ๊พธ์ง ์์ผ๋ฉด SPF๋ ์คํจํ๋ค. DKIM ์๋ช
์ ๋๊ฐ ์ด์๋จ๋๋ค. ๊ทธ๋์ RFC 9989๋ p=reject๋ฅผ ์ฐ๋
๋๋ฉ์ธ์ด SPF๋ง์ผ๋ก DMARC pass๋ฅผ ๋ฐ์์๋ ์ ๋๊ณ DKIM ์๋ช
์ ํด์ผ ํ๋ค(MUST)๊ณ ์ ๋๋ค. Google๋
SPF์ DKIM ์์ชฝ ์ ๋ ฌ์ ๊ถํ๋ฉฐ, ๋ ๋ค ์ ๋ ฌํ๋ ๊ฒ์ด ๋์ค์ ์๊ฑด์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ FAQ์ ์ ์๋ค.
๋ฐ์ก ์๋น์ค๋ฅผ ์ธ ๋
๋จผ์ ๊ทธ ์๋น์ค๊ฐ ์ด๋ค MAIL FROM๊ณผ d=๋ก ๋ณด๋ด๋์ง ํ์ธํ๋ค. ์๋น์ค ์์ ์ ๋๋ฉ์ธ์ ์ฐ๋ฉด From๊ณผ
์ ๋ ฌ๋์ง ์๋๋ค. Amazon SES ๋ฌธ์๋ก ์๋ฅผ ๋ ๋ค.
SES๋ ๊ธฐ๋ณธ์ผ๋ก amazonses.com์ ํ์ ๋๋ฉ์ธ์ MAIL FROM์ผ๋ก ์ด๋ค. SPF๋ ๊ทธ ๋๋ฉ์ธ์ผ๋ก passํ์ง๋ง
From(example.com)๊ณผ ์ ๋ ฌ๋์ง ์๋๋ค.
์ฌ์ฉ์ ์ง์ MAIL FROM์ ์ฐ๋ฉด MAIL FROM์ด bounce.example.com ๊ฐ์ ๋ด ์๋ธ๋๋ฉ์ธ์ด ๋๊ณ , relaxed
์ ๋ ฌ๋ก example.com๊ณผ ์ ๋ ฌ๋๋ค. ๊ฒ์ฆํ ๋๋ฉ์ธ์ ํ์ ๋๋ฉ์ธ์ด์ด์ผ ํ๊ณ , ๋ฉ์ผ์ ๋ณด๋ด๊ฑฐ๋ ๋ฐ๋ ๋ฐ
์ฐ์ง ์๋ ์ด๋ฆ์ด์ด์ผ ํ๋ค. MX๋ ์ ํํ ํ๋๋ง ๋๋ค.
Easy DKIM์ ์ผ๋ฉด SES๊ฐ ๋ด ๋๋ฉ์ธ(d=example.com)์ผ๋ก ์๋ช
ํ๋ค. ๊ธฐ๋ณธ 2048๋นํธ์ด๊ณ , ์ฝ์์ด ์ฃผ๋ CNAME
3๊ฐ๋ฅผ DNS์ ๋ฃ๋๋ค.
; ๋ฐ์ก์ฉ MAIL FROM ์๋ธ๋๋ฉ์ธ โ SPF ์ ๋ ฌ
bounce.example.com. MX 10 feedback-smtp.us-east-1.amazonses.com.
bounce.example.com. TXT "v=spf1 include:amazonses.com ~all"
; Easy DKIM โ ์ฝ์์ 'Publish DNS records' ๊ฐ ๊ทธ๋๋ก (ํ ํฐยทํธ์คํ
์กด์ ๋ฆฌ์ ยท๊ณ์ ๋ง๋ค ๋ค๋ฅด๋ค)
<ํ ํฐ1>._domainkey.example.com. CNAME <ํ ํฐ1>.<์ฝ์์ ํ์๋ ํธ์คํ
์กด>.
; (๊ฐ์ ํ์์ผ๋ก 2๊ฐ ๋)
; DMARC โ ์ฒ์์ ๊ฐ์๋ง
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
์ด ๊ตฌ์ฑ์์๋ example.com์ SPF์ include:amazonses.com์ด ํ์ ์๋ค. SPF๋ MAIL FROM
๋๋ฉ์ธ(bounce.example.com)์ ๋ ์ฝ๋๋ฅผ ๋ณด๊ธฐ ๋๋ฌธ์ด๋ค. apex SPF์ ์๋น์ค๋ง๋ค include๋ฅผ ์์ผ๋ฉด ๋ค์
๋์ฌ 10ํ ํ๋์ ๊ฐ๊น์์ง๋ค.
SES์ โMX ์คํจ ์ ๋์โ์ด โ๊ธฐ๋ณธ MAIL FROM ์ฌ์ฉโ์ด๋ฉด MX ๋ ์ฝ๋๊ฐ ์ฌ๋ผ์ ธ๋ ๋ฉ์ผ์ ๊ณ์ ๋๊ฐ์ง๋ง,
MAIL FROM์ด amazonses.com์ผ๋ก ๋์๊ฐ SPF ์ ๋ ฌ์ด ์กฐ์ฉํ ๊นจ์ง๋ค. ์ด๋ DMARC๊ฐ ๋ฒํฐ๋ ค๋ฉด DKIM์ด ์ ๋ ฌ๋ผ
์์ด์ผ ํ๋ค. SPF์ DKIM์ ๋ ๋ค ๋ง์ถฐ ๋๋ ์ด์ ๋ค.
DKIM ํค๋ฅผ CNAME์ผ๋ก ์๋น์ค์ ๋งก๊ธฐ๋ ๋ฐฉ์์ ๋ค๋ฅธ ๊ณณ์์๋ ์ด๋ค. Microsoft 365๋ selector1๊ณผ
selector2 ๋ CNAME์ ๊ฑธ์ด ๋๊ณ , ํ๋๋ก ์๋ช
ํ๋ค๊ฐ ํค๋ฅผ ๊ต์ฒดํ๋ฉด ๋ค๋ฅธ ์ชฝ์ผ๋ก
๋์ด๊ฐ๋ค(Microsoft Learn). 2026-10-15์ microsoft.com์ด ๊ทธ ๋ชจ์์ด๋ค.
dig +noall +answer TXT selector2._domainkey.microsoft.com
selector2._domainkey.microsoft.com. 3600 IN CNAME selector2-microsoft-com._domainkey.microsoft.onmicrosoft.com.
selector2-microsoft-com._domainkey.microsoft.onmicrosoft.com. 3600 IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPkb8bu8RGWeJGk3hโฆ"
selector1 ์ชฝ CNAME ๋์์๋ ์ด๋ TXT๊ฐ ์์๋ค. ์ง๊ธ์ ์ฐ์ง ์๋ ์ชฝ ์
๋ ํฐ๋ก ๋ณด์ธ๋ค.
dig๋ก ํ์ธํ๊ธฐ
DMARC
dig +short TXT _dmarc.example.com
"v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s"
example.com์ ๋ฉ์ผ์ ์ฐ์ง ์๋ ๋๋ฉ์ธ์ ๊ตฌ์ฑ์ด๋ค. strict ์ ๋ ฌ์ reject๋ค. ๋ณด๊ณ ์๋ฅผ ๋ฐ๋
๋๋ฉ์ธ์ด๋ผ๋ฉด rua๊ฐ ๋ณด์ธ๋ค.
dig +short TXT _dmarc.cloudflare.com
"v=DMARC1; p=reject; sp=reject; adkim=r; aspf=r; pct=100; rua=mailto:a1c47f179bc04efd8ee4dcd4d85dfc65@dmarc-reports.cloudflare.net,mailto:rua@cloudflare.com"
๋ณด๊ณ ์๋ฅผ ๋ ๊ณณ์ผ๋ก ๋ฐ๋๋ค. ์์ ์ฃผ์๋ Cloudflare์ dmarc-reports.cloudflare.net ๋๋ฉ์ธ์ด๋ค.
pct=100์ RFC 7489์ ํ๊ทธ๋ก, RFC 9989์์๋ ๋น ์ก๋ค.
v=DMARC1์ด ๋งจ ์์ด์ด์ผ ํ๋ค. ์๋๋ฉด ๋ ์ฝ๋ ์ ์ฒด๊ฐ ๋ฌด์๋๋ค_dmarc์ DMARC ๋ ์ฝ๋๊ฐ ๋ ๊ฐ๋ฉด ๋ ๋ค ๋ฒ๋ ค์ง๋ค(RFC 9989 ยง4.10). ์๋น์ค๋ฅผ ๋ถ์ด๋ฉด์ ์ ๋ ์ฝ๋๋ฅผ ๋ง๋ค์ง ๋ง๊ณ ๊ธฐ์กด ๋ ์ฝ๋๋ฅผ ๊ณ ์น๋ค- From์ด
alerts.example.com์ธ๋ฐ ๊ทธ ์ด๋ฆ์ ๋ ์ฝ๋๊ฐ ์์ผ๋ฉด ์์ ์๋ ์์๋ก ์ฌ๋ผ๊ฐ_dmarc.example.com์ ์ด๋ค. ์ด๋ ํ์ ๋๋ฉ์ธ์๋sp=(์์ผ๋ฉดp=)๊ฐ, DNS์ ์กด์ฌํ์ง ์๋ ์ด๋ฆ์๋np=๊ฐ ์ ์ฉ๋๋ค +short๋ ์๋ต ์ฝ๋๋ฅผ ์จ๊ธด๋ค. NXDOMAIN์ด๋ SERVFAIL์+short๋ฅผ ๋นผ๊ณstatus:๋ก ๋ณธ๋ค
SPF
dig +short TXT example.com
"v=spf1 -all"
"_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9"
TXT๋ ์ฌ๋ฌ ๊ฐ์ฌ๋ ๋์ง๋ง v=spf1๋ก ์์ํ๋ ๊ฒ์ ํ๋์ฌ์ผ ํ๋ค. ๋ ์ด์์ด๋ฉด permerror๋ค(RFC 7208
ยง4.5). ๋ ๋ฒ์งธ ์ค์ ๋ค๋ฅธ ์ฉ๋์ TXT๋ค.
include, a, mx, ptr, exists, redirect๋ ํ๊ฐํ ๋ DNS ์กฐํ๋ฅผ ์ผ์ผํค๊ณ , include ์์
๊ฒ๊น์ง ํฉ์ณ 10ํ๋ฅผ ๋์ผ๋ฉด permerror๋ค(RFC 7208 ยง4.6.4). ์กฐํ ๊ฒฐ๊ณผ๊ฐ ๋น๋ โvoid lookupโ์ 2ํ๋ก
์ ํํ๋ผ๊ณ ๊ถํ๋ค. ์ธ์ด ๋ณด๋ ์คํฌ๋ฆฝํธ๋ค.
#!/bin/bash
# spf-count.sh โ SPF ํ๊ฐ์ DNS ์กฐํ๊ฐ ๋๋ ํญ๋ชฉ ์๋ฅผ ์ผ๋ค (RFC 7208 ํ๋ 10)
# ์ฌ์ฉ๋ฒ: ./spf-count.sh example.com
count() {
local rec t n=0
# 255์๋ฅผ ๋๋ TXT ๋ ์ฌ๋ฌ ๋ฌธ์์ด๋ก ๋๋์ด ์จ๋ค โ ๊ณต๋ฐฑ ์์ด ์ด์ด ๋ถ์ธ๋ค
rec=$(dig +short TXT "$1" | sed 's/" "//g; s/"//g' | grep -i '^v=spf1 ')
for t in $rec; do
case "${t#[-+~?]}" in
include:*) n=$((n + 1 + $(count "${t#*:}"))) ;;
redirect=*) n=$((n + 1 + $(count "${t#*=}"))) ;;
a|a:*|a/*|mx|mx:*|mx/*|ptr|ptr:*|exists:*) n=$((n + 1)) ;;
esac
done
echo "$n"
}
echo "$1: $(count "$1")"
$ ./spf-count.sh cloudflare.com
cloudflare.com: 7
$ ./spf-count.sh example.com
example.com: 0
cloudflare.com์ include 6๊ฐ์, ๊ทธ์ค ํ include ์์ exists 1๊ฐ๋ก 7ํ๋ค. ํ๋๊น์ง 3ํ ๋จ์๋ค.
mx์๋ ๋ณ๋ ํ๋๋ ์๋ค. ๊ฐ๋ฆฌํค๋ ๋ฉ์ผ ํธ์คํธ๋ค์ ์ฃผ์(AยทAAAA) ์กฐํ๊ฐ 10๊ฐ๋ฅผ ๋์ผ๋ฉด ๊ทธ mx๋
permerror๋ค.
DKIM
์
๋ ํฐ ์ด๋ฆ์ ๋ฐ์ ๋ฉ์ผ์ DKIM-Signature ํค๋ s=์ ์๋ค. Google Workspace์ ๊ธฐ๋ณธ ์
๋ ํฐ๋
google์ด๋ค.
dig +short TXT selector1._domainkey.example.com
"v=DKIM1; p="
example.com์ *._domainkey.example.com์ ์์ผ๋์นด๋๋ก ์ด ๋ ์ฝ๋๋ฅผ ๋๋ค. ์ด๋ ์
๋ ํฐ๋ฅผ ๋ฌผ์ด๋
๊ฐ๋ค. RFC 6376์์ ๋น p=๋ ํ๊ธฐ๋ ํค๋ผ๋ ๋ป์ด๋ผ, ์ด ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ DKIM ์๋ช
์ ๋ชจ๋ ์คํจํ๋ค.
ํค ๊ธธ์ด๋ ์ด๋ ๊ฒ ํ์ธํ๋ค. ์์ microsoft.com ์
๋ ํฐ๋ค.
dig +short TXT selector2._domainkey.microsoft.com | sed 's/" "//g; s/"//g' | tail -1 \
| sed 's/.*p=//; s/;.*//' | base64 -d | openssl pkey -pubin -inform DER -noout -text | head -1
Public-Key: (1024 bit)
RFC 8301(2018-01)์ DKIM ์๋ช ์ rsa-sha1์ ๊ธ์งํ๊ณ , ์๋ช ์๊ฐ RSA 1024๋นํธ ์ด์์ ์จ์ผ ํ๋ฉฐ(MUST) 2048๋นํธ ์ด์์ ๊ถํ๋ค(SHOULD). ์๋ก ๋ง๋ ๋ค๋ฉด 2048๋นํธ๋ก ํ๋ค. 2048๋นํธ ๊ณต๊ฐํค๋ base64๋ก 392์๋ผ TXT ํ ๋ฌธ์์ด(255์)์ ๋ค์ด๊ฐ์ง ์๋๋ค. ์ฌ๋ฌ ๋ฌธ์์ด๋ก ๋๋ ๋ฃ๊ณ , ๊ฒ์ฆํ๋ ์ชฝ์ ๊ณต๋ฐฑ ์์ด ์ด์ด ๋ถ์ธ๋ค(RFC 6376 ยง3.6.2.2).
MX์ PTR
dig +short MX example.com
0 .
์ฐ์ ์์ 0์ ์ด๋ฆ์ด .์ธ MX๋ โnull MXโ(RFC 7505)๋ค. ์ด ๋๋ฉ์ธ์ ๋ฉ์ผ์ ๋ฐ์ง ์๋๋ค๋ ํ์๋ค.
์ง์ ์ด์ํ๋ ์๋ฒ์์ ๋ณด๋ธ๋ค๋ฉด PTR(์ญ๋ฐฉํฅ DNS)์ ๋ณธ๋ค. Gmail๊ณผ Yahoo๋ ๋ชจ๋ ๋ฐ์ ์์๊ฒ ๋ฐ์ก IP์ ์ ๋ฐฉํฅยท์ญ๋ฐฉํฅ DNS๊ฐ ์ ํจํ ๊ฒ์ ์๊ตฌํ๋ค. ์ญ๋ฐฉํฅ ์ด๋ฆ์ ๋ค์ ์ ๋ฐฉํฅ์ผ๋ก ์ฐพ์ผ๋ฉด ๊ฐ์ IP๊ฐ ๋์์ผ ํ๋ค.
dig -x 209.85.220.41 +short
dig +short A mail-sor-f41.google.com
mail-sor-f41.google.com.
209.85.220.41
๋ฐ๊พผ ์งํ์๋
๋ ์ฝ๋๋ฅผ ๋ฐ๊พผ ์งํ๋ผ๋ฉด ๋ฆฌ์กธ๋ฒ๋ง๋ค ์ ๊ฐ์ด TTL ๋์ ๋จ๋๋ค. certdesk DNS ์ ํ ํ์ธ์
_dmarc TXT ๋น ๋ฅธ ์
๋ ฅ์ ์
๋ ฅ๋์ ์ด๋ฆ ์์ _dmarc.๋ฅผ ๋ถ์ฌ TXT๋ก ์กฐํํ๊ณ , ๊ถํ ๋ค์์๋ฒ์ ๊ตญ๋ด
ํต์ 3์ฌ, ๊ณต์ฉ DNS์ ์๋ต์ ๋๋ํ ๋ณด์ฌ ์ค๋ค. MX์ ์
๋ ํฐ._domainkey TXT๋ ๊ฐ์ ํ๋ฉด์์ ๋ณธ๋ค.
์ ํ ์ง์ฐ ์์ฒด๋ DNS ์ ํ ํ์ธ์ ๋ฐ๋ก ์ ์๋ค.
๋ฐ์ ๋ฉ์ผ์์ ๊ฒฐ๊ณผ ๋ณด๊ธฐ
DNS๊ฐ ๋ง์๋ ์ค์ ๋ฉ์ผ์ด ํต๊ณผํ๋์ง๋ ๋ฐ์ ๋ฉ์ผ๋ก ํ์ธํ๋ค. Gmail ์น์์๋ ๋ฉ์ผ์ ์ด๊ณ ๋ต์ฅ ์
๋๋ณด๊ธฐ(โฎ) โ ์๋ณธ ๋ณด๊ธฐ(Show original)๋ฅผ ๋๋ฅด๋ฉด ์ ์ฒด ํค๋๊ฐ ์ด๋ฆฐ๋ค. ์์ ์๋ฒ๊ฐ ์ธ์ฆ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ๋
ํ์ค ํค๋๋ Authentication-Results(RFC 8601)๋ค. ํ์์ ์ด๋ ๋ค(๊ฐ์ ์์).
Authentication-Results: mx.receiver.example;
dkim=pass header.d=example.com;
spf=pass smtp.mailfrom=bounce.example.com;
dmarc=pass header.from=example.com
dkim=์ header.d๊ฐ ์๋ช
๋๋ฉ์ธ์ด๋ค. header.from๊ณผ ์ ๋ ฌ๋๋์ง ๋ณธ๋ค. spf=์ smtp.mailfrom์
MAIL FROM ๋๋ฉ์ธ์ด๋ค. ์ฌ๊ธฐ์ ์๋น์ค ๋๋ฉ์ธ์ด ๋ณด์ด๋ฉด SPF ์ ๋ ฌ์ ์ ๋ ๊ฒ์ด๋ค. ์ต์ข
ํ์ ์ dmarc=๋ค.
p=none์์ p=reject๊น์ง
RFC 9989 5.1์ ์ ๋๋ฉ์ธ ์์ ์๊ฐ ๋ฐ์ ์์๋ฅผ ์ด๋ ๊ฒ ์ ๋๋ค.
- SPF์ DKIM์ From๊ณผ ์ ๋ ฌ๋๊ฒ ๋ง์ถ๋ค
- ์ง๊ณ ๋ณด๊ณ ์๋ฅผ ๋ฐ์ ์ฃผ์๋ฅผ ๋ง๋ ๋ค
p=none๊ณผrua๋ก DMARC ๋ ์ฝ๋๋ฅผ ๊ณต๊ฐํ๋ค. ์ด ์ํ๋ฅผ ๊ฐ์ ๋ชจ๋(Monitoring Mode)๋ผ๊ณ ๋ถ๋ฅธ๋ค- ๋ณด๊ณ ์๋ก ๋ชจ๋ ๋ฐ์ก์์ ํ์ธํ๋ค. ์ ๋ ฌ์ด ์ ๋ ์ ์ ๋ฉ์ผ์ ๊ฐ์ ๋จ๊ณ(quarantine, reject)๋ก ๊ฐ๊ธฐ ์ ์ ๊ณ ์ณ์ผ ํ๋ค(MUST)
- ๊ฐ์ ๋จ๊ณ๋ก ๊ฐ์ง ์ ํ๋ค. RFC๋ ๋ฉ์ผ์ ๋ณด๋ด๋ ์ฃผ๊ธฐ์ ๋ฐ๋ผ ํ์ ํ๊ธฐ๊น์ง ์ฌ๋ฌ ๋ฌ์ด ๊ฑธ๋ฆด ์ ์๋ค๊ณ ์ ๋๋ค
RFC 9989์์ ๋ฐ๋ ํ๊ทธ
| ํ๊ทธ | ๋ป | ๊ธฐ๋ณธ๊ฐยท๋น๊ณ |
|---|---|---|
v |
DMARC1, ๋งจ ์ |
ํ์ |
p |
noneยทquarantineยทreject |
์์ผ๋ฉด none์ผ๋ก ๋ณธ๋ค |
sp |
์กด์ฌํ๋ ํ์ ๋๋ฉ์ธ์ ์ ์ฑ | ์์ผ๋ฉด p |
np |
์กด์ฌํ์ง ์๋ ํ์ ๋๋ฉ์ธ์ ์ ์ฑ | ์ ๊ท. ์์ผ๋ฉด sp, ๊ทธ๊ฒ๋ ์์ผ๋ฉด p |
adkimยทaspf |
DKIMยทSPF ์ ๋ ฌ r(relaxed)ยทs(strict) |
r |
rua |
์ง๊ณ ๋ณด๊ณ ์ ๋ฐ์ ์ฃผ์ | ์์ผ๋ฉด ๋ณด๊ณ ์๋ฅผ ๋ณด๋ด์ง ์๋๋ค |
rufยทfo |
๋ฉ์ผ ๋จ์ ์คํจ ๋ณด๊ณ ์์ ๊ทธ ์กฐ๊ฑด | |
t |
y๋ฉด ์ ์ฑ
์ ํ ๋จ๊ณ ๋ฎ์ถฐ ์ ์ฉ(์ํ) |
์ ๊ท, pct ๋์ฒด. ๊ธฐ๋ณธ n |
psd |
๊ณต์ฉ ์ ๋ฏธ์ฌ ๋๋ฉ์ธ ์ฌ๋ถ | ์ ๊ท, ๊ธฐ๋ณธ u |
pctยทrfยทri |
RFC 7489์ ๋น์จยท๋ณด๊ณ ํ์ยท๋ณด๊ณ ์ฃผ๊ธฐ | RFC 9989์์ ์ญ์ (historic) |
pct๊ฐ ๋น ์ง ์ด์ ๋ RFC์ ์๋ค. 0๊ณผ 100์ด ์๋ ๊ฐ์ ๊ตฌํ๋ง๋ค ์ ๊ฐ๊ฐ ์ ์ฉ๋๊ณ , ์ค์ ๋ก ์ธ๋ชจ๊ฐ ์๋
๊ฒ์ pct=0์ด์๋ค. ๊ทธ๋์ ๊ทธ ์ญํ ๋ง t=y๋ก ๋จ๊ฒผ๋ค.
๋จ๊ณ๋ณ ๋ ์ฝ๋
| ๋จ๊ณ | ๋ ์ฝ๋ | ํ์ธํ ๊ฒ |
|---|---|---|
| ๊ฐ์ | v=DMARC1; p=none; rua=mailto:dmarc@example.com |
๋ณด๊ณ ์์ ๋์จ ๋ชจ๋ ๋ฐ์ก์์ด ์ ๋ ฌ๋๋์ง |
| ์ํ | v=DMARC1; p=quarantine; t=y; pct=0; rua=mailto:dmarc@example.com |
์ค์ ์ฒ๋ฆฌ๋ none. ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ๋ฑ ์ค๊ณ๋ฅผ ๊ฑฐ์น๋ ํ๋ฆ์ ๋ณด๊ณ ์๋ก ํ์ (RFC 9989 ๋ถ๋ก A.6) |
| ๊ฒฉ๋ฆฌ | v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com |
์คํธํจ์ผ๋ก ๊ฐ ์ ์ ๋ฉ์ผ์ด ์๋์ง |
| ๊ฑฐ๋ถ | v=DMARC1; p=reject; rua=mailto:dmarc@example.com |
์ํ ๋จ๊ณ์ t=y์ pct=0์ ํจ๊ป ์ ์ ๋ฐ๋ ์ด์ ๊ฐ ์๋ค. RFC 7489๋ง ๊ตฌํํ ์์ ์๋ t๋ฅผ ๋ชจ๋ฅด๋
ํ๊ทธ๋ก ๋ฌด์ํ๊ณ (7489๋ ๋ชจ๋ฅด๋ ํ๊ทธ๋ ๋ฌด์ํ๊ฒ ํ๋ค), RFC 9989์๋ pct๋ฅผ ์ฒ๋ฆฌํ๋ ๊ท์น์ด
์๋ค(๋ ์ง์คํธ๋ฆฌ์์ historic). ๋ ๋ค โํ ๋จ๊ณ ๋ฎ์ถฐ ์ ์ฉโ์ด๋ผ๋ ๊ฐ์ ๋ป์ด๋ค. 7489์ pct=0์
quarantine์ ์ผ๋ฐ ๋ถ๋ฅ๋ก, reject๋ฅผ quarantine์ผ๋ก ๋ฎ์ถ๋ค. ๋ ์ข
๋ฅ์ ์์ ์๊ฐ ์์ธ ์ง๊ธ์ ํจ๊ป ์ ์ด์ผ
๋ป์ด ๊ณ ๋ฅด๊ฒ ์ ๋ฌ๋๋ค. pct=10 ๊ฐ์ ์ค๊ฐ ๊ฐ์ ์ฐ์ง ์๋๋ค.
reject ์ ์ (RFC 9989 7.4์ )
- ์ฌ๋์ด ์ฐ๋ ๋ฉ์ผ ๋๋ฉ์ธ, ํนํ ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๊ธ์ ์ฐ๋ ๋๋ฉ์ธ์
p=reject๋ฅผ ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค(SHOULD NOT). ๊ทธ๋๋ ์ฐ๋ ค๋ฉดp=none์ ์ต์ ํ ๋ฌ, ์ด์ด์p=quarantine์ ๊ฐ์ ๊ธฐ๊ฐ ๋๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๋ผ๊ณ ์ ๋๋ค p=reject๋๋ฉ์ธ์ DKIM ์๋ช ์ด ํ์๋ค(์์ ์ ๋ฌ ๋ฌธ์ )- ๋ฐ๋ ์ชฝ๋
p=reject๋ง ๋ณด๊ณ ๊ฑฐ๋ถํด์๋ ์ ๋๊ณ , ๋ค๋ฅธ ํ๋จ ๊ทผ๊ฑฐ๊ฐ ์์ผ๋ฉด quarantine์ฒ๋ผ ๋ค๋ค์ผ ํ๋ค(MUST NOT).reject๊ฐ ๊ณง โ๋ฐ๋์ ๋ฐ์กโ์ ์๋๋ค
์๋ฆผ์ด๋ ์ด์ ๋ฉ์ผ์ ์ ์ฉ ์๋ธ๋๋ฉ์ธ์ผ๋ก ๋๋๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํผํ๋ค. alerts.example.com์
From์ผ๋ก ์ฐ๊ณ _dmarc.alerts.example.com์ ๋ฐ๋ก ๋ ์ฝ๋๋ฅผ ๋๋ฉด, ์ฌ๋์ด ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ์ธ ์ผ์ด ์๊ณ
๋ฐ์ก์์ด ์ ํด์ ธ ์์ด ๋ณด๊ณ ์ ํ์ธ์ด ์งง๋ค. ์ฃผ ๋๋ฉ์ธ์ ์ ์๋๋ก ๋จ๊ณ๋ฅผ ์ฌ๋ฆฐ๋ค. ๋ค๋ง Gmail์ ๋๋
๋ฐ์ ์ ๊ณ์ฐ์ ์ฃผ ๋๋ฉ์ธ ๋จ์๋ก ํฉ์ฐํ๋ฏ๋ก, ๋๋๋ค๊ณ 5,000ํต ๊ธฐ์ค์ ํผํ์ง๋ ๋ชปํ๋ค.
rua ๋ณด๊ณ ์ ์ฝ๊ธฐ
์์ ์๋ ํ๋ฃจ ๋จ์(๋๋ ๋ ์์ฃผ)๋ก ์ง๊ณ ๋ณด๊ณ ์๋ฅผ rua ์ฃผ์์ ๋ณด๋ธ๋ค(RFC 9990). ํ์์ ์ด๋ ๋ค.
- XML ํ์ผ์ gzip์ผ๋ก ์์ถํด(๊ถ์ฅ) ์ฒจ๋ถํ๋ค. ํ์ผ ์ด๋ฆ์
์์ ์!์ ์ฑ ๋๋ฉ์ธ!์์!๋.xml.gz(์๊ฐ์ ์ ๋์ค ์ด) - ์ ๋ชฉ์
Report Domain: example.com Submitter: ์์ ์๋๋ฉ์ธ๋ชจ์์ด๋ค - ๋ณด๊ณ ์ ๋ฉ์ผ ์์ฒด๋ DMARC๋ฅผ ํต๊ณผํด์ผ ํ๋ค
RFC 9990 ๋ถ๋ก B์ ์์ ๋ณด๊ณ ์๋ฅผ ์ค์๋ค.
<feedback xmlns="urn:ietf:params:xml:ns:dmarc-2.0">
<report_metadata>
<org_name>Sample Reporter</org_name>
<date_range><begin>302832000</begin><end>302918399</end></date_range>
</report_metadata>
<policy_published>
<domain>example.com</domain>
<p>quarantine</p>
<testing>n</testing>
<discovery_method>treewalk</discovery_method>
</policy_published>
<record>
<row>
<source_ip>192.0.2.123</source_ip>
<count>123</count>
<policy_evaluated>
<disposition>pass</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<envelope_from>example.com</envelope_from>
<header_from>example.com</header_from>
</identifiers>
<auth_results>
<dkim><domain>example.com</domain><result>pass</result><selector>abc123</selector></dkim>
<spf><domain>example.com</domain><result>fail</result></spf>
</auth_results>
</record>
</feedback>
| ์์ | ์ฝ๋ ๋ฒ |
|---|---|
row/source_ipยทcount |
์ด IP์์ ์จ ๋ฉ์ผ ์. ํ record๊ฐ ๋ฐ์ก์ ํ๋์ ๋ฌถ์์ด๋ค |
policy_evaluated/dkimยทspf |
์ ๋ ฌ๊น์ง ๋ฐ์ง DMARC ๊ฒฐ๊ณผ |
auth_results |
SPFยทDKIM ์์ฒด ๊ฒฐ๊ณผ์ ๊ทธ ๋๋ฉ์ธยท์ ๋ ํฐ |
disposition |
์์ ์๊ฐ ์ค์ ๋ก ํ ์ฒ๋ฆฌ |
identifiers |
From ๋๋ฉ์ธ๊ณผ ๋ดํฌ ๋ฐ์ ์ ๋๋ฉ์ธ |
์์๋ SPF๊ฐ ์คํจํ์ง๋ง DKIM์ด ์ ๋ ฌ๋ ์ฑ ํต๊ณผํด DMARC๋ ํต๊ณผํ ๊ฒฝ์ฐ๋ค. ๋ฐ๋๋ก auth_results์ SPF๊ฐ
pass์ธ๋ฐ ๋๋ฉ์ธ์ด amazonses.com์ฒ๋ผ ๋จ์ ๊ฒ์ด๋ฉด policy_evaluated์ spf๋ fail์ด๋ค. ์์์ ๋ณธ
โํต๊ณผํ์ง๋ง ์ ๋ ฌ ์ ๋จโ์ด๋ค.
์ฝ๋ ์์๋ ๋จ์ํ๋ค. source_ip๋ฅผ ๋ชจ์ ์ฐ๋ฆฌ ๋ฐ์ก์ ๋ชฉ๋ก(๋ฉ์ผ ์๋ฒ, ๋ฐ์ก ์๋น์ค, ์
๋ฌด ๋๊ตฌ)๊ณผ
๋์กฐํ๋ค. ์ฐ๋ฆฌ ๊ฒ์ธ๋ฐ ์คํจํ๋ฉด ์ ๋ ฌ์ ๊ณ ์น๊ณ , ๋ชจ๋ฅด๋ IP๊ฐ SPF์ DKIM ๋ชจ๋ ์คํจํ๋ฉด ์์กฐ์ด๊ฑฐ๋ ์๊ณ
์๋ ๋ฐ์ก์์ด๋ค. ๋ฐ๋ ์ชฝ ๊ตฌํ์ ๋ฐ๋ผ RFC 7489 ์์ ํ์(๋ค์์คํ์ด์ค ์์, pct ๋ฑ)์ด ์ฌ ์๋ ์๋ค.
RFC 9989๋ ์ฌ๋์ด ์ฝ๊ธฐ๋ณด๋ค ๊ธฐ๊ณ๋ก ์ฒ๋ฆฌํ๋ผ๊ณ ๊ถํ๋ค.
๋ค๋ฅธ ๋๋ฉ์ธ์ ์ฃผ์๋ก ๋ณด๊ณ ์๋ฅผ ๋ฐ์ผ๋ ค๋ฉด ํ์ธ ๋ ์ฝ๋๊ฐ ์์ด์ผ ํ๋ค. rua ์ฃผ์์ ์กฐ์ง ๋๋ฉ์ธ์ด ๋ค๋ฅด๋ฉด
์์ ์๋ example.com._report._dmarc.<๋ณด๊ณ ์ ๋ฐ๋ ๋๋ฉ์ธ> TXT์ v=DMARC1์ด ์๋์ง ํ์ธํ๊ณ ,
์์ผ๋ฉด ๋ณด๋ด์ง ์๋๋ค(RFC 9990 4์ ). ๋ณด๊ณ ์๋ฅผ ๋์ ๋ฐ๋ ์ชฝ์ด ์ด ๋ ์ฝ๋๋ฅผ ์๊ธฐ ๋๋ฉ์ธ์ ๋ฌ์ผ ํ๋ค.
์คํจ ๋ณด๊ณ ์(ruf)์๋ ๋ฉ์ผ ๋จ์๋ก ๋ด์ฉ ์ผ๋ถ๊ฐ ๋ด๊ธธ ์ ์๋ค. RFC 9989๋ ๊ฐ์ธ์ ๋ณด ๋ฌธ์ ๋ก ๋๋ถ๋ถ์
์์ ์๊ฐ ์คํจ ๋ณด๊ณ ์๋ฅผ ๋ณด๋ด์ง ์๋๋ค๊ณ ์ ๋๋ค. ๊ธฐ๋๋ rua์ ๋๋ค.
Gmail, Yahoo, Outlook.com ๋ฐ์ ์ ์๊ฑด
| ์๊ฑด | Gmail ๋ชจ๋ ๋ฐ์ ์ | Gmail ํ๋ฃจ 5,000ํต ์ด์ | Yahoo ๋๋ ๋ฐ์ ์ | Outlook.com ํ๋ฃจ 5,000ํต ์ด๊ณผ |
|---|---|---|---|---|
| SPFยทDKIM | ๋ ์ค ํ๋ | ๋ ๋ค | ๋ ๋ค | ๋ ๋ค ํต๊ณผ |
| DMARC | - | ๋ ์ฝ๋ ํ์(p=none ๊ฐ๋ฅ) |
p=none ์ด์, DMARC ํต๊ณผ |
p=none ์ด์ |
| From ์ ๋ ฌ | - | SPF ๋๋ DKIM๊ณผ | SPF ๋๋ DKIM๊ณผ(relaxed ๊ฐ๋ฅ) | SPF ๋๋ DKIM๊ณผ(๋ ๋ค ๊ถ์ฅ) |
| ์ ยท์ญ๋ฐฉํฅ DNS | ํ์ | ํ์ | ํ์ | - |
| TLS | ํ์ | ํ์ | - | - |
| ์คํธ ์ ๊ณ ์จ | 0.3% ๋ฏธ๋ง(Postmaster Tools) | 0.3% ๋ฏธ๋ง | 0.3% ๋ฏธ๋ง | - |
| ์์ ๊ฑฐ๋ถ | - | ๋ง์ผํ ยท๊ตฌ๋ ๋ฉ์ผ์ ์ํด๋ฆญ | ์ํด๋ฆญ(RFC 8058 POST ๊ถ์ฅ), 2์ผ ์์ ์ฒ๋ฆฌ | ์ฌ์ด ์์ ๊ฑฐ๋ถ(๊ถ์ฅ ์ฌํญ) |
Gmail์ ๋๋ ๋ฐ์ ์๋ 24์๊ฐ์ ๊ฐ์ธ Gmail ๊ณ์ ์ผ๋ก 5,000ํต ๊ฐ๊น์ด ์ด์ ๋ณด๋ด๋ ๋ฐ์ ์๋ค. ๊ฐ์ ์ฃผ ๋๋ฉ์ธ์์ ๋ณด๋ธ ๋ฉ์ผ์ ํฉ์ฐํ๊ณ , ํ ๋ฒ ํด๋น๋๋ฉด ์๊ตฌํ ๋๋ ๋ฐ์ ์๋ก ๋ณธ๋ค. ์๊ฑด์ ๊ฐ์ธ Gmail ๊ณ์ ์ผ๋ก ๋ณด๋ด๋ ๋ฉ์ผ์ ์ ์ฉ๋๊ณ , Google Workspace ๊ณ์ ์ผ๋ก ๋ณด๋ด๋ ๋ฉ์ผ์๋ ์ ์ฉ๋์ง ์๋๋ค.
Gmail์ 2024-02์ ์๊ฑด ์ํ์ ์์ํ๋ค. ์์ ๊ฑฐ๋ถ ๋งํฌ๋ฅผ ์ด๋ฏธ ๋ฃ๋ ๋ฐ์ ์๋ ์ํด๋ฆญ ์์ ๊ฑฐ๋ถ๋ฅผ
2024-06-01๊น์ง ๊ฐ์ถฐ์ผ ํ๋ค. 2025-11๋ถํฐ๋ ์๊ฑด์ ๋ชป ์ฑ์ด ๋ฉ์ผ์ ์์ ๊ฑฐ๋ถ(4.7.x)์ ์๊ตฌ
๊ฑฐ๋ถ(5.7.x)๋ฅผ ๋๋ฆฌ๊ณ ์๋ค. ๋ฐ์ก ์ฝ๋๊ฐ ์์ธ์ ๊ฐ๋ฆฌํจ๋ค. FAQ์ ์๋ก 4.7.32๋ From์ด SPFยทDKIM ์ด๋
์ชฝ๊ณผ๋ ์ ๋ ฌ๋์ง ์์ ๊ฒฝ์ฐ, 4.7.23๊ณผ 5.7.25๋ PTR์ด ์๊ฑฐ๋ ์ ๋ฐฉํฅ๊ณผ ๋ง์ง ์๋ ๊ฒฝ์ฐ๋ค.
Yahoo๋ 2024-02์ ์ํํ๋ค. ๋ชจ๋ ๋ฐ์ ์์๊ฒ๋ SPF ๋๋ DKIM, ์ ยท์ญ๋ฐฉํฅ DNS, ์คํธ๋ฅ 0.3% ๋ฏธ๋ง, RFC 5321ยท5322 ์ค์๊ฐ ํ์ํ๋ค.
Outlook.com(hotmail.com, live.com, outlook.com ์๋น์ ์๋น์ค)์ 2025-05-05์ ํ๋ฃจ 5,000ํต ๋๊ฒ
๋ณด๋ด๋ ๋๋ฉ์ธ์ ๋์์ผ๋ก ์ํํ๋ค. 2025-04-29์ ๊ฐฑ์ ๋ ๊ณต์ง๋ ๋ฏธ์ถฉ์กฑ ๋ฉ์ผ์
550; 5.7.515 Access denied, sending domain [SendingDomain] does not meet the required authentication level.๋ก ๊ฑฐ๋ถํ๋ค๊ณ ์ ๋๋ค. ๊ฐ์ ๊ธ์ ์ ํฌํจ์ผ๋ก ๋ณด๋ธ๋ค๋ ์ด์
๋ฌธ๋จ๋ ๋จ์ ์๋ค.
์๋ฆผ ๋ฉ์ผ์ด 5,000ํต ๊ธฐ์ค์ ๋ชป ๋ฏธ์น๋๋ผ๋ ํ์ โ๋ชจ๋ ๋ฐ์ ์โ ์ด์ ์ ์ฉ๋๋ค. ์ง์ ๋ณด๋ด๋ ์๋ฒ๋ผ๋ฉด SPF ๋๋ DKIM, PTR, TLS๋ถํฐ ํ์ธํ๋ค.
Cloudflare DMARC Management๋ก ๋ณด๊ณ ์ ๋ฐ๊ธฐ
XML ๋ณด๊ณ ์๋ฅผ ์ง์ ๋ชจ์ ์ฝ๊ธฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ฉด ๋ํ ์๋น์ค๋ฅผ ์ด๋ค. ๋๋ฉ์ธ์ DNS๊ฐ Cloudflare์ ์๋ค๋ฉด Cloudflare DMARC Management๊ฐ ์๋ค. ๋ค๋ง ๋ฌธ์์ ์ ํ ์กฐ๊ฑด์ด ์๋ค.
- Cloudflare DNS๋ฅผ ์ฐ๋ apex ๋๋ฉ์ธ(
example.com)๋ง ๋๋ค.blog.example.com๊ฐ์ ํ์ ๋๋ฉ์ธ์ด๋ ์๋ธ๋๋ฉ์ธ ์ค์ (subdomain setup) ์กด์ ์ ๋๋ค - ๋ชจ๋ ์๊ธ์ ์์ ์ธ ์ ์๊ณ , ๋ฌธ์์๋ ๋ฒ ํ๋ก ํ์๋ผ ์๋ค
์ผ๋ ์์๋ค.
- Cloudflare ๋์๋ณด๋์์ ๊ณ์ ๊ณผ ๋๋ฉ์ธ์ ๊ณ ๋ฅธ๋ค
- Email > DMARC Management๋ก ๊ฐ๋ค
- Enable DMARC Management๋ฅผ ๋๋ฅธ๋ค
- DMARC ๋ ์ฝ๋๊ฐ ์์ผ๋ฉด ์ถ๊ฐ๋ฅผ ์ ์ํ๋ค(Add). ์์ผ๋ฉด ๊ธฐ์กด ๋ ์ฝ๋์ Cloudflare ์ฃผ์์
rua๋ฅผ ํ๋ ๋ํ๋ค(Next) - ์ฒซ ๋ณด๊ณ ์๊ฐ ํ๋ฉด์ ๋์ค๊ธฐ๊น์ง ์ต๋ 24์๊ฐ ๊ฑธ๋ฆฐ๋ค
ํ๋ฉด์์๋ ์ด๋ฐ ๊ฒ์ ๋ณธ๋ค.
- ์ต๋ 30์ผ์ ๋ฉ์ผ๋ ๊ทธ๋ํ, ๋ ์ง๋ณ ๋ณด๊ณ ์(View reports)
- ์์ 10๊ฐ ๋ฐ์ก์(Top 10 sources)๊ณผ ์ ์ฒด ๋ฐ์ก์ ๋ชฉ๋ก(View all โ ํญ๋ชฉ์ Details). ๋ฐ์ก์๋ง๋ค SPF, DKIM, DMARC ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค
- Email record overview์ View records์์ SPF, DKIM, DMARC ๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ง๋ ๋ค. SPF๋ฅผ ํธ์งํ๋ฉด DNS ์กฐํ 10ํ ์ด๊ณผ๋ฅผ ๊ฒ์ฌํด ๊ฒฝ๊ณ ํ๋ค
๋ฌธ์๋ ๋ํด์ง๋ ์ฃผ์๋ฅผ โCloudflare ์ด๋ฉ์ผ ์ฃผ์โ๋ผ๊ณ ๋ง ์ ๋๋ค. ์์ _dmarc.cloudflare.com์ ์๋
โฆ@dmarc-reports.cloudflare.net์ด ๊ทธ๋ฐ ์ฃผ์๋ก ๋ณด์ธ๋ค. ์ผ ๋ค์๋ ์๊ธฐ ์กด์ _dmarc ๋ ์ฝ๋์์ ์ค์
๊ฐ์ ํ์ธํ๋ค. dmarc-reports.cloudflare.net์ ๋ค๋ฅธ ๋๋ฉ์ธ์ ๋ณด๊ณ ์๋ฅผ ๋ฐ๊ฒ ๋ค๋ ํ์ธ ๋ ์ฝ๋๋ ๋๊ณ
์๋ค.
dig +short TXT example.com._report._dmarc.dmarc-reports.cloudflare.net
"v=DMARC1;"
์์์ ์ด๋ฆ์ผ๋ก ๋ฌผ์ด๋ ๊ฐ์ ๋ต์ด ์จ๋ค. RFC 9990์ด ์ค๋ช ํ๋ ์์ผ๋์นด๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ๋๋ฉ์ธ์ ๋ณด๊ณ ์๋ฅผ ๋ฐ๊ฒ ๋ค๊ณ ๋ฐํ ๋ ๊ฒ์ด๋ค. ์ฃผ์ํ ์ ์ด ํ๋ ์๋ค. ์กด ์์ ์ธ๋ถ ๋๋ฉ์ธ์ ๊ฐ๋ฆฌํค๋ CNAME์ด ์์ผ๋ฉด DMARC Management๋ SPF ์์ ์ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋ SPF๋ ๊ทธ ์ธ๋ถ ๋๋ฉ์ธ์ DNS์์ ๊ณ ์น๋ค.
๋ฉ์ผ์ ์ฐ์ง ์๋ ๋๋ฉ์ธ
์น ์ ์ฉ ๋๋ฉ์ธ์ด๋ ๋ณด์ ๋ง ํ๋ ๋๋ฉ์ธ๋ ์์กฐ ๋ฐ์ ์ ์ฐ์ผ ์ ์๋ค. example.com์ ์ค์ ๋ ์ฝ๋๊ฐ ๊ทธ๋ฐ
๊ตฌ์ฑ์ด๋ค(2026-10-15 ์กฐํ).
example.com. MX 0 .
example.com. TXT "v=spf1 -all"
*._domainkey.example.com. TXT "v=DKIM1; p="
_dmarc.example.com. TXT "v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s"
๋ฉ์ผ์ ๋ฐ์ง ์๊ณ (null MX), ์ด๋ค IP์์๋ ๋ณด๋ด์ง ์์ผ๋ฉฐ, ๋ชจ๋ DKIM ํค๊ฐ ํ๊ธฐ๋๊ณ , ์คํจํ๋ฉด ๊ฑฐ๋ถํด
๋ฌ๋ผ๋ ๋ป์ด๋ค. ์น์๋ ์ฐ์ง ์๋ ๋๋ฉ์ธ์ด๋ผ๋ฉด CAA์ 0 issue ";"๋ก
์ธ์ฆ์ ๋ฐ๊ธ๊น์ง ๋ง๋๋ค.
์ ๊ฒํ
| ์ ๊ฒ | ์ ์ ์ํ |
|---|---|
_dmarc ๋ ์ฝ๋ |
ํ๋, v=DMARC1์ด ๋งจ ์, rua ์์ |
| SPF | v=spf1 ๋ ์ฝ๋ ํ๋, DNS ์กฐํ 10ํ ์ด๋ด, ๋์ด -all ๋๋ ~all |
| MAIL FROM | ๋ฐ์ก ์๋น์ค๋ ๋ด ์๋ธ๋๋ฉ์ธ(SPF ์ ๋ ฌ) |
| DKIM | d=๊ฐ ๋ด ๋๋ฉ์ธ, RSA 2048๋นํธ, ์ฐ์ง ์๋ ์
๋ ํฐ๋ ์ ๋ฆฌ |
| ๋ฐ์ ๋ฉ์ผ | Authentication-Results์ dmarc=pass |
| ์ง์ ๋ณด๋ด๋ ์๋ฒ | PTR๊ณผ ์ ๋ฐฉํฅ ์ผ์น, TLS๋ก ์ ์ก |
| ๋ณด๊ณ ์ | ๋งค์ผ ๋ค์ด์ค๊ณ , ๋ชจ๋ฅด๋ source_ip๋ฅผ ํ์ธํจ |
| ์ ์ฑ | ๊ฐ์ โ ์ํ โ quarantine โ reject ์์, pct ์ค๊ฐ ๊ฐ ์ ์ |
| ์๋ฆผ ๋ฉ์ผ | ์ ์ฉ ์๋ธ๋๋ฉ์ธ, ๋ฐ์ก์ ๊ณ ์ |
| ๋ฉ์ผ ์ ์ฐ๋ ๋๋ฉ์ธ | null MX, v=spf1 -all, p=reject |
์ธ์ฆ์ ๋ค ๋ง์ถฐ๋ ๋ฐ์ํธ์งํจ์ ๋ณด์ฅํ์ง๋ ์๋๋ค. ๋์น๋ฉด ์ ๋๋ ์๋ฆผ์ด๋ผ๋ฉด ๋ฐ๋ ๊ธธ์ ํ๋ ๋ ๋๋ค. ์ธ์ฆ์์ ๋๋ฉ์ธ ๋ง๋ฃ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ๋ ๋ง๋ฃ ๊ฐ์ ๊ตฌ๋ ์ ๋ฉ์ผ๊ณผ ํจ๊ป Slack, Discord, Telegram ์ฑ๋๋ก๋ ๋ณด๋ผ ์ ์๋ค. ์ฌ๋์ผ๋ก ์ง์ ๋ฐ๋ ๊ตฌ์ฑ์ ์ธ์ฆ์ ๋ง๋ฃ ์๋ฆผ ์ฒด๊ณ ์ง์ ๋ง๋ค๊ธฐ์ ์๋ค.
์ฐธ์กฐ
- RFC 7208: Sender Policy Framework (SPF)
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatures
- RFC 8301: Cryptographic Algorithm and Key Usage Update to DKIM
- RFC 7489: DMARC (๊ตฌํ)
- RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC)
- RFC 9990: DMARC Aggregate Reporting
- RFC 9991: DMARC Failure Reporting
- IETF Datatracker: draft-ietf-dmarc-dmarcbis
- RFC 8601: Message Header Field for Indicating Message Authentication Status
- RFC 7505: A โNull MXโ No Service Resource Record
- RFC 8058: Signaling One-Click Functionality for List Email Headers
- Google: Email sender guidelines
- Google: Email sender guidelines FAQ
- Google: Trace an email with its full headers
- Google Workspace: Set up DKIM
- Yahoo: Sender Best Practices
- Microsoft: Outlookโs New Requirements for High-Volume Senders
- Microsoft Learn: How to use DKIM for email in your custom domain
- Amazon SES: Using a custom MAIL FROM domain
- Amazon SES: Easy DKIM
- Amazon SES: Creating and verifying identities
- Cloudflare: DMARC Management
- Cloudflare: Enable DMARC Management
- Cloudflare DMARC Management: Statistics and details
- Cloudflare DMARC Management: DNS lookup limit