1. Sendmail 확인 및 설치

먼저, 본인의 리눅스에 sendmail이 있는지 확인합니다.

아래 명령어로 sendmail의 버전 정보 및 설정 정보가 나옵니다.

$ sendmail -d0.1 -bt < /dev/null

만약 sendmail이 없다면 설치해 줍니다.

$ sudo apt install sendmail -y

2. 메일 전송용 파일 만들기

간단하게 메일 전송을 위해 보낸이, 받는이, 제목, 내용 등이 포함 된 파일을 만들어 봅시다.

$ mkdir ~/mail && cd ~/mail && nano mail.txt

아래 내용을 붙여넣고, 자신의 환경에 맞는 정보로 수정합니다.

제가 메일 발송을 위해 사용할 도메인은 mail.hestia.tk 입니다.

From: "Do Not Reply"&#60;no-reply@mail.hestia.tk&#62;
To: minibrary@gmail.com
Subject: Sendmail Test

This is Test E-mail

=============
Best Regards,
MINIBRARY

저장, 종료 후 아래 명령어로 메일을 발송합니다.

$ sendmail -t < mail.txt

Gmail에 로그인 하여 메일이 왔는지 확인합니다.

아직 SPF 레코드를 도메인에 추가하지 않았다면, 스팸편지함으로 수신할 가능성이 높습니다.

메일을 열어보니, ““안에 입력한 표시 이름, <>안에 입력한 실제 주소, 제목 및 내용 까지 정확하게 수신 되었습니다.

다만, 발신자 옆의 아이콘에 마우스를 가져가 보면, “이 메일의 실제 발신자가 mail.hestia.tk이며 스팸 발신자가 아닌지 확인하지 못했습니다” 라는 메세지가 나타납니다.

3. SPF 레코드 추가

이제 SPF 레코드를 추가해 보겠습니다.

SPF 레코드의 메커니즘 중 a 메커니즘과 include 메커니즘 테스트를 위해, 아래와 같이 만들어 보겠습니다.

자신의 도메인의 zone file 관리 화면에서, 아래 내용으로 새로운 레코드를 추가 하겠습니다.

설정을 저장 후, 해당 정보가 다른 DNS 서버로 전파되기를 기다려야 합니다.

해당 도메인 레코드를 관리하는 1차 네임서버로 도메인 쿼리를 직접 보내서 설정이 제대로 되었는지 확인할 수 있지만, 정확한 테스트를 위해 조금 기다려 줍니다.

보통 5분 ~ 30분 내외로 전파가 됩니다.

일정 시간이 경과 되었다는 가정 하에, 아래 명령어로 확인해 봅니다.

$ dig mail.hestia.tk TXT

아래와 같이 SPF 레코드가 제대로 들어간 것을 확인할 수 있습니다.

이제, 다시 Gmail로 메일을 보내 보겠습니다.

$ sendmail -t < mail.txt

Gmail에서 수신한 메일을 확인 해 봅니다.

이번에는 보낸 사람 아이콘의 물음표가 사라졌습니다.

비교를 위해, 앞에서 수신한 메일과 방금 수신한 메일을 함께 보겠습니다.

4. 메세지 헤더 확인

이번에는, 메세지 헤더를 확인 해 보겠습니다.

Gmail 메일을 연 상태에서, 답장 버튼 옆의 역삼각형을 누르고, “원본 보기”를 누르면 새 창이 열리고 헤당 메일에 대한 헤더가 나타납니다.

새 창에 나타난 모든 내용을 복사 후, 아래 링크로 이동합니다.

https://toolbox.googleapps.com/apps/messageheader/

박스 안에 복사한 내용을 붙여넣고 “Analyse the header above”를 클릭합니다.

클릭하면, 헤더를 분석한 결과를 보여줍니다.

Google의 메일 헤더 분석기 이외에도 인터넷상에 다양한 분석 사이트가 있습니다.

방금 보낸 메일의 결과를 보면 SPF: pass가 된 것을 볼 수 있습니다.

이로써, 정상적인 자신의 도메인에서 관리하는 서버에서 발송하는 메일은 SPF: pass 헤더를 추가할 수 있게 되었습니다.

보너스

사내 메일 서버 이외의, 외부 메일 서버를 이용할 경우에 SPF: pass 헤더를 추가할 수 있게 해 주는 테스트입니다.

minibrary.com 이라는 메일 발송 전문 업체가 있다고 가정합니다.

이 업체에 “미니브러리 마케팅”marketing@mail.hestia.tk 을 발신인으로 하는 대량 메일을 요청 한다고 가정하고, 테스트를 진행해 보겠습니다.

앞에서 spf 메커니즘의 “include:minibrary.com”를 추가 하였기 때문에, minibrary.com의 SMTP 서버에서 아래의 포맷으로 메일을 발송해 보겠습니다.

From: "미니브러리 마케팅"<marketing@mail.hestia.tk>
To: minibrary@gmail.com
CC:
Bcc:
Subject: <광고> 마케팅 대량 메일 테스트
Mime-Version: 1.0
Content-Type: text/html; charset="utf-8"

안녕하세요?
언제나 미니브러리를 이용해 주셔서 감사합니다.
잘부탁드립니다.

+-+-+-+-+-+-+-+-+-+-+-+
HTTPS://MINIBRARY.COM
+-+-+-+-+-+-+-+-+-+-+-+

발송 결과 사진입니다.

정상적으로 발송 되었고, 스팸 메일 의심 물음표가 없습니다.

메일 헤더도 분석해 보겠습니다.

가장 먼저 발송한 위치인, minibrary.com에서 시작하였으며, 보낸 사람은 “미니브러리 마케팅”marketing@mail.hestia.tk이고, “SPF: pass” 되었습니다.

정확하게 원하던 결과가 나왔습니다.

SPF는 이런 식으로, 상황에 맞게 SPF 메커니즘을 수정하셔서 사용하시면 됩니다.

SPF만으로는 아직 메일 스푸핑을 완벽하게 방지하지는 못합니다.

“SPF: fail” 헤더가 추가 되더라도 메일 발송은 되며, 수신 측 메일 서버에서 SPF 확인이 실패한 메일도 허용할 수 있기 때문입니다.

제 도메인 @minibrary.com은, 제가 지정한 저의 SMTP 서버 이외의 곳에서 발송을 시도하는 메일 들은, 발송 자체가 되지 않습니다.

이는 DMARC의 p 태그를 reject로 사용하고 있기 때문입니다.

다음 포스트들에서 알아볼 DKIM, 그리고 DMARC 까지 함께 보시기 바랍니다.