Table of Contents
Postfix 설치 (2/4) – DKIM/SPF/DMARC 설정 가이드
이 글에서는 앞서 구축한 Postfix 메일 서버에 메일 인증 기능(DKIM, SPF, DMARC)을 추가하여 메일 신뢰성을 높이고 스팸 처리를 방지하는 방법을 다룹니다.
개요
메일 인증 기술은 다음과 같은 목적으로 사용됩니다:
- SPF (Sender Policy Framework): 발송 서버의 권한을 검증
- DKIM (DomainKeys Identified Mail): 메일 내용의 무결성을 보장
- DMARC (Domain-based Message Authentication): SPF와 DKIM을 종합하여 메일 정책을 설정
환경 정보
- 도메인: example.com
- 메일 서버: mail.example.com
- 서버 IP: 111.222.333.444
- OS: Ubuntu 20.04/22.04 LTS
DKIM 설정
1. OpenDKIM 설치
# OpenDKIM 및 관련 도구 설치
sudo apt update
sudo apt install opendkim opendkim-tools -y
2. OpenDKIM 설정
메인 설정 파일을 편집합니다:
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:8891@localhost
----------------------------
3. DKIM 키 생성
# 키 저장 디렉토리 생성
sudo mkdir -p /etc/opendkim/keys/example.com
# DKIM 키 페어 생성
sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s mail -v
# 키 파일 권한 설정
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/mail.private
sudo chmod 600 /etc/opendkim/keys/example.com/mail.private
4. OpenDKIM 테이블 설정
키 테이블 생성:
sudo vi /etc/opendkim/KeyTable
----------------------------
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
----------------------------
서명 테이블 생성:
sudo vi /etc/opendkim/SigningTable
----------------------------
*@example.com mail._domainkey.example.com
----------------------------
신뢰 호스트 설정:
sudo vi /etc/opendkim/TrustedHosts
----------------------------
127.0.0.1
localhost
*.example.com
example.com
111.222.333.444
----------------------------
5. Postfix와 OpenDKIM 연동
Postfix 설정에 DKIM 연동을 추가합니다:
sudo vi /etc/postfix/main.cf
......
# DKIM 설정
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
......
6. 서비스 시작 및 확인
# OpenDKIM 서비스 시작
sudo systemctl start opendkim
sudo systemctl enable opendkim
# Postfix 재시작
sudo systemctl restart postfix
# 서비스 상태 확인
sudo systemctl status opendkim
sudo systemctl status postfix
7. DNS 레코드 추가
생성된 공개키를 DNS에 추가합니다:
# 공개키 확인
sudo cat /etc/opendkim/keys/example.com/mail.txt
DNS에 다음과 같은 TXT 레코드를 추가합니다:
여러줄로 되어 있는 경우 한 줄로 합쳐 줍니다.
mail._domainkey.example.com. IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
SPF 설정
DNS SPF 레코드 추가
도메인의 DNS 설정에서 다음 TXT 레코드를 추가합니다:
example.com. IN TXT "v=spf1 ip4:111.222.333.444 mx ~all"
SPF 레코드 구성 요소:
v=spf1
: SPF 버전ip4:111.222.333.444
: 허용된 IP 주소mx
: MX 레코드의 서버에서 발송 허용~all
: 기타 서버에서의 발송은 소프트 실패 (권장하지 않음)
더 엄격한 정책을 원한다면 ~all
대신 -all
을 사용할 수 있습니다.
DMARC 설정
DNS DMARC 레코드 추가
도메인의 DNS 설정에서 다음 TXT 레코드를 추가합니다:
_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; fo=1"
DMARC 레코드 구성 요소:
v=DMARC1
: DMARC 버전p=quarantine
: 정책 (none, quarantine, reject)rua
: 집계 보고서 수신 이메일ruf
: 포렌식 보고서 수신 이메일
설정 검증 및 테스트
1. DKIM 서명 확인
# 테스트 메일 발송
echo "DKIM 테스트 메일" | mail -s "DKIM Test" test@gmail.com
# 로그 확인
sudo tail -f /var/log/mail.log | grep -i dkim
2. DNS 레코드 확인
# sudo apt install dnsutils
# SPF 레코드 확인
dig TXT example.com | grep spf
# DKIM 레코드 확인
dig TXT mail._domainkey.example.com
# DMARC 레코드 확인
dig TXT _dmarc.example.com