CNAME과 TXT를 같이 사용하지 마세요!

겔로그·2024년 8월 30일
0

오늘은 회사 내에서 업무하다 발생했던 이슈를 짧게 정리해보겠습니다. Email 서비스에서는 크게 다음과 같은 개념을 알아야 합니다.

프로토콜: SMTP, IMAP, POP3
도메인 레코드: SPF, DKIM, DMARC
발송 관련: IP 평판, 발신 도메인 평판, dsn code 등

이 중 오늘 작성할 내용은 도메인 레코드에 관한 내용입니다.

문제상황

현재 제가 근무중인 회사의 Email 서비스에서는 발신도메인에 대한 소유 인증 및 SPF, DKIM, DMARC 레코드를 인증해야만 해당 도메인을 이용한 발송이 가능한 형태로 시스템이 운영되고 있습니다.

서비스 운영간 큰 이슈가 없었는데.. 갑자기 신기한 현상이 발생했습니다.특정 발신 도메인에서 보내는 일부 메일이 도메인 인증에 실패하여 수신이 정상적으로 되지 않는 현상이었습니다.

일시적으로 네트워크 오류가 발생할 경우, DNS 서버에 질의간 문제가 발생할 수 있기에 처음 해당 문제를 인지했을때는 가볍게 넘겼으나, 하루가 지나도 해당 현상이 지속되어 문제가 있음을 인지하게 되었습니다.

오류 내용 재현

도메인 인증이 정상적으로 이루어지지 않는 것이기 때문에 DNS 서버에 해당 도메인에 대한 질의를 수행하였습니다.

텍스트 레코드 질의시 canonical name(CNAME) 레코드와 txt 레코드가 교차해서 응답되었으며 5번 호출시 1번 정도 정상 텍스트 레코드가 응답되었습니다.

이로인해 현재 일부 메일만 인증이 성공하여 수신이 된 것을 인지하였고 해당 문제 상황에 대한 원인을 분석하였습니다.

RFC 1921 2.4 CNAME records

A CNAME record is not allowed to coexist with any other data. In
other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you can't also have an MX record for suzy.podunk.edu, or an A record, or even a TXT record. Especially do not try to combine CNAMEs and NS

This is often attempted by inexperienced administrators as an obvious way to allow your domain name to also be a host. However, DNS servers like BIND will see the CNAME and refuse to add any other resources for that name. Since no other records are allowed to coexist with a CNAME, the NS entries are ignored. Therefore all the hosts in the podunk.xx domain are ignored as well!

CNAME record는 DNS 서버에서 CNAME이 있을 경우 다른 리소스 추가를 거부하고 있기 때문에 다른 레코드와 공존할 수 없다는 내용이 RFC 문서에 포함되어 있습니다. 이러한 이유로 CNAME과 TXT 레코드를 동일 host에 작성할 경우 DNS 서버에 따라 동작이 상이하여 오류가 발생할 수 있습니다.

결론

해당 내용은 발신 도메인을 CNAME host로 사용하는 것이 아닌 이메일 전용 서브도메인을 생성해 txt 레코드를 추가하거나, 기존 레코드에서 CNAME을 제거할 경우 정상 동작함을 알 수 있습니다.

Email 발송간 이슈가 있을 경우 레코드 작성이 잘못된 것이 아닌지 추가로 확인하시면 좋을 것 같습니다.

감사합니다.

profile
Gelog 나쁜 것만 드려요~

0개의 댓글