Support DK-MILTER for Sendmail
이 문서는 안녕에서 제공되는 sendmail 에 Yahoo! 의 ANTI SPAM 정책 Domain Key 를 사
용할 수 있도록 하기 위한 문서이다. 안녕에서 제공하는 dl-milter 를 사용하기 위해서
는 안녕 리눅스의 sendmail 8.13.5-2 버전 이후부터 가능하다.
1. dk-milter 설치
dk-milter 설치는 안녕의 Packages system 을 이용하여 할 수 있다.
Hanterm - pkgadd -u dl-milter |
[oops@main dir]$ pkgadd -u dk-milter
dk-milter :
==> 의존성 패키지 sendmail-cf 성공
==> dk-milter Update 성공
[oops@main dir]$
|
dk-milter 등 안녕 리눅스에서 제공하는 milter 들은 sendmail-cf package 에 의해서
제어가 되므로 위와 같이 의존성 패키지로 같이 설치가 된다. 이미 설치가 되어 있다
면 위와 같이 출력되지는 않는다.
2. Key 생성
Domain Key 는 private key 와 public key 그리고 public key 를 DNS 에 등록을 하여
인증을 하는 구조이다. 이 문서는 dk-milter 를 사용하기 위한 문서이므로 이에 대한
자세한 사항은 http://elancer.co.kr 의 Domain Key 문서를 참조하도록 한다.
안녕의 dk-milter 는 설치시에 키가 존재하지 않으면 기본으로 hostname 을 이용하여
키를 자동으로 생성하도록 되어 있다. /usr/share/ssl/certs/dk-milter 를 보면 생성
된 키를 볼 수 있다. 키가 자동 생성이 되어 있더라도 다시 생성하도록 한다.
안녕에서는 Domain Key 를 생성하기 위하여 dk-milter-sec 라는 명령을 제공한다.
Hanterm - dk-milter-sec <selector> [<domain>] |
[oops@main dir]$ dk-milter-sec --help
USAGE: /usr/sbin/dk-milter-sec [keyname] [domain]
[oops@main dir]$
|
dk-milter-sec 는 2 개의 인자를 가지고 명령을 수행한다. 첫 번째 인자인 keyname
(또는 selector 라고 한다.) 은 Domain Key 의 key 를 매치하기 위하여 사용할 값을
지정한다. 어렵게 생각하지 말고 맘에 드는 단어 하나를 만들면 된다. 2번째 인자인
domain 은 dk-milter 가 설치된 서버에서 발송이 되는 메일에 대하여 DNS 인증을 위
한 도메인을 지정한다. 대충 메일 주소에 사용할 도메인을 지정하면 된다.
여기서 서버에 메일 주소로 사용하는 도메인이 여러개일 경우 고민을 하게되는데, 고
민할 필요 없이 그 중에 하나만 지정하면 된다. (이는 도메인 질의를 위해 필요한 것
이기 때문이다.)
Hanterm - dk-milter-sec yellow oops.org |
[oops@main dir]$ dk-milter-sec -y yellow oops.org
[oops@main dir]$ ls /usr/share/ssl/certs/dk-milter
dk-milter.pem gentxt.sh yellow._domainkey.oops.org
yellow.private yellow.public
[oops@main dir]$
|
3. dk-milter 설정
/etc/sysconfig/dk-milter 에서 다음의 설정값을 확인하도록 한다.
Hanterm - dk-milter-sec yellow oops.org |
[oops@main dir]$ vi /etc/sysconfig/dk-milter
# sign 한 도메인 이름
dkey="oops.org"
# key path
# /usr/sbin/dk-milter-sec signkey hostname 를 실행하면
# /usr/share/ssl/certs/dk-milter 에 pem 파일이 생성됨
keypath="/usr/share/ssl/certs/dk-milter/dk-milter.pem"
# sign 시에 사용할 Selector
selector="yellow"
[oops@main dir]$
|
위의 3 옵션의 값을 2 번 section 에서 키를 만들 때 사용했던 selector 와 domain,
그리고 생성된 key file 을 설정에 반영해 주도록 한다.
4. dk-milter 등록
/etc/mail/sendmail.mc 를 /etc/mail 에 hostname.mc 로 하나를 복사해 놓도록 한다.
다음 hostname.mc 의 가장 마지막 라인 "dnl OOPS" 상단에 다음과 같이 설
정을 하도록 한다.
Hanterm - cat /etc/mail/hostname.mc |
[oops@main dir]$ cat /etc/mail/hostname.mc
MAILER(smtp)dnl
MAILER(procmail)dnl
INPUT_MAIL_FILTER(
`dk-filter',
`S=local:/var/lib/dk-milter/dk-filter.sock, T=C:1m;S:1m;R:1m;E:5m'
)dnl
dnl OOPS
[oops@main dir]$ m4 /etc/mail/hostname.mc > /etc/mail/sendmail.cf
[oops@main dir]$ /etc/init.d/sendmail restart
Shutting down spfmilter: [ 확인 ]
clamav-milter를 종료하고 있습니다: [ 확인 ]
Shutting down dk-milter: [ 실패 ]
sendmail를 종료하고 있습니다: [ 확인 ]
Starting spfmilter: [ 확인 ]
clamav-milter (을)를 시작합니다: [ 확인 ]
Start dk-milter: [ 확인 ]
sendmail (을)를 시작합니다: [ 확인 ]
[oops@main dir]$
|
hostname.mc 에 dk-milter 를 등로한 후, m4 명령으로 sendmail.cf 를 재생성 한다.
재 생성 후에 sendmail 을 재 구동하면 dk-milter 까지 같이 구동이 된다.
5. Domain Key 등록
4 번 섹션까지 설정을 했다면 서버에서의 설정은 완료 되었다. 이제 마지막으로 도메
인키를 DNS 에 등록할 차례이다.
2 번 섹션에서 생성한 파일중 ._domainkey. 파일에 DNS 등록을 위
한 값이 생성이 되어 있다.
Hanterm - cat /usr/share/ssl/certs/dk-milter/yello._domainkey.oops.org |
[oops@main dir]$ cat /usr/share/ssl/certs/dk-milter/yello._domainkey.oops.org
yellow._domainkey IN TXT "g=; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4G
NADCBiQKBgQCp0wDJRB/ByFf0T2mbcRjo3kyNWJZuikV3WhGrJJsDuD1h5vUowHLmvU
n5gbATUT/YriKcayat2lxSmGopWUVKeqTD 4Nz2GIUbDUp417KI01YqQn+B3wQFGCKV
s4MgDQZfXZx82G1iDP4lnFfzJ/h/ZIE6 oK8O4oFvVn4ZZPlSSQIDAQAB" ;
----- DomainKey yellow for oops.org
[oops@main dir]$
|
위의 예제는 보기 좋기 하기 위하여 여러줄로 나누어 놓았지만 실제로는 한줄로 나온
다. 위의 출력 중 붉은색 부분인 따옴표 안의 내용을 복사하여 DNS 에 등록을 한다.
key 를 생성할 때 사용한 domain 을 관리하는 zone file 에서 다음과 같이 등록을 하
도록 한다.
Hanterm - cat oops.zone |
[oops@main dir]$ cat oops.zone
...
yello._domainkey.oops.org. 60 IN TXT "g=; k-rsa; t=y; p=MIG....DAQAB"
...
[oops@main dir]$
|
등록 완료 후에 DNS 를 reload 하도록 한다. zone 에 등록되는 도메인 형식은
SELECTOR._domainkey.DOMAIN. 60 IN TXT "KEY CONFIG"
의 형식으로 등록을 한다.
6. 확인
다음의 dig 와 nslookup 명령으로 DNS 등록을 확인하도록 한다.
Hanterm - cat oops.zone |
[oops@main dir]$ dig +short <selector>._domainkey.<domain> txt
[oops@main dir]$ nslookup
> set q=txt
> <selector>._domainkey.<domain>
[oops@main dir]$
|
등록이 된 것을 확인을 했다면
http://domainkeys.sourceforge.net/selectorcheck.html
에서 유효성 확인을 하도록 한다.
"This selector appears valid "
라고 나온다면 제대로 설정이 된 것이다.
여기까지 작업을 마쳤다면, 이제 Domain Key 를 제공하는 Gmail 이나 Yahoo! Mail
에서 메일을 보내고 받고 해 보도록 한다. 주고 받은 메일의 헤더에서
Authentication-Results: main.oops.org from=addr; domainkeys=pass (testing)
DomainKey-Status: good (test mode)
와 같은 헤더를 찾아 보도록 한다.
참고로 Goolge 에서 받는 메일은 DomainKey-Status 가 남으며, dk-milter 가 설치된
서버에서 받은 메일에는 Authentication-Results 헤더가 남게 된다.
|