거의 모든 존에서 만나게 되는 레코드
TXT 레코드 설명: SPF, DKIM, DMARC
TXT 레코드는 도메인 이름에 붙는 임의의 텍스트를 담습니다. 별것 아닌 것처럼 들리지만, 이메일 신뢰 체계 전체가 이 레코드로 공개되며 앞으로 하게 될 대부분의 도메인 소유권 확인도 이를 사용합니다.
핵심 문제는 1982년에 설계된 SMTP가 어떤 서버든 어떤 도메인으로든 발신한다고 주장할 수 있게 한다는 점입니다. 프로토콜에는 이를 막는 장치가 없습니다. SPF, DKIM, DMARC는 이를 바로잡기 위해 나중에 덧붙인 세 개의 계층이며, 셋 모두 TXT 레코드에 존재합니다.
핵심 요약
MX 레코드는 메일이 어디로 도착할지 결정합니다. 이 세 가지 TXT 레코드는 내 도메인에서 왔다고 주장하는 메일을 누군가 믿어 줄지 결정합니다. 이것이 없으면 정상적인 메시지가 스팸함에 들어갑니다.
SPF: 어떤 서버가 내 도메인으로 발송할 수 있는가
SPF(Sender Policy Framework)는 내 도메인의 메일을 보낼 수 있도록 허가된 서버 목록을 공개합니다. 수신 서버는 접속한 IP를 그 목록과 비교합니다.
example.com. 3600 IN TXT "v=spf1 include:_spf.google.com ip4:93.184.216.34 ~all"| 구성 요소 | 의미 |
|---|---|
v=spf1 | 버전 표시자. 반드시 맨 앞에 와야 합니다. |
include:_spf.google.com | Google의 SPF 레코드에 있는 모든 것도 신뢰합니다. |
ip4:93.184.216.34 | 이 특정 주소를 신뢰합니다. |
~all | 소프트 실패: 그 외는 의심스럽지만 거부하지는 않습니다. |
-all | 하드 실패: 목록에 없는 것은 모두 거부합니다. 더 엄격합니다. |
DKIM: 암호화 서명
DKIM(DomainKeys Identified Mail)은 발송하는 각 메시지에 개인 키로 서명합니다. 짝이 되는 공개 키를 DNS에 게시하면 수신 측이 서명을 검증합니다.
selector1._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB..."selector1 부분은 메일 제공업체가 정하며 서명된 각 메시지에 포함되므로, 수신 측은 어떤 키를 가져와야 하는지 알 수 있습니다. 셀렉터를 사용하면 키를 교체하거나 여러 제공업체를 동시에 운영해도 충돌이 없습니다.
DKIM이 SPF보다 나은 점은 서명이 메시지 자체를 대상으로 하므로 포워딩 후에도 유지된다는 것입니다. 약점은 서명이 전혀 없이 도착한 메시지에 대해서는 아무 말도 하지 않는다는 점이며, DMARC가 이 틈을 메웁니다.
DMARC: 앞의 둘이 실패하면 어떻게 할 것인가
DMARC(Domain-based Message Authentication, Reporting and Conformance)는 앞의 둘을 하나로 묶습니다. SPF 또는 DKIM이 통과하는 것뿐 아니라 눈에 보이는 From 주소와 정렬되도록 요구하며, 실패 시 수신 측이 어떻게 처리할지 알려 줍니다.
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:reports@example.com; pct=100"| 태그 | 의미 |
|---|---|
p=none | 모니터링만 합니다. 아무 조치도 하지 않습니다. 시작 지점입니다. |
p=quarantine | 실패한 메일을 스팸함으로 보냅니다. |
p=reject | 실패한 메일을 완전히 거부합니다. 최종 목표입니다. |
rua= | 집계 보고서를 보낼 곳입니다. |
pct= | 정책을 이 비율의 메일에 적용합니다. 점진적 적용에 유용합니다. |
세 가지를 안전하게 적용하기
순서가 중요합니다. 곧바로 p=reject로 가는 것은 자신의 청구서를 전달 불가로 만드는 전형적인 방법입니다.
내 도메인으로 발송하는 모든 것을 파악합니다
메일 제공업체는 물론이고, 청구 도구, CRM, 마케팅 플랫폼, 티켓 시스템, 앱의 트랜잭션 메일도 포함됩니다. 여기서 빠뜨린 것은 나중에 문제를 일으킵니다.
SPF를 소프트 실패로 게시합니다
1단계의 모든 발신자를 포함하고
~all로 끝냅니다. 소프트 실패는 목록에 없는 발신자를 의심스럽게 표시하되, 목록을 검증하는 동안 메일을 망가뜨리지는 않습니다.DKIM 서명을 켭니다
각 제공업체에서 이를 활성화하고 제공하는 셀렉터 레코드를 게시합니다. 테스트 메시지를 보내 서명이 검증되는지 확인합니다.
DMARC를 p=none으로 시작합니다
모니터링 전용입니다. 2~4주 동안 집계 보고서를 수집하면 잊고 있던 발신자가 드러납니다.
점진적으로 강화합니다
보고서에 정상적인 출처만 통과하는 것으로 나타나면
p=quarantine으로 올리되, 처음에는pct=25로 시작해도 좋습니다. 깨끗해지면p=reject로 올립니다.
TXT 레코드는 이메일 전용이 아닙니다
같은 레코드 유형이 수십 가지 서비스의 도메인 소유권 확인에도 쓰입니다. Google Search Console, Microsoft 365, Facebook 등은 모두 토큰을 TXT 레코드로 게시하게 한 뒤 이를 확인합니다.
example.com. IN TXT "google-site-verification=rXsLp2..."
example.com. IN TXT "MS=ms12345678"이들은 문제없이 공존합니다. 한 도메인이 TXT 레코드를 여러 개 가질 수 있으며, 규칙은 v=spf1로 시작하는 레코드가 정확히 하나여야 한다는 것뿐입니다.
조회 도구로 아무 도메인이나 확인하면 모든 TXT 레코드를 한꺼번에 볼 수 있어, 중복된 SPF 레코드나 제거하지 않은 소유권 확인 토큰을 빠르게 찾을 수 있습니다.
도메인의 공개 DNS 주소를 확인해야 하나요? Domain IP Lookup 도구를 사용해 보세요.
이 주제의 무료 도구
자주 묻는 질문
관련 글
이메일이 메일 서버를 찾는 과정
발신자
you@gmail.com
MX 조회
메일을 받는 곳은?
메일 서버
우선순위 10 먼저
받은편지함
전달됨
우선순위 값이 낮을수록 먼저 사용되고, 높은 값은 백업입니다
MX 레코드란? 이메일 라우팅 설명
이메일이 도착할 곳을 정하는 레코드입니다. 우선순위 숫자의 동작 방식, null MX의 의미, 메시지를 조용히 잃게 만드는 실수를 다룹니다.
역방향 DNS는 조회를 거꾸로 수행합니다
IP 주소
93.184.216.34
출발점
PTR 조회
in-addr.arpa, 내 존이 아닌 상대의 존
호스트 이름
응답
역방향 존은 도메인 소유자가 아니라 IP 블록 소유자에게 속합니다
역방향 DNS란? PTR 레코드 설명
거꾸로 진행되는 조회입니다. 호스팅 제공업체가 이를 관리하는 이유와, 이것이 없으면 이메일이 조용히 스팸함으로 가는 이유를 설명합니다.
거의 모든 존에서 만나게 되는 레코드
DNS 레코드 유형 총정리: 완전한 레퍼런스
알아 둘 가치가 있는 모든 레코드 유형의 역할, 모양, 그리고 흔히 저지르는 실수를 한 페이지에 정리했습니다.