어느 날 회사 슬랙에 이런 메시지가 왔다:
@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로 보내게 하는 구성이다.