인증과 DNS
PTR 레코드
PTR 레코드는 IP 주소를 서버 이름과 연결하는 DNS 레코드입니다. 일반 DNS 레코드와 반대 방향입니다. 메일 서버는 메일을 보내는 IP 주소의 PTR 레코드를 확인하며, PTR 레코드가 없는 IP 주소의 메일을 거부하는 서버도 있습니다.
PTR 레코드란?
PTR 레코드는 IP 주소를 서버 이름과 연결하는 설정입니다. PTR은 pointer(포인터)의 약자입니다.
먼저 몇 가지 용어를 설명합니다. 서버란 메일 발송처럼 어떤 일을 하려고 항상 켜져 있는 컴퓨터입니다. IP 주소란 203.0.113.10처럼 인터넷에서 서버를 식별하는 번호입니다. 호스트 이름이란 mail.example.com처럼 서버 하나의 이름입니다. DNS는 이름과 숫자를 연결하는 공개 디렉터리입니다. DNS의 각 항목을 레코드라고 합니다.
일반 DNS 레코드는 이름을 IP 주소와 연결합니다. 예를 들어 mail.example.com은 203.0.113.10을 가리킵니다. PTR 레코드는 그 반대입니다. 203.0.113.10을 mail.example.com과 연결합니다. 이것을 역방향 DNS(reverse DNS)라고 합니다.
PTR 레코드는 내 도메인의 DNS에 있지 않습니다. IP 주소 소유자의 별도 DNS 영역(zone)에 있습니다. 영역이란 한 소유자가 관리하는 DNS 레코드의 묶음입니다. 소유자는 보통 호스팅 회사나 이메일 서비스 제공업체입니다. PTR 레코드를 설정하거나 바꾸려면 그 회사에 요청해야 합니다.
간단한 예
발송 서버에 PTR 레코드가 없을 때 일어나는 일은 다음과 같습니다.
- 회사가 메일 서버를 만듭니다. Green Garden Ltd는 IP 주소
203.0.113.10에서 자체 메일 서버를 운영합니다. - 메일을 보냅니다. 서버가 Gmail 주소를 쓰는 고객에게 뉴스레터를 보냅니다.
- Gmail이 PTR 레코드를 조회합니다. Gmail은 IP 주소
203.0.113.10을 확인합니다. 그리고 이 IP 주소에 어떤 이름이 연결되어 있는지 DNS에 묻습니다. - 답이 없습니다. 아무도 그 IP 주소에 PTR 레코드를 설정하지 않았습니다.
- Gmail이 메일을 거부합니다.
550 5.7.25코드를 돌려줍니다. 메시지에는 보내는 IP 주소에 PTR 레코드가 없다고 적혀 있습니다. - Green Garden이 문제를 해결합니다. 호스팅 회사에
203.0.113.10의 PTR 레코드를mail.greengarden.example로 설정해 달라고 요청합니다. - 다음 메일은 이 확인을 통과합니다. Gmail이 PTR 레코드를 다시 조회하고, 같은 IP 주소를 다시 가리키는 이름을 찾습니다.
고객의 주소는 처음부터 정상이었습니다. 빠진 것은 발신자의 설정뿐이었습니다.
메일 서버가 PTR 레코드를 확인하는 이유
내 서버가 받는 쪽 서버에 연결하면, 받는 쪽 서버는 내 IP 주소를 봅니다. 그리고 그 IP의 PTR 레코드를 조회합니다. 그런 다음 두 가지를 확인합니다.
- IP 주소에 PTR 레코드가 있는가?
- PTR 레코드의 호스트 이름이 같은 IP 주소를 다시 가리키는가?
예: 203.0.113.10의 PTR 레코드는 mail.greengarden.example입니다. mail.greengarden.example의 일반 DNS 레코드는 203.0.113.10입니다. 서로가 서로를 가리키므로, 두 질문의 답은 모두 “예”입니다.
둘 다 맞으면, 발신자는 누군가 일부러 설정한 실제 메일 서버로 보입니다. PTR 레코드가 없으면 발신자는 다음 세 가지 중 하나로 보입니다.
- 가정용 인터넷 연결
- 감염된 컴퓨터
- 아무도 설정하지 않은 서버
스팸은 이런 곳에서 오는 경우가 많습니다.
PTR 레코드가 없으면 일어나는 일
일부 메일 서비스 제공업체는 메일을 거부합니다. Gmail의 오류 참고 문서에는 550 5.7.25 This message was blocked because the sending IP address doesn't have a PTR record가 나옵니다. 이것은 영구적인 거부입니다. 주소가 존재하는데도 발송 도구는 이것을 하드 바운스로 기록합니다. 하드 바운스란 영구적으로 거부된 메일입니다.
다른 업체는 메일을 받아들이지만 낮은 점수를 줍니다. 점수가 낮으면 메일이 스팸함으로 갈 가능성이 높아집니다. 따라서 PTR 레코드가 없으면 오류가 돌아오지 않을 때도 손해를 볼 수 있습니다.
PTR 레코드 설정 방법
- 메일을 보내는 IP 주소를 찾습니다.
- 그 IP가 가리킬 호스트 이름을 정합니다. 예:
mail.example.com - 그 호스트 이름에 같은 IP 주소를 가리키는 일반 DNS 레코드가 있는지 확인합니다.
- 호스팅 회사나 이메일 서비스 제공업체에 그 IP 주소의 PTR 레코드를 그 호스트 이름으로 설정해 달라고 요청합니다.
- IP 주소로 역방향 DNS 조회를 실행합니다. 2단계에서 정한 호스트 이름이 나와야 합니다.
Google Workspace, Microsoft 365, SendGrid, Amazon SES로 보낸다면 발송 IP 주소는 서비스 업체의 소유입니다. PTR 레코드도 이미 설정되어 있습니다. PTR 레코드를 직접 설정해야 하는 경우는 자체 메일 서버를 운영하거나 전용 IP 주소를 쓸 때뿐입니다. 전용 IP 주소란 내 회사만 메일을 보내는 IP 주소입니다.
PTR 레코드와 이메일 검증
PTR 레코드는 발신자의 IP 주소에 관한 것입니다. 받는 사람의 주소와는 관계가 없습니다. 이메일 유효성 검사 도구로 리스트를 검증하는 데 내 PTR 레코드는 필요 없습니다. 대량 이메일 검증 도구에도 필요 없습니다.
하지만 검증 도구 자체는 자신의 IP 주소마다 PTR 레코드가 있어야 합니다. PTR 레코드가 없으면 받는 쪽 서버가 대화를 거부합니다. 검증 서비스가 노트북에서 실행한 스크립트와 다른 답을 받는 이유 중 하나가 이것입니다. 이메일 검증은 리스트의 주소가 존재하는지 확인합니다. 내 PTR 레코드는 그와 별개의 설정이며, 호스팅 회사나 이메일 서비스 제공업체를 통해 해결합니다.
관련 용어
- MX 레코드MX 레코드는 그 도메인의 메일을 어느 서버가 받는지 알려 주는 도메인 설정입니다. name@example.com으로 메일을 보내면, 내 메일 서버는 example.com의 MX 레코드를 조회해 메일을 어디로 전달할지 찾습니다.
- SPF 레코드SPF 레코드는 도메인에 두는 텍스트 한 줄로, 그 도메인의 메일을 보낼 수 있는 서버를 나열합니다. 받는 쪽 서버는 이 레코드를 확인해, 내 도메인에서 왔다고 주장하는 메일이 실제로 내 서버에서 보내졌는지 확인합니다.
- IP 평판IP 평판이란 Gmail, Outlook 같은 메일 서비스 제공업체가 내 메일이 나오는 IP 주소를 얼마나 신뢰하는지를 말합니다. IP 주소란 인터넷에서 서버를 식별하는 번호입니다. IP 평판이 나쁘면 메일이 스팸함으로 가거나 차단됩니다.
- DNS TXT 레코드DNS TXT 레코드는 도메인 설정에 저장되는 텍스트 한 줄입니다. 메일 서버는 TXT 레코드를 읽어 SPF, DKIM, DMARC를 확인합니다. 다른 서비스는 TXT 레코드를 읽어 도메인 소유자가 맞는지 확인합니다.
- SMTPSMTP는 Simple Mail Transfer Protocol의 약자입니다. 메일 서버끼리 메일을 보낼 때 쓰는 규칙입니다. 내가 보내는 모든 메일은 SMTP로 서버에서 서버로 전달됩니다.
