IAjapanロゴ
有害情報対策ポータルサイト
−迷惑メール対策編−
■ トップ > メール管理者の皆様へ > 運用情報 > 実装の導入 > DKIMとdkim-milterの導入
サイト紹介 | 新着情報 | 一般利用者の皆様へ | メール管理者の皆様へ | 活動・関連情報
実装の導入 Sendmail編
実装の導入 postfix編
SPFとsid-milterの導入
―― Solaris10での実例
DKIMとdkim-milterの導入
―― Solaris10での実例
・DKIM とは
・動作確認
Submissionポートの適切な設定について
■ DKIMとdkim-milterの導入 ―― Solaris 10での実例        

寿限無株式会社
水越賢治
2008年3月

(2007年3月に実施された「NSUG Solaris 10ナイトセミナー(vol.8) 〜迷惑メール対策と送信ドメイン認証の実現〜 SPFを設定するぞ!!」で使用された資料を再掲したものです)

1. DKIM とは
2. 準備と設定
  2.1 dkim-milterソースの入手
  2.2 DNSサーバの設定
  2.3 コンパイルとインストール
  2.4 dkim-milterを動かす
  2.5 sendmail.cfを作る
3. 動作確認
4. 補足
  4.1. その他のOSについて
  4.2. 参考資料

 

■ 1. DKIM とは    

DKIM(DomainKeys Identified Mail)とは、迷惑メール送信の技法のひとつである送信ドメインの偽装に対応するために用意された技術。自分の組織のDNSで送信するメールサーバを宣言することと、受信するメールサーバ側で受信したメールについて送信ドメインの偽装がないかチェックするフィルタからなる。dkim-milterは受信メールサーバ側でチェックに使うSMTPフィルタープログラム。

 

■ 2. 準備と設定

Solaris 10に付属のsendmailのバージョンは8.13.7または8.13.8で、milterオプション付きでビルドされているため、sendmailを入れ替えることなくそのまま使うことができる。

# /usr/sbin/sendmail -bi -d0
Version 8.13.8+Sun
 Compiled with: DNSMAP LDAPMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8
                MIME8TO7 NAMED_BIND NDBM NETINET NETINET6 NETUNIX NEWDB NIS
                NISPLUS PIPELINING SCANF STARTTLS TCPWRAPPERS USERDB
                USE_LDAP_INIT XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
      (short domain name) $w = www2
  (canonical domain name) $j = www2.mvs.co.jp
         (subdomain name) $m = mvs.co.jp
              (node name) $k = www2.mvs.co.jp
========================================================

sendmailのコンパイル情報が表示される。“MILTER”オプションがついているので、このsendmailではmilterを使用できる。

 

2.1 dkim-milterソースの入手

以下のURLから入手する。

http://sourceforge.net/projects/dkim-milter/

バージョンは、0.6.1 (2007年3月13日現在)。dkim-milterは活発に開発されているので、頻繁にバージョンが上がっている。

 

2.2 DNSサーバの設定

DNSサーバに自分のドメインが使用するメールサーバのホスト情報を書いておく。受信フィルタ側、たとえばsid-milterはこのSPFレコードを受信したメールと照合し、正しいホストから送信されたメールかどうかを判定する。

dkim-milterのソースコードにdomain Keyを生成するスクリプトgentxt.cshが付属しているので、これを利用するのが簡単である。鍵長は1024bitになっているので、変更したい場合はスクリプトを修正する。

# gentxt.csh key1 mvs.co.jp
key1._domainkey IN TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBi
QKBgQDAH/iZxoc0ltw1gE/uQXYPbUCpq6RQRkWuqojZScDmOXBm2kjTTMZH/WKX7F4MNrj+jXJ4lvQjF
4qDLuEmJJRX8a5eym6ZcrObAh0iSSfvGnAXzIzJHuTy1wsjJRK0DkY5xH/5DQszJtfYjFt8Q2VcxTCIg
26NI+aDiEDOg/CXKQIDAQAB" ; ----- DKIM key1 for mvs.co.jp

ワーキングディレクトリに鍵ペアkey1.publicとkey1.privateが生成される。これを所定のディレクトリにコピーする。この例では/etc/mailにコピーする。

標準出力にDNSに登録するレコード情報が表示されるので、これをDNSのゾーンに登録する。SPFと同様にTXT属性とする。

key1._domainkey.mvs.co.jp.  IN  TXT     "..... "

レコードの説明

  • “v=DKIM1” DKIM1バージョンの書式
  • “k-rsa” 鍵はRSA形式
  • “t=y” テストモード yes

DNSの宣言はあくまでも送信側のドメイン公開鍵情報を宣言するのみで、メール送信サーバ側はこの鍵によってメッセージに署名する必要がある。受信側サーバはDNSの公開鍵を入手し、その鍵で受信したメッセージの署名を確認する。これによってメッセージヘッダの改ざんがないか確認できる。

 

2.3 コンパイルとインストール

Solaris 10をEntire Distributionでインストールすれば、プログラムのコンパイルに必要な開発ツールやライブラリは揃っている。実際にコンパイルするには必要なツールが起動されるように、PATHを正しく設定する。コンパイルはBuildスクリプトを実行するだけでOK。

# PATH=/usr/sfw/bin:/usr/ccs/bin:/usr/local/bin:/usr/bin:/usr/sbin
# export PATH
# gzcat dkim-milter-0.6.1.tar.gz | tar xvf -
# cd dkim-milter-0.6.1
# sh Build
# cd obj.SunOS.5.10.sun4/dkim-filter
# cp dkim-filter /usr/local/libexec/

Buildスクリプトでインストールもできるが、milterプログラム以外もインストールされてしまうので、プログラム本体をコピーしてもよい。

 

2.4 dkim-milterを動かす

インストールしたdkim-filterを起動する。オプションなしで起動すると、使用できるオプションが表示される。

# /usr/local/libexec/dkim-filter help
dkim-filter: usage: dkim-filter -p socketfile [options]
-a peerlist     file containing list of hosts to ignore
-A              auto-restart
-b modes        select operating modes
-c canon        canonicalization to use when signing
-C config       configuration info (see man page)
-d domlist      domains to sign
-D              also sign subdomains
-f              don't fork-and-exit
-h              append identifying header
-i ilist        file containing list of internal (signing) hosts
-I elist        file containing list of external domain clients
-k keyfile      location of secret key file
-l              log activity to system log
-L limit        signature limit requirements
-m mtalist      MTA daemon names for which to sign
-M macrolist    MTA macros which enable signing
-P pidfile      file to which to write pid
-s selector     selector to use when signing
-S signalg      signature algorithm to use when signing
-u userid       change to specified userid
-v version      spec version to use when signing
-V              print version number and terminate
-x conffile     read configuration from conffile

sendmailとの通信はソケットを使用する。

# /usr/local/libexec/dkim-filter -l -D -h -p local:/var/run/dkim-filter -P /var/
sun/dkim-filter.pid -d www2.mvs.co.jp -k /etc/mail/key1.private -s key1

-bオプションの指定で、署名のみ確認のみ、両方の指定ができる。きちんと動かすには、rcスクリプトを用意して自動起動する。

rcスクリプトの例

#!/sbin/sh
#
#ident  "@(#)dkim-filter 1.0     2006/11/15 miz"
milter="/usr/local/libexec/dkim-filter"
milter_domain="www2.mvs.co.jp"
milter_sock="local:/var/run/dkim-filter"
milter_pid="/var/run/dkim-filter"
milter_key="/etc/mail/key1.private"
milter_selector="key1"
milter_flags="-l -D -h"
milter_opt="${milter_flags} -p ${milter_sock} -P ${milter_pid} -d ${milter_domain} -k 
${milter_key} -s ${milter_selector}"
case "$1" in
start)
        exec $milter $milter_opt
        ;;
stop)
        pkill dkim-filter
        rm -f /var/run/dkim-filter
        ;;
*)
        echo "Usage: $0 { start | stop }"
        exit 1
        ;;
esac
exit 0

 

2.5 sendmail.cfを作る

SMTPフィルターを呼び出すようにsendmail.cfを作成してインストールする。Solaris10にはm4 cfが付属しているので、簡単に作成できる。

# cd /etc/mail/cf/cf
# cat www2.mc
      divert(-1)
      #
      #
      divert(0)dnl
      VERSIONID(`@(#)www2.mc  1.0 (miz) 06/21/2004')
      OSTYPE(`solaris8')dnl
       DOMAIN(`solaris-antispam')dnl
      INPUT_MAIL_FILTER(`dkim-filter',`S=local:/var/run/dkim-filter,F=T,T=R:2m')dnl 
          ↑ この行を追加
      MAILER(`local')dnl
      MAILER(`smtp')dnl

mcファイルを修正したらsendmail.cfを作成し、sendmailを再起動する。

# make www2.cf
# cp www2.cf /etc/mail/sendmail.cf
# svcadm restart sendmail

 

   
《NEXT》
IAjapanについて | 連絡先 | リンク・転載・引用・ロゴ使用について | プライバシーポリシー
 (c) 2001-2009 Internet Association Japan