DMARC란?
DMARC(도메인 기반 메시지 인증, 보고 및 준수)는 SPF와 DKIM을 기반으로 하는 이메일 인증 프로토콜입니다. 도메인 소유자는 인증에 실패한 메시지를 수신 서버가 어떻게 처리할지 정책으로 게시하고 인증 결과를 보고받을 수 있습니다.
DMARC가 중요한 이유
SPF와 DKIM만으로는 실패한 메시지를 어떻게 처리할지 수신자에게 알려 주지 못합니다. 공격자가 SPF/DKIM 없이 위조 메일을 보내도 수신 서버가 따를 지침이 없습니다.
DMARC는 다음 방식으로 이 문제를 해결합니다.
- 정책 정의: 실패한 메시지를 거부, 격리 또는 허용합니다.
- 정렬 요구: From 헤더가 SPF 또는 DKIM 도메인과 일치해야 합니다.
- 보고 활성화: 집계 및 포렌식 보고서로 인증 결과를 확인합니다.
DMARC의 작동 방식
1. 발신자가 정책 게시: DNS의 _dmarc.domain.com에 TXT 레코드로 DMARC 정책을 게시합니다.
2. 이메일 발송: From: [email protected]으로 메일을 보냅니다.
3. 수신자가 SPF와 DKIM 확인: 두 인증 방식을 검사합니다.
4. 수신자가 정렬 확인: 인증된 도메인이 From 헤더와 일치하는지 확인합니다.
5. 정책 적용: DMARC 레코드의 none, quarantine, reject 정책을 적용합니다.
6. 보고서 발송: 지정된 주소로 집계 보고서를 보냅니다.
DMARC 정렬
DMARC의 정렬은 From 헤더 도메인이 다음 중 하나와 일치해야 한다는 뜻입니다.
- SPF 정렬: 봉투 발신자(MAIL FROM)의 도메인
- DKIM 정렬: DKIM 서명의 d= 도메인
정렬이 없으면 SPF와 DKIM은 통과해도 DMARC는 실패합니다.
DMARC 레코드 형식
DMARC 레코드는 _dmarc.yourdomain.com에 있는 TXT 레코드입니다.
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
DMARC 태그
| 태그 | 필수 여부 | 설명 | 예시 |
|---|---|---|---|
| v | 예 | 버전 | v=DMARC1(버전 식별자) |
| p | 예 | 정책 | p=none/quarantine/reject(처리 방식) |
| rua | 아니요 | 집계 보고서 URI | rua=mailto:[email protected](보고 주소) |
| ruf | 아니요 | 포렌식 보고서 URI | ruf=mailto:[email protected](실패 보고 주소) |
| pct | 아니요 | 정책 적용 비율 | pct=100(적용 비율) |
| sp | 아니요 | 하위 도메인 정책 | sp=reject(하위 도메인 거부) |
| adkim | 아니요 | DKIM 정렬 모드 | adkim=s (strict) 또는 adkim=r (relaxed) |
| aspf | 아니요 | SPF 정렬 모드 | aspf=s 또는 aspf=r(정렬 방식) |
DMARC 정책
p=none: 모니터링만 하며 실패한 메시지에 조치하지 않습니다.v=DMARC1; p=none; rua=mailto:[email protected]
p=quarantine: 실패한 메시지를 스팸 또는 정크 폴더로 보냅니다.
v=DMARC1; p=quarantine; rua=mailto:[email protected]
p=reject: 실패한 메시지를 완전히 거부합니다.
v=DMARC1; p=reject; rua=mailto:[email protected]
DMARC 적용 단계
1단계: 모니터링(p=none)
이메일 생태계를 파악하기 위해 모니터링부터 시작합니다.
v=DMARC1; p=none; rua=mailto:[email protected]
2~4주 동안 보고서를 분석해 정상 발신 서비스, 승인되지 않은 발신자(스푸핑), 정렬 문제를 확인합니다.
2단계: 격리(p=quarantine)
정상적인 발신처를 인증한 뒤 다음과 같이 설정합니다.
v=DMARC1; p=quarantine; pct=10; rua=mailto:[email protected]
처음에는 pct=10으로 10%만 격리하고 점차 비율을 높입니다.
3단계: 거부(p=reject)
완전한 보호를 적용합니다.
v=DMARC1; p=reject; rua=mailto:[email protected]
DMARC 보고서
집계 보고서(rua)
모든 메일의 인증 결과를 보여 주는 일일 XML 보고서입니다.
- 이메일 양
- SPF, DKIM, DMARC 통과/실패율
- 발신 IP 주소
- 수신자 조직
포렌식 보고서(ruf)
개별 실패 보고서입니다(개인정보 보호 때문에 모든 수신자가 보내지는 않습니다).
- 전체 메시지 헤더
- 인증 실패 세부 정보
보고서 처리
원시 DMARC 보고서는 XML이라 읽기 어렵습니다. DMARC 보고서를 해석하려면 DMARC Analyzer, Dmarcian, Valimail, Postmark DMARC 같은 분석 서비스를 사용할 수 있습니다.
DMARC 확인
dig _dmarc.example.com TXT
curl "https://domscan.net/v1/health?domain=example.com"
# Returns hasDMARC status
일반적인 DMARC 문제
보고서가 오지 않음: rua 주소가 대용량 이메일을 받을 수 있는지 확인합니다. 정상 메일이 실패함: 모든 발신 서비스의 SPF/DKIM 구성과 정렬을 확인합니다. 제3자 서비스가 실패함: 많은 서비스에서 DMARC 정렬을 위한 사용자 지정 DKIM 설정이 필요합니다.DMARC는 이메일 인증의 마지막 단계입니다. SPF와 DKIM이 올바르게 작동한 뒤 DMARC를 적용하세요.