サイトマップ | 連絡先 | IAjapan TOP
IAjapan 財団法人インターネット協会
有害情報対策ポータルサイト 迷惑メール対策編
  • 一般利用者の皆様へ
  • メール管理者の皆様へ
  • 関連情報
  • サイト紹介

DKIMとdkim-milterの導入 ―― Solaris 10での実例

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

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

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

    3. 動作確認

    すべての設定が完了したら、メールを受信してみる。正しく動くと、以下のように/var/log/syslogにログが記録される。

    Mar 11 21:55:39 www2.mvs.co.jp sendmail[28812]: [ID 801593 mail.info] l2BCtdfT02
    8812: Milter insert (1): header: Authentication-Results: www2.mvs.co.jp header.F
    rom=miz@mvs.co.jp; dkim=pass (1024-bit key/testing)
    Mar 11 21:55:39 www2.mvs.co.jp sendmail[28812]: [ID 801593 mail.info] l2BCtdfT02
    8812: Milter insert (1): header: X-DKIM: Sendmail DKIM Filter v0.6.1 www2.mvs.co
    .jp l2BCtdfT028812

    受信したメールには以下のヘッダが付く。

    X-DKIM: Sendmail DKIM Filter v0.6.1 www2.mvs.co.jp l2BCtdfT028812
    Authentication-Results: www2.mvs.co.jp header.From=miz@mvs.co.jp; dkim=pass (102
    4-bit key/testing)

    DKIMレコードが定義されていないサイトについては、Authentication-Results:ヘッダが付かない。

    4. 補足

    4.1 その他のOSについて

    dkim- milterはcで書かれたプログラムで、UNIX系では簡単にコンパイルし、稼働させることができる。Linuxではrpmまたはsrpmでより簡単に導入することができるディストリビューションもあるし、FreeBSDではportsから簡単に導入できる。ぜひ積極的に利用して欲しい。

    注: FreeBSD/SPARC64ではdkim-milterが正しく動作しない。

    4.2 参考資料

    dkim-milter

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

     
    リンク・転載・引用・ロゴ使用について | プライバシーポリシー | IAjapanについて | 連絡先