Skip to main content

Email Authentication


info

이메일의 원문을 보면 인증을 위한 정보가 있습니다.

warning

subdomain을 사용하는 경우 아래 글에서 <domain> 대신 <subdomain>.<domain>을 사용하세요.

Sender Policy Framework(SPF)

DNS의 TXT 레코드에 해당 도메인으로 이메일을 보낼 수 있는 서버를 명시하고, 이를 활용하여 메일을 인증하는 방식입니다.

  1. 사용자는 메일 송신 서버로 메일을 보냅니다.
  2. 메일 송신 서버는 Delivered-To를 확인하여 메일 수신 서버로 메일을 보냅니다.
  3. 메일 수신 서버는 Return-Path에 등록된 도메인의 (v=spf1으로 시작하는) TXT 레코드에서 메일 송신 서버의 IP를 찾습니다.
  4. 확인이 되면 해당 메일은 등록된 도메인에서 인증한 메일로 간주 됩니다.
<domain> text = "v=spf1 [guest list] <redirect=<domain>|<qualifier>all>"
  • <qualifier>
    • +: pass
    • -: fail
    • ~: softfail
    • ?: neutral
nslookup -type=txt <domain>

Domain Keys Identified Mail(DKIM)

DNS의 TXT 레코드에 DKIM 퍼블릭 키를 등록하고, 이를 활용하여 메일을 인증하는 방식입니다.

  1. 사용자는 메일 송신 서버로 메일을 보냅니다.
  2. 메일 송신 서버는 사전 등록된 DKIM 프라이빗 키를 사용하여 DKIM-Signature를 생성한 후 메일의 헤더에 추가합니다.
  3. 메일 송신 서버는 Delivered-To를 확인하여 메일 수신 서버로 메일을 보냅니다.
  4. 메일 수신 서버는 DKIM-Signatured=<domain>을 확인하여 (v=DKIM1으로 시작하는) TXT 레코드에서 퍼블릭키를 찾습니다.
  5. 퍼블릭키로 서명을 복호화 하여 위변조 여부를 판단합니다.
<domain> text = "v=DKIM1; k=<type>; p=<public key>"
info

<selector>._domainkey와 같은 서브도메인을 주로 사용합니다.

nslookup -type=txt <domain>

Domain-based Message Authentication Reporting and Conformance (DMARC)

SPF, DKIM과 함께 사용되며, 앞선 인증 절차를 통과하지 못한 경우 처리 절차를 DNS TXT 레코드에 서술합니다.

  1. 메일 수신 서버에서 SPF, DKIM 인증을 수행합니다.
  2. 인증에 실패한 경우 _dmarc.<domain>을 확인하여 (v=DMARC1으로 시작하는) TXT 레코드에서 처리 절차를 확인합니다.
_dmarc.<domain> text = "v=DMARC1; p=quarantine; adkim=r; aspf=r; rua=mailto:<email>"
  • p
    • none: 아무런 처리를 하지 않습니다
    • quarantine: 메일을 받지만, 스팸으로 분류합니다
    • reject: 메일을 받지 않습니다
  • aspf
    • s: 엄격한 정렬, 발신자 주소와 헤더의 보낸사람 주소의 도메인이 일치하는 경우만 통과합니다
    • r: 완화된 정렬, 서브도메인도 통과합니다
  • adkim
    • s: 엄격한 정렬, 헤더의 보낸사람 주소와 DKIM 서명의 도메인이 일치하는 경우만 통과합니다
    • r: 완화된 정렬, 서브도메인도 통과합니다
info

처음부터 정책(p)을 reject로 선언하지 않는 것이 좋습니다. 설정이 잘못 되었을 경우, 비지니스 이메일을 받지 못하는 상황이 발생할 수 있습니다.

nslookup -type=txt _dmarc.<domain>