Postfix 에 도메인 키 인증 DKIM 설정 가이드
DKIM(DomainKeys Identified Mail)은 메일의 위/변조 여부를 확인 할 수 있게 해줌으로 메일 보안을 강화 시켜 줍니다.
DKIM 은 이메일이 발송되면 발신자의 메일 서버에서 메세지 내용과 발신자의 개인키를 기반으로 암호화된 서명을 메일 헤더에 첨부하고, 수신 메일 서버에서는 복호화 할 공개키를 DNS 서버에서 확인 후 위/변조 여부를 판별하게 됩니다. DKIM 은 RFC6376 문서에 명시되어 있습니다.
이번 가이드에서는 CentOS 7 에서 Opendkim 을 설치하고 Postfix 와 DKIM 을 연동하는 방법에 대해서 알아보도록 하겠습니다.
Opendkim 설치
[root@ 172 - 16 - 11 - 5 /]# yum install opendkim
[root@172-16-11-5 /]# yum install opendkim
[root@172-16-11-5 /]# yum install opendkim
키 디렉토리 생성
[root@ 172 - 16 - 11 - 5 /]# mkdir -p /etc/opendkim/keys/smtp.umount.net
[root@172-16-11-5 /]# mkdir -p /etc/opendkim/keys/smtp.umount.net
[root@172-16-11-5 /]# mkdir -p /etc/opendkim/keys/smtp.umount.net
키 생성
[root@ 172 - 16 - 11 - 5 /]# opendkim-genkey -D /etc/opendkim/keys/smtp.umount.net -d smtp.umount.net -s umount-dkim
[root@172-16-11-5 /]# opendkim-genkey -D /etc/opendkim/keys/smtp.umount.net -d smtp.umount.net -s umount-dkim
[root@172-16-11-5 /]# opendkim-genkey -D /etc/opendkim/keys/smtp.umount.net -d smtp.umount.net -s umount-dkim
파일 확인
[root@ 172 - 16 - 11 - 5 /]# ls /etc/opendkim/keys/smtp.umount.net/
umount-dkim.private umount-dkim.txt
[root@172-16-11-5 /]# ls /etc/opendkim/keys/smtp.umount.net/
umount-dkim.private umount-dkim.txt
[root@172-16-11-5 /]# ls /etc/opendkim/keys/smtp.umount.net/
umount-dkim.private umount-dkim.txt
소유자 변경
[root@ 172 - 16 - 11 - 5 /]# chown opendkim. /etc/opendkim/keys/smtp.umount.net/*
[root@172-16-11-5 /]# chown opendkim. /etc/opendkim/keys/smtp.umount.net/*
[root@172-16-11-5 /]# chown opendkim. /etc/opendkim/keys/smtp.umount.net/*
설정 파일 편집 (주요 설정 사항만 표시하였습니다. 본인의 환경에 맞게 수정해 주시기 바랍니다.)
: vi /etc/opendkim.conf
PidFile /var/run/opendkim/opendkim.pid
Socket inet:8891@localhost
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Socket inet:8891@localhost
Domain smtp.umount.net
Selector mail
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Socket inet:8891@localhost
Domain smtp.umount.net
Selector mail
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
: vi /etc/opendkim/KeyTable
umount-dkim._domainkey.smtp.umount.net smtp.umount.net:umount-dkim:/etc/opendkim/keys/smtp.umount.net/umount-dkim.private
umount-dkim._domainkey.smtp.umount.net smtp.umount.net:umount-dkim:/etc/opendkim/keys/smtp.umount.net/umount-dkim.private
umount-dkim._domainkey.smtp.umount.net smtp.umount.net:umount-dkim:/etc/opendkim/keys/smtp.umount.net/umount-dkim.private
: vi /etc/opendkim/SigningTable
*@umount.net umount-dkim._domainkey.smtp.umount.net
*@umount.net umount-dkim._domainkey.smtp.umount.net
*@umount.net umount-dkim._domainkey.smtp.umount.net
: vi /etc/opendkim/TrustedHosts
127.0.0.1
::1
localhost
*.umount.net
127.0.0.1
::1
localhost
*.umount.net
: vi /etc/postfix/main.cf (맨 아래줄에 추가해 줍니다.)
smtpd_milters = inet: 127.0 . 0.1 :8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2
opendkim systemd 등록 및 실행
[root@ 172 - 16 - 11 - 5 /]# systemctl enable opendkim
[root@ 172 - 16 - 11 - 5 /]# systemctl start opendkim
[root@172-16-11-5 /]# systemctl enable opendkim
[root@172-16-11-5 /]# systemctl start opendkim
[root@172-16-11-5 /]# systemctl enable opendkim
[root@172-16-11-5 /]# systemctl start opendkim
postfix 재실행
[root@ 172 - 16 - 11 - 5 /]# systemctl restart postfix
[root@172-16-11-5 /]# systemctl restart postfix
[root@172-16-11-5 /]# systemctl restart postfix
DNS 설정
사용하고 있는 DNS 에 DKIM 에서 생성된 KEY 를 TXT 레코드로 추가해 주어야 합니다.
우선 정보를 확인 합니다.
[root@ 172 - 16 - 11 - 5 /]# cat /etc/opendkim/keys/smtp.umount.net/umount-dkim.txt
umount-dkim._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr23YswFgJUZR79ZbONH3CIINcgIufjhQ+P5QFHrZKrrb3nxz20D/ktegKvxJY2LcR4jeqSBzI8A97/r4qVk0yQ7rqQuv0vqlNqv2t0cLlV04lTJnJDkaYovmbxpE93n036SJ8RQ7FvtHLBRy3XCArIjzyV9o2LO/CeU5PTyEX3wIDAQAB" ) ; ----- DKIM key umount-dkim for smtp.umount.net
[root@172-16-11-5 /]# cat /etc/opendkim/keys/smtp.umount.net/umount-dkim.txt
umount-dkim._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr23YswFgJUZR79ZbONH3CIINcgIufjhQ+P5QFHrZKrrb3nxz20D/ktegKvxJY2LcR4jeqSBzI8A97/r4qVk0yQ7rqQuv0vqlNqv2t0cLlV04lTJnJDkaYovmbxpE93n036SJ8RQ7FvtHLBRy3XCArIjzyV9o2LO/CeU5PTyEX3wIDAQAB" ) ; ----- DKIM key umount-dkim for smtp.umount.net
[root@172-16-11-5 /]# cat /etc/opendkim/keys/smtp.umount.net/umount-dkim.txt
umount-dkim._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr23YswFgJUZR79ZbONH3CIINcgIufjhQ+P5QFHrZKrrb3nxz20D/ktegKvxJY2LcR4jeqSBzI8A97/r4qVk0yQ7rqQuv0vqlNqv2t0cLlV04lTJnJDkaYovmbxpE93n036SJ8RQ7FvtHLBRy3XCArIjzyV9o2LO/CeU5PTyEX3wIDAQAB" ) ; ----- DKIM key umount-dkim for smtp.umount.net
위 정보를 바탕으로 자신이 사용하는 DNS 서버에 아래와 같은 형식으로 추가해 줍니다. 작성이 완료된 후에는 /etc/opendkim/keys/smtp.umount.net/umount-dkim.txt 파일은 삭제해도 상관은 없지만 실수로 DNS 정보를 변경했을 경우를 대비하여 어딘가에 잘 보관하는 것을 권장합니다.
호스트 : umount-dkim._domainkey.smtp.umount.net
값 : "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr23YswFgJUZR79ZbONH3CIINcgIufjhQ+P5QFHrZKrrb3nxz20D/ktegKvxJY2LcR4jeqSBzI8A97/r4qVk0yQ7rqQuv0vqlNqv2t0cLlV04lTJnJDkaYovmbxpE93n036SJ8RQ7FvtHLBRy3XCArIjzyV9o2LO/CeU5PTyEX3wIDAQAB"
호스트 : umount-dkim._domainkey.smtp.umount.net
타입 : TXT
값 : "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr23YswFgJUZR79ZbONH3CIINcgIufjhQ+P5QFHrZKrrb3nxz20D/ktegKvxJY2LcR4jeqSBzI8A97/r4qVk0yQ7rqQuv0vqlNqv2t0cLlV04lTJnJDkaYovmbxpE93n036SJ8RQ7FvtHLBRy3XCArIjzyV9o2LO/CeU5PTyEX3wIDAQAB"
호스트 : umount-dkim._domainkey.smtp.umount.net
타입 : TXT
값 : "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr23YswFgJUZR79ZbONH3CIINcgIufjhQ+P5QFHrZKrrb3nxz20D/ktegKvxJY2LcR4jeqSBzI8A97/r4qVk0yQ7rqQuv0vqlNqv2t0cLlV04lTJnJDkaYovmbxpE93n036SJ8RQ7FvtHLBRy3XCArIjzyV9o2LO/CeU5PTyEX3wIDAQAB"
모두 적용 후 메일을 발송하면 아래와 같이 maillog 에 DKIM-Signature 필드가 추가 되는 것이 나옵니다.
DKIM-Signature field added (s=umount-dkim, d=smtp.umount.net)
DKIM-Signature field added (s=umount-dkim, d=smtp.umount.net)
DKIM-Signature field added (s=umount-dkim, d=smtp.umount.net)
구글에서 제공되는 메일 헤더 분석기 를 사용하면 메일 헤더에 추가된 DKIM 적용 여부를 확인 할 있습니다.
구글 메일 헤더 분석기