sendmail with DKIM + SPF + DMARC (for sending)

By | 2020년 4월 5일
Table of Contents

sendmail with DKIM + SPF + DMARC (for sending)

EC2 인스턴스는 기본적으로 아웃바운드 25번 포트가 막혀있다.

여기 를 참조해서 먼저 AWS 이메일발송 제한을 해제해야 합니다.

DKIM(DomainKeys Identified Mail)

DKIM 서비스를 사용하면 나가는 메일 헤더에 DKIM-Signature를 추가해서 발송하게 됩니다.

수신측 메일 서버에서 DKIM서명이 포함된 메일을 받으면 DNS서버에서 서명을 해독할 공개키를 확인하여 받은 메일이 해당 도메인에서 발송된 것을 확인할 수 있습니다.

설치하기

dkim 패키지를 설치합니다.

sudo apt-get install opendkim opendkim-tools

아래와 같이 설정합니다.

sudo vi /etc/opendkim.conf

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple
# Canonicalization        relaxed/relaxed

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:12301@localhost

SOCKET 을 아래 내용으로 변경합니다.

sudo vi /etc/default/opendkim

......
SOCKET="inet:12301@localhost" # listen on loopback on port 12301

sendmail 설정을 수정합니다.

sudo vi /etc/mail/sendmail.mc

......
INPUT_MAIL_FILTER(`opendkim', `S=inet:12301@localhost')dnl
sudo -i
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
exit

인증키를 등록합니다.

sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys
sudo vi /etc/opendkim/TrustedHosts

127.0.0.1
localhost
192.168.0.1/24

*.skyer9.pe.kr
sudo vi /etc/opendkim/KeyTable

mail._domainkey.skyer9.pe.kr skyer9.pe.kr:mail:/etc/opendkim/keys/skyer9.pe.kr/mail.private
# mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private
# mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private
sudo vi /etc/opendkim/SigningTable

*@skyer9.pe.kr mail._domainkey.skyer9.pe.kr
# *@example.net mail._domainkey.example.net
# *@example.org mail._domainkey.example.org

인증키를 생성합니다.

cd /etc/opendkim/keys
sudo mkdir skyer9.pe.kr
cd skyer9.pe.kr
sudo opendkim-genkey -s mail -d skyer9.pe.kr
sudo chown opendkim:opendkim mail.private

DNS 에 아래 내용을 등록합니다.

sudo vi mail.txt

여러줄로 분할되어 있으면 한줄로 합칩니다. 단 주의할 것은 " 를 제거하지 말아야 합니다.

"v=DKIM1; k=rsa;...." "p=MIGfMA0GCSqG....." "4GNADCBiQKBgQC....."

위 내용을 DNS 에 추가해 줍니다.

Name: mail._domainkey.skyer9.pe.kr.

Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

opendkim 를 시작합니다.

sudo service opendkim start

hosts 파일에 도메인을 가장 먼저 등록합니다. 이렇게 함으로 해서 현재의 서버 도메인이 skyer9.pe.kr 로 인식하게 됩니다.

sudo vi /etc/hosts

127.0.0.1 skyer9.pe.kr
127.0.0.1 localhost localhost.localdomain skyer9.pe.kr

sendmail 을 재시작합니다.

sudo service sendmail restart

자체 서버에 메일을 발송해도 인증키가 헤더에 포함되므로, 정상적으로 인증키가 발급되어 있는지 확인할 수 있습니다.

sudo apt  install mutt
mkdir ~/.mutt
vi ~/.mutt/muttrc

set from="ubuntu@skyer9.pe.kr"
set realname="ubuntu"
set editor="vim"
echo "메일 내용" | mutt -s "제목" root@skyer9.pe.kr
sudo tail -100 /var/spool/mail/root

SPF(Sender Policy Framework)

네임서버에 등록된 아이피 기반으로 이메일을 필터링합니다.

SPF 등록하기

네임서버에 아래 내용을 등록합니다.

유형    값
TXT     "v=spf1 mx ip4:<메일서버 아이피> ~all"

SPF 상태확인하기

https://mxtoolbox.com/spf.aspx 에 접속해서 정상적으로 등록되었는지 확인할 수 있습니다.

DMARC(Domain-based Message Authentication, Reporting & Conformance)

먼저 SPFDKIM 을 설정합니다.

DNS 에 아래 내용을 추가합니다.

DNS Record Type : TXT
Name : _dmarc
# 테스트 모드
Value : v=DMARC1; p=none; pct=100; rua=mailto:dmarc-reports@skyer9.pe.kr
# 거부
Value : v=DMARC1; p=reject; pct=100; rua=mailto:dmarc-reports@skyer9.pe.kr
sudo apt install opendmarc
opendmarc-check skyer9.pe.kr
https://www.mail-tester.com/

최종적으로 DNS 설정은 아래와 같아야 합니다.

답글 남기기