DMARC 새 'np' 태그가 DNSSEC과 충돌하는 이유
최근 발표된 DMARC 표준(RFC 9989)에 새롭게 도입된 'np'(존재하지 않는 하위 도메인 정책) 태그가 DNSSEC의 한 형식(RFC 9824)과 충돌하여 예상대로 작동하지 않는 문제가 발견되었습니다. 이는 Cloudflare, AWS 등 주요 DNS 서비스를 사용하는 도메인에 영향을 미칠 수 있어 이메일 보안 관리자들의 주의가 필요합니다.
← 블로그 (최종 업데이트: 2026년 7월 5일)
DMARC의 새로운 "np" 태그가 DNSSEC으로 인해 실패할 수 있는 이유 Matteo | 18분 분량
최근 업데이트되어 RFC 9989로 발표된 DMARC 명세에는 새로운 np 태그가 도입되었습니다. 이 태그의 목적은 DMARC 레코드가 게시된 도메인의 하위 도메인(Subdomain) 중 실제로 존재하지 않는 도메인으로부터 메일이 올 때, 수신자가 적용해야 할 정책을 명시하는 것입니다.
우리는 RFC 9989에 포함된 '존재하지 않는 도메인(non-existent domain)'의 정의가 "DNSSEC의 간결한 부재 증명(Compact Denial of Existence in DNSSEC)"으로 알려진 또 다른 최신 명세인 RFC 9824와 충돌하여, np 태그가 항상 기대했던 대로 작동하지 않는다는 사실을 발견했습니다.
DNSSEC의 사용이 아직 보편화되지는 않았지만, 이 문제는 Cloudflare, NS1, AWS Route 53, Azure와 같은 주요 DNS 제공업체와 함께 DNSSEC을 사용하는 모든 도메인에 영향을 미칩니다. 우리는 DMARC를 담당하는 IETF 워킹 그룹에 이 문제를 제기했으며, 문제는 인정받았지만 합의된 해결책은 아직 없습니다. 이 글에서는 전체적인 상황을 설명하고 이 비호환성이 미치는 영향을 평가해보고자 합니다.
새로운 np 태그
2026년 5월, IETF는 세 개의 문서로 구성된 최신 버전의 DMARC 명세를 발표했습니다. RFC 9989는 '존재하지 않는 하위 도메인 정책(non-existent subdomain policy)'을 의미하는 np라는 새로운 DMARC 레코드 태그를 도입했습니다. DMARC 레코드에서는 다음과 같이 보입니다:
v=DMARC1; p=none; sp=quarantine; np=reject;
여기서 p 태그에 지정된 정책은 레코드가 게시된 본 도메인에 적용됩니다. sp 태그는 자체 DMARC 레코드를 게시하지 않는 기존 하위 도메인에 적용되며, np 태그는 존재하지 않는 하위 도메인에 적용됩니다. 사용하지 않는 하위 도메인에서 오는 악성 이메일을 '차단'하면서 다른 하위 도메인에 대해서는 덜 엄격한 정책을 유지하고 싶을 때 이처럼 다른 정책을 설정하는 것이 유용합니다.
DNS에서의 존재하지 않는 하위 도메인
DMARC RFC는 존재하지 않는 도메인을 다음과 같이 정의합니다:
DMARC의 목적상, 존재하지 않는 도메인은 RFC 8020에 설명된 용어의 의미와 일치합니다. 즉, 도메인 이름에 대한 쿼리에 대해 수신된 응답 코드가 NXDOMAIN인 경우, 해당 도메인 이름과 그 하위 도메인은 존재하지 않는 것으로 간주합니다.
이는 일반적인 정의이며 놀라운 부분은 없습니다. DNS 서버는 일반적으로 쿼리된 도메인 이름과 모든 하위 도메인이 존재하지 않음을 알리기 위해 NXDOMAIN 응답 코드를 반환합니다. 이는 연결된 DNS 레코드가 전혀 없다는 것을 의미합니다.
예시는 다음과 같습니다:
~ ❯ dig non-existent-subdomain.rai.it +noall +comments +answer ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 17031 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232
반면, 요청한 특정 리소스 레코드 유형은 발견되지 않았지만 쿼리한 도메인에 다른 레코드 유형이 존재하는 경우의 상황이 다릅니다. 이 경우에는 DNS 이름 자체가 존재하기 때문에 서버가 NXDOMAIN을 반환할 수 없습니다. 대신 빈 응답 섹션과 함께 NOERROR를 반환하며, 이를 NODATA라고도 부릅니다. (DMARC에 대한 이전 실험적 확장인 RFC 9091은 존재하지 않는 도메인을 A, AAAA, MX 레코드에 대해 NXDOMAIN 또는 NODATA 응답이 반환되는 경우로 정의하여, RFC 8020보다 광범위한 정의를 명시적으로 언급했습니다. 이 정의는 RFC 9989에 통합되면서 변경되었습니다.)
위의 예시에서는 non-existent-subdomain.rai.it 이름과 그 하위 도메인이 존재하지 않음을 확인할 수 있습니다. 반면, 아래의 예시에서는 news.rai.it 도메인에 MX 레코드가 없지만 다른 레코드 유형이 있으므로 도메인이 존재한다는 것을 확인할 수 있습니다:
~ ❯ dig news.rai.it MX +noall +comments +answer ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37891 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232
하지만 DNSSEC의 세계에서는 상황이 조금 더 복잡해집니다.
DNSSEC 간단 설명
DNSSEC은 DNS에 대한 보안 확장으로, 리졸버(resolver)가 DNS 응답이 진짜이며 변조되지 않았음을 검증할 수 있게 해줍니다. 이는 암호화 서명을 추가하여 수행됩니다...