sendmail (2/4) – 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/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 make -C /etc/mail
인증키를 등록합니다.
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 등록하기
네임서버에 아래 내용을 등록합니다.
도메인 유형 값
skyer9.pe.kr TXT "v=spf1 mx ip4:<메일서버 아이피> ~all"
SPF 상태확인하기
https://mxtoolbox.com/spf.aspx
에 접속해서 정상적으로 등록되었는지 확인할 수 있습니다.
DMARC(Domain-based Message Authentication, Reporting & Conformance)
먼저 SPF
와 DKIM
을 설정합니다.
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
데이타베이스를 설정할지 물어보면 No 라고 답합니다.
sudo apt install opendmarc
아래 두개의 도메인을 추가합니다.
"10" 도 설정에 추가해 주어야 합니다.
mail.skyer9.pe.kr A <메일서버아이피>
skyer9.pe.kr MX 10 mail.skyer9.pe.kr
최종적으로 DNS 설정은 아래와 같아야 합니다.
이메일 발송 테스트
정상적으로 이메일 형식을 갖추지 않으면 지메일에서 스팸함으로 분류합니다.
Authentication-Results: skyer9.pe.kr; dkim=permerror (bad message/signature format)
아래의 내용으로 발송하면 정상적으로 전송이 됩니다.
EC2 인스턴스는 기본적으로 아웃바운드 25번 포트가 막혀있다.
여기 를 참조해서 먼저 AWS 이메일발송 제한을 해제해야 합니다.
telnet localhost 25
HELO skyer9.pe.kr
MAIL FROM: <root@skyer9.pe.kr>
RCPT TO: <skyer9@gmail.com>
DATA
From: root@skyer9.pe.kr
To: skyer9@gmail.com
Subject: DKIM SPF DMARC Authentication Test
Date: Mon, 18 Aug 2025 12:00:00 +0000
Message-ID: <test-$(date +%s)@skyer9.pe.kr>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
This is a test email to verify DKIM, SPF, and DMARC authentication settings.
Email Authentication Test Details:
- DKIM: Testing digital signature validation
- SPF: Testing sender policy framework
- DMARC: Testing domain-based message authentication
Please check the email headers to confirm all authentication methods pass successfully.
Test timestamp: $(date)
.
QUIT