준호씨의 블로그
email - 가비아에서 도메인 SPF 설정하기 본문
신뢰할 수 없는 IP 에서 발송된 이메일은 스팸으로 판정 받기 쉽다. 그렇다면 IP 의 신뢰도를 높이려면 어떻게 해야 할까? 여러가지 기법이 있는데 여기서는 SPF (Sender Policy Framework) 레코드를 이용 해 볼 것이다.
test@junho85.pe.kr 주소로 메일을 발송 할 경우 junho85.pe.kr 이라는 도메인으로 메일을 발송하는 서버의 IP 를 junho85.pe.kr 의 TXT 레코드에 기입 해 두는 것이다. 도메인의 설정 변환 권한은 도메인의 주인만 가지고 있기 때문에 스패머가 함부로 조작하기 어렵다. 그렇기 때문에 도메인에 기록된 IP 정보는 메일수신서버가 신뢰할 수 있는 좋은 근거가 된다.
도메인의 레코드 정보를 수정 하는 방법은 상황에 따라 다르지만 여기서는 가비아에서 도메인을 구입해서 사용 하는 경우 가비아의 "도메인 부가서비스"에 있는 "DNS 레코드 설정" 기능을 이용해서 수정 해 볼 것이다.
가비아에서 TXT 레코드에 SPF 정보 등록하는 과정
가비아 홈페이지 접속 -> 도메인 -> 부가서비스
부가서비스 설정 바로 가기
본인의 도메인 클릭
화면을 아래로 좀 스크롤 하면 DNS 레코드 설정의 "설정" 클릭
화면 하단의 "변경" 클릭
TXT 레코드에 SPF 정보 입력 후 화면 하단의 "적용" 클릭
나의 경우 다음과 같이 입력 하였다.
v=spf1 include:_spf.daum.net ip4:115.71.237.125 ip4:218.155.132.209 ~all
의미를 설정 하면 다음과 같다. junho85.pe.kr 도메인에서 발송할 메일 서버의 IP 는 _spf.daum.net 의 SPF 정보를 포함하며 115.71.237.125, 218.155.132.209 IP 에서도 메일을 발송한다. ~all 은 SPF 에 없는 IP 이더라도 정상 메일일 수 있다는 의미이다. 지정한 IP 에서만 보내는 것이 확실하다면 -all 을 해 주면 된다.
junho85.pe.kr 의 경우 다음메일, 개인서버, 현재사용중인 PC 등에서 보내기 위해 위와 같이 설정을 하였는데, 만약 자신의 이메일 발송서버의 IP 가 111.111.111.111 이라면 다음과 같이 설정 하면 된다.
v=spf1 ip4:111.111.111.111 ~all
자세한 SPF 설정 문법은 SPF Record Syntax 를 참고하도록 한다.
도메인에 실제로 적용 되었는지 확인 하는 방법은 다음과 같다.
$ dig txt junho85.pe.kr +short
"v=spf1 include:_spf.daum.net ip4:115.71.237.125 ip4:218.155.132.209 ~all"
도메인 정보는 각 환경마다 캐싱이 되기 때문에 반영되는 시간이 서로 다를 수 있다. 내 컴퓨터에서 사용하는 DNS 서버 기준으로는 적용 되어 있지만 gmail 에서 사용하는 DNS 서버 에서는 예전 정보로 나올 수도 있다. 또, 다음메일 에서 사용하는 DNS 서버에서는 또 다른 정보로 캐싱 되어 있을 수도 있다. 각 DNS 서버마다 캐싱 되는 시간이 다르기 때문에 전세계의 모든 서버에 변경 내용이 전파 되기 까지 수시간~수일 정도가 걸릴 수도 있다는 점을 감안하는 것이 좋다.
자 이제 다음메일 서비스의 발송 서버 (_spf.daum.net 의 IP들), 115.71.237.125, 218.155.132.209 에서는 junho85.pe.kr 도메인으로 메일을 보낼 때 스팸으로 판정 될 가능성이 낮아졌다.
아래는 telnet 을 이용해서 메일을 발송 해 본 예제이다.
$ telnet gmail-smtp-in.l.google.com. 25
Trying 74.125.23.27...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP e89si8213502pfm.198 - gsmtp
EHLO junho85.pe.kr
250-mx.google.com at your service, [218.155.132.209]
250-SIZE 157286400
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
MAIL FROM: <test@junho85.pe.kr>
250 2.1.0 OK e89si8213502pfm.198 - gsmtp
RCPT TO: <junho85@gmail.com>
250 2.1.5 OK e89si8213502pfm.198 - gsmtp
DATA
354 Go ahead e89si8213502pfm.198 - gsmtp
subject: this is test subject
from: test@junho85.pe.kr
this is test contents.
.
250 2.0.0 OK 1519745417 e89si8213502pfm.198 - gsmtp
quit
221 2.0.0 closing connection e89si8213502pfm.198 - gsmtp
Connection closed by foreign host.
지난 포스팅 (telnet 명령어를 이용해서 이메일 발송하는 방법) 에서는 집PC의 IP 에서 발송 했을 때 gmail 에서 메일을 받아 주지 않았었는데 이번에는 받아주는 모습을 볼 수 있다. 집PC의 IP를 통해 junho85.pe.kr 도메인으로 보낸 메일을 조금 더 신뢰 해 주고 있다는 의미이다. 해당 메일은 스팸편지함으로 들어가긴 했는데 꾸준히 정상메일을 발송하다 보면 점점 스팸편지함으로 들어가지 않게 된다.
앞서 SPF 를 설정했음에도 불구하고 스팸편지함으로 수신 된다는 건 SPF 만으로 모든 것을 해결해 주지는 않는 다는 것을 알 수 있다. SPF 말고 도메인을 이용해서 신뢰도를 높이는 방법으로 DKIM 등도 존재하며, 이러한 설정을 다 해 주었다고 해도 수신 서비스 마다 발송 서버의 평판을 별도로 관리 하고 있기 때문에 정상적인 메일을 꾸준히 발송해 주다 보면 점점 평판이 높아지게 된다. 메일 발송시 신뢰도나 평판을 높이는 방법은 추후 차차 정리 해 보도록 하겠다.
참고
'개발이야기 > 이메일시스템' 카테고리의 다른 글
c - smtp client library (0) | 2018.04.24 |
---|---|
c - libcurl 로 smtp 메일 발송하기 (0) | 2018.04.16 |
도메인 별 MX (mail exchanger record) 확인 해 봄 (0) | 2018.02.23 |
sendmail - STARTTLS 기능을 더 활성화 시키는 빌드 옵션 (0) | 2018.01.25 |
sslscan - Collect TLS (previously SSL) information easily. Installation, starttls SMTP test (0) | 2018.01.24 |