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)
먼저 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
sudo apt install opendmarc
opendmarc-check skyer9.pe.kr
https://www.mail-tester.com/
최종적으로 DNS 설정은 아래와 같아야 합니다.