Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

BRSoo

[SMTP] SMTP 에 DKIM 적용 하기 본문

Tech

[SMTP] SMTP 에 DKIM 적용 하기

BR-soo 2016. 10. 20. 14:57

SMTP DKIM 적용 방법

 



 

▶ DKIM(DomainKeys Identified Mail) : DKIM은 야후(Yahoo)사와 CISCO사에

의해 공동 제안된 이메일 메시지 인증방법으로 발송도메인은 자신의 메일서버를 통해

발송되는 메일을 공개키 방식으로 서명하고 이를 수신도메인에서 확인함으로써 메시지

발송과정의 위∙변조를 원천적으로 방지할 수 있는 기술이다.

 

 

목차

1. Opendkim 을 이용한 키생성

2. domainZon 에 public 키 등록

3. opendkim 및 sendmail(리눅스) 를 이용한 dkim pass 확인


 

1. Opendkim 을 이용한 키생성


Opendkim 설치
 - 저장소 init centOS 5 버전대
# wget -P /tmp http://mirror.pnl.gov/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -Uvh /tmp/epel-release-5-4.noarch.rpm
# rm -f /tmp/epel-release-5-4.noarch.rpm
 
- 저장소 init centOS 6 버전대
# wget -P /tmp http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -Uvh /tmp/epel-release-6-8.noarch.rpm
# rm -f /tmp/epel-release-6-8.noarch.rpm
 
 - opendkim 설치
# yum install opendkim

 

 

 

 키생성

# cd /etc/opendkim/keys/
# mkdir /mydomain.co.kr
# opendkim-genkey -D /etc/opendkim/keys/mydomain.co.kr -d mydomain.co.kr -s selector
# ls -al /etc/opendkim/keys/mydomain.co.kr

::: 생성후 selector.txt 는 공개키로 도메인존에 설정 하고 selector.private 는 개인키 로 smtpClient에서 발송시 사용한다.

 

 


2. domainZone 에 공개키 등록


 mydomain.co.kr.zone 파일 수정 (DNS)

# vim /var/named/mydomain.co.kr.zone

::: 생성된 selector.txt 에서 ;뒤에 있는 문자열은 삭제하고 도메인존에 등록 한다

::: zone에서 line에 등록할수 있는 value의 length 가 255가 넘어가게 되면 정상등록 되지 않음으로 아래와 같이 쌍따음표로 분리 한후 등록 진행 한다.

::: 적용후 dig 혹은 nslookup 으로 레코드를 확인한다

::: 예) # dig selector._domainkey.mydomain.co.kr txt


 


3. opendkim 및 sendmail(리눅스) 를 이용한 dkim pass 확인 (생성된 키 파일 테스트)


 opendkim 설정

# vim /etc/opendkim.conf
AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
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

::: 저장종료

 


 TrustedHosts 수정

# vim /etc/opendkim/TrustedHosts
127.0.0.1
localhost
mydomain.co.kr

::: 저장종료

 

KeyTable 수정

# vim /etc/opendkim/KeyTable
selector._domainkey.mydomain.co.kr mydomain.co.kr:selector:/etc/opendkim/keys/mydomain.co.kr/selector.private

::: 저장종료

 

SigningTable 수정

# vim /etc/opendkim/SigningTable
*@mydomain.co.kr selector._domainkey.mydomain.co.kr

::: 저장종료

 


 sendmail 설정

# vim /etc/mail/sendmail.mc
::: 맨 하단에 추가 아래문구 추가.
INPUT_MAIL_FILTER(`opendkim',`S=inet:8891@localhost')dnl
::: 저장종료
# cd /etc/mail/
# m4 sendmail.mc > sendmail.cf


 

 opendkim 서비스 시작 및 sendmail 재시작

# service opendkim start
# service sendmail restart


 

 테스트 용 메일마임 생성

# cd ~/
# vim mailtest.txt
From: “tester”
To: 수신이메일
Subject: Sendmail DKIM Test
 
This is DKIM Test Email
Thanks.

::: 저장종료


 

 Sendmail 을 이용한 메일발송

# sendmail -t < mailtest.txt



 해더 분석

::: tail -f /var/log/maillog 를 통해 opendkim 이 정상 작동 했는지 확인 한다.

::: 도착한 메일의 [원본보기] 를 클릭하여 헤더에 DKIM-Signature 가 있는지 확인한다.

::: 메일 헤더 에서 Authentication-Results: 에 dkim=pass 인것을 확인한다. (수신서버 마다 dkim을 확인 하는곳, 하지 않느곳이 있음, 2016년 8월 15일 현재 국내 수신업체(naver, daum, nate 등)는 체크를 안하는것으로 확인됨, 해외 업체 gmail, yahoo 등은 확인 가능)

::: dkim이 pass 이면 정상적용, neutral 혹은 fail 이면 실패다.

 

 



본인이 사용하고 있는 SMTP는 apache 의 commons-net 을 이용한 SMTPClient 와 SimpleSMTPHeader 를 이용하여 발송을 한다.

DKIM을 적용 하기 위해서 아래와 같이 2개의 lib를 이용하고, 오픈소스인 javaDKIM-1.0.2.jar 를 smtp에 맞게 수정하여 사용하고 있다.

 - JavaDKIM-1.0.2.jar (DKIM-Signature generator)

 - PrivateKeyReader.java (PrivateKey load)


 

Comments