DMARC란 무엇인가?
DMARC (Domain-based Message Authentication, Reporting & Conformance)는 SPF 또는 DKIM으로 인증된 도메인이 메시지의 From 주소에 있는 도메인과 정렬되는지 확인하는 이메일 인증 프로토콜입니다. 도메인 소유자는 DMARC 검증에 실패한 메시지에 대해 요청된 처리 선호도를 게시하고, 집계 보고서 또는 메시지별 실패 보고서를 요청할 수 있습니다.
DMARC가 필수적인 이유
SPF와 DKIM은 발신 식별자를 인증합니다. 하지만 이것만으로는 인증된 식별자가 From 주소의 도메인과 정렬되는지 확인하거나, 실패한 메시지에 대한 도메인 소유자의 처리 선호도를 명시하지 않습니다.
DMARC는 다음과 같은 방식으로 이 문제를 해결합니다:
- 처리 선호도 명시: DMARC 검증에 실패한 메시지에 대해 none, quarantine 또는 reject 지정
- 정렬 확인: 인증된 SPF 또는 DKIM 식별자 중 하나 이상이 From 도메인과 정렬되어야 함
- 보고서 요청: 집계 및 메시지별 실패 보고서를 통해 관찰된 인증 결과 파악
DMARC 작동 방식
1. 발신자가 게시 DNS에 DMARC 정책 게시 (_dmarc.domain.com의 TXT 레코드)
2. 이메일 전송 From: [email protected]
3. 수신자가 확인 SPF 및 DKIM
4. 수신자가 정렬 확인: 인증된 도메인이 From 헤더와 일치하는가?
5. 처리 결정: 수신자는 요청된 정책과 기타 신호를 고려
6. 보고서가 전송될 수 있음: 참여 수신자는 요청된 집계 또는 메시지별 실패 보고서를 전송할 수 있음
DMARC 정렬
DMARC는 정렬을 요구합니다. From 헤더의 도메인은 레코드의 완화 모드 또는 엄격 모드에 따라 인증된 식별자 중 하나 이상과 정렬되어야 합니다:
- SPF 정렬: SPF가 검증한 MAIL FROM 도메인 또는 MAIL FROM이 null인 경우 HELO 도메인
- DKIM 정렬: 유효한 DKIM 서명의 d= 도메인
정렬이 없으면 SPF 또는 DKIM이 통과해도 DMARC는 실패할 수 있습니다. DMARC는 정확한 From 도메인을 사용하는 특정 형태의 스푸핑을 직접 해결합니다. 시각적으로 유사한 도메인이나 발신자의 표시 이름 악용은 감지하지 않습니다.
DMARC 레코드 형식
DMARC 레코드는 _dmarc.yourdomain.com에 있는 TXT 레코드입니다:
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
DMARC 태그
| 태그 | 필수 여부 | 설명 | 예시 |
|---|---|---|---|
| v | 예 | 버전 | v=DMARC1 |
| p | 권장 (선택 사항) | DMARC 검증에 실패한 메일에 대해 요청된 처리 선호도 | p=none/quarantine/reject |
| rua | 아니요 | 집계 보고서 URI | rua=mailto:[email protected] |
| ruf | 아니요 | 메시지별 실패 보고서 URI | ruf=mailto:[email protected] |
| t | 아니요 | 정책 테스트 모드 | t=y 또는 t=n |
| sp | 아니요 | 기존 하위 도메인에 대해 요청된 정책 | sp=reject |
| np | 아니요 | 존재하지 않는 하위 도메인에 대해 요청된 정책 | np=reject |
| adkim | 아니요 | DKIM 정렬 모드 | adkim=s (엄격) 또는 adkim=r (완화) |
| aspf | 아니요 | SPF 정렬 모드 | aspf=s 또는 aspf=r |
pct 태그는 역사적으로 사용되던 태그입니다. 현재 DMARC 표준에서는 실패한 메시지의 일정 비율에 정책을 적용하는 용도로 더 이상 사용하지 않습니다. p 태그는 권장되지만 선택 사항입니다. 태그가 없는 유효한 레코드는 p=none으로 처리됩니다.
DMARC 정책
p=none: 실패한 메시지에 대한 처리 선호도를 지정하지 않습니다. 도메인 소유자는 일반적으로 보고서를 검토하는 동안 이를 사용합니다.v=DMARC1; p=none; rua=mailto:[email protected]
p=quarantine: 수신자가 DMARC 검증에 실패한 메시지를 의심스러운 것으로 처리하도록 요청합니다.
v=DMARC1; p=quarantine; rua=mailto:[email protected]
p=reject: 수신자가 DMARC 검증에 실패한 메시지를 거부하도록 요청합니다. 수신자는 이 선호도를 다른 신호와 함께 고려하므로 거부가 보장되지는 않습니다.
v=DMARC1; p=reject; rua=mailto:[email protected]
DMARC 구현 경로
1단계: 모니터링 (p=none)
이메일 생태계를 파악하기 위해 모니터링부터 시작합니다:
v=DMARC1; p=none; rua=mailto:[email protected]
보고서를 분석하여 다음을 식별합니다:
- SPF/DKIM이 누락된 합법적인 발신 서비스
- 무단 발신자(스푸핑)
- 정렬 문제
2단계: 격리 (p=quarantine)
합법적인 발신 소스가 인증되면:
v=DMARC1; p=quarantine; rua=mailto:[email protected]
더 엄격한 정책을 선택하기 전에 보고서를 검토하고 합법적인 메일이 인증되었는지 확인합니다. 현재 DMARC 표준은 백분율 기반의 단계적 적용을 정의하지 않습니다.
3단계: 거부 (p=reject)
DMARC 검증에 실패한 메시지의 거부를 요청합니다:
v=DMARC1; p=reject; rua=mailto:[email protected]
DMARC 보고서
집계 보고서 (rua)
수신자는 집계 XML 보고서를 매일 또는 그보다 자주 보내는 것이 권장됩니다. 보고서는 관찰된 메시지 흐름을 요약하므로, 가용성과 범위는 보고서를 보내는 수신자에 따라 달라집니다:
- 이메일 양
- SPF, DKIM, DMARC 통과/실패율
- 발신 IP 주소
- 수신자 조직
실패 보고서 (ruf)
메시지별 보고서에는 메시지 헤더 또는 콘텐츠가 포함될 수 있습니다. 개인정보 보호 문제로 인해 이를 보내지 않는 수신자가 많습니다:
- 인증 실패 세부정보
보고서 처리
집계 DMARC 보고서는 XML이며 읽기 어려울 수 있습니다. 다음과 같은 서비스를 이용하세요:
- DMARC Analyzer
- Dmarcian
- Valimail
- Postmark DMARC
DMARC 확인
인증된 DomScan Email Authentication API는 도메인당 3크레딧이 필요하며 DMARC 레코드와 파싱된 태그를 반환합니다.
dig _dmarc.example.com TXT
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/email-auth?domain=example.com"
# Check dmarc.record and dmarc.tags in the JSON response
일반적인 DMARC 문제
보고서가 수신되지 않음: rua 주소가 대용량 이메일을 수신할 수 있는지 확인하세요. 일부 제공업체는 이를 필터링합니다. 합법적인 이메일이 실패함: 모든 발신 서비스의 SPF/DKIM 구성을 확인하고 정렬을 검증하세요. 타사 서비스가 실패함: 많은 서비스가 DMARC 정렬을 위해 사용자 지정 DKIM 설정을 요구합니다.DMARC는 SPF와 DKIM에 정렬, 요청된 처리 선호도 및 보고 기능을 추가합니다. 더 엄격한 처리를 요청하기 전에 발신 소스와 보고서를 검토하세요.