Search

SPF, DKIM & DMARC 구성으로 이메일이 스팸처리 되지 않게 하기

어느 날 회사 슬랙에 이런 메시지가 왔다:
@someone / @flavono123 / @ anotherone
Hey, this is what I dig about Atlas.
$ dig atlaslabs.ai TXT +short "facebook-domain-verification=dd0ai1pn2sc88ig9aa2ttv6ya7sg83"
Plain Text
복사
So, it seems like there is no proper SPF record associated with the domain.
We need to set it up ASAP.
v=spf1 a mx include:_spf.google.com ~all
Plain Text
복사
Also, I have found a couple of other problems, but we should start from here. This will improve our email-goes-directly-to-spam situation.
In addition, if we send some emails using other servers (for instance, some automatic emails), we should add them along with the google's one above. But as I said this is to start 
We should do the same for all our other domains, especially if we send emails to our customers.

SPF?

위 메세지를 받았을 때, SPF가 뭔지 몰랐다. SPF 레코드 때문에 이메일이-스팸통으로-직행할-수-있다니?(email-goes-directly-to-spam)

SPF(Sender Policy Framework)

SPF는 보낸 메일 서버의 도메인을 인증하고 스팸으로 처리되지 않게 한다. SPF 레코드를 메일 서버 도메인을 소유한 DNS 서버에 등록하여 할 수 있다. 과거엔 SPF가 별도 레코드 타입으로 있었으나 이젠 TXT 타입 레코드에 값 형식만 맞춰서 쓴다:
SPF 형식 문법에 대한 전체 소개는 링크로 대체한다:
google workspace(구 g suite)에서 사용하는 값을 예시로 알아보자:
v=spf1 include:_spf.google.com ~all
Plain Text
복사
v=spf1 : spf 레코드임을 표시
include:<domain> : include 메커니즘, 도메인에 일치(match) 항목이 있는지 검색. 오류 반환 또는 다음 디렉티브를 처리한다.
~all : 나머지 전체에 대해선 soft fail(~ )처리한다.
레코드 설정 후엔 아래 테스트 페이지에서 결과를 확인할 수 있다(무료 이용 제한 1일 3계정):

DKIM(Domain Key Identified Mail)

DKIM은 메일의 변조 유무를 검증하는 방법이다. 메일을 보낼 때 비공개키로 서명(sign)하여 보내면, 수신 메일 서버에선 DKIM 레코드에 있는 공개키로 복호화한다. TLS처럼 비대칭키를 사용한다.
DKIM 역시 TXT 레코드이다. 다만 레코드 키는 prefix selector를 포함한다. google workspace의 경우 google.<domain> 이 기본 값이다:
v=DKIM1; p=76E629F05F70 9EF665853333...
Plain Text
복사
값의 형식은 아주 간단하다. DKIM 타입이라는 것을 알려주고(v=DKIM ), p= 뒤에 공개키를 써준다. google workspace super admin 권한이 있어야 어드민 콘솔에서 볼 수 있다.

DMARC(Domain-based Message Authentication Reporting and Conformance)

SPF, DKIM 레코드를 확인 후 해야하는 일 즉, 스팸으로 판단할지 말지에 대해서 받은 이메일 서버에 알려 준다.
DMARC 역시 TXT 레코드로 쓴다. 모든 값의 형식은 다음과 같다:
Tag Name
Purpose
Sample
v
Protocol version
v=DMARC1
pct
Percentage of messages subjected to filtering
pct=20
ruf
Reporting URI for forensic reports
ruf=mailto:authfail@example.com
rua
Reporting URI of aggregate reports
rua=mailto:aggrep@example.com
p
Policy for organizational domain
p=quarantine
sp
Policy for subdomains of the OD
sp=reject
adkim
Alignment mode for DKIM
adkim=s
aspf
Alignment mode for SPF
aspf=r
"v=DMARC1; p=quarantine; rua=mailto:support@<domain>; ruf=mailto:developer@<domain>;
Plain Text
복사
예를 들어, 위 DMARC 구성은 SPF, DKIM을 통과하지 못한 경우 스팸처리(격리)(p=quarantine)하고, 실패한 메일에 대한 집계 보고서는 support, 포렌식 보고서는 developer로 보내게 하는 구성이다.

출처