BRSoo
[SMTP] SMTP 에 DKIM 적용 하기 본문
SMTP DKIM 적용 방법
▶ DKIM(DomainKeys Identified Mail) : DKIM은 야후(Yahoo)사와 CISCO사에
의해 공동 제안된 이메일 메시지 인증방법으로 발송도메인은 자신의 메일서버를 통해
발송되는 메일을 공개키 방식으로 서명하고 이를 수신도메인에서 확인함으로써 메시지
발송과정의 위∙변조를 원천적으로 방지할 수 있는 기술이다.
목차
1. Opendkim 을 이용한 키생성
2. domainZon 에 public 키 등록
3. opendkim 및 sendmail(리눅스) 를 이용한 dkim pass 확인
1. 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)
'Tech' 카테고리의 다른 글
[MySQL] swap메모리 사용과 Filesystem Cache (0) | 2016.10.21 |
---|---|
[Linux] -bash: fork: 자원이 일시적으로 사용 불가능함 (0) | 2016.10.20 |
[MySQL] innodb 와 myisam 차이 (0) | 2016.10.20 |