ライン

ポイント:*

ライン

 はじめに

mail/opendkim

 そろそろ迷惑メールに本格的な対処をする時代になりそうですし、準備を開始することにしました。
…といっても、それまでにも時間はかかるでしょうからのんびり用のページを開いておくだけです。

DomainKeys Identified Mail の略らしいです。だいぶ久々に利用再開です。以前は名前が違ったっけかな。

 導入

まずは入れる

 細かいことは抜きに導入をしてみました。

# pkg install opendkim
Updating repository catalogue
digests.txz                         100% 1083KB 541.6KB/s 283.1KB/s   00:02
packagesite.txz                     100% 4976KB 552.9KB/s 196.0KB/s   00:09
Incremental update completed, 23162 packages processed:
13567 packages updated, 192 removed and 72 added.
The following 4 packages will be installed:

        Installing lua52: 5.2.3_2
        Installing ldns: 1.6.17
        Installing unbound: 1.4.22_2
        Installing opendkim: 2.8.3_1

The installation will require 9 MB more space

2 MB to be downloaded

Proceed with installing packages [y/N]: n

あーっ。FreeBSD 10の影響でunboundを前提としているのか。
これは入れたくないですね(※今回はFreeBSD 9.2への導入)

# cd /usr/ports/mail/opendkim
# make config
# make install clean

こんなにしてみました。

インストールを開始しました。
最後の方では以下のようなメッセージが表示されて終わります。

Installing opendkim-2.8.3_1... done
************************************************************************

In order to run this port, write your opendkim.conf and:

if you use sendmail, add the milter socket `socketspec' in
/etc/mail/<your_configuration>.mc:

INPUT_MAIL_FILTER(`dkim-filter', `S=_YOUR_SOCKET_SPEC_, F=T, T=R:2m')

or if you use postfix write your milter socket `socketspec' in
/usr/local/etc/postfix/main.cf:

smtpd_milters = _YOUR_SOCKET_SPEC_


And to run the milter from startup, add milteropendkim_enable="YES" in
your /etc/rc.conf.
Extra options can be found in startup script.

Note: milter sockets must be accessible from postfix/smtpd;
  using inet sockets might be preferred.

************************************************************************

===>  Cleaning for lua52-5.2.3_2
===>  Cleaning for opendkim-2.8.3_1

書いてある通りなので、備忘録必要?
/etc/rc.confには、milteropendkim_enable="YES"を追加する。
人により異なるとは思うけど、sendmailをそのままMTAで使っているなら、/etc/mail/ホスト名.mcファイルがあるはず。
ここに
INPUT_MAIL_FILTER(`dkim-filter', `S=_YOUR_SOCKET_SPEC_, F=T, T=R:2m')dnl
みたいに追加しておけってことらしい。

_YOUR_SOCKET_SPEC_ って何になっているんだろう…というのは後回し。

/usr/local/etc/mail/opendkim.confに設定ファイルがある…ことになっているが、実際にはopendkim.conf.sampleが配置されているので、コピーして設定する。
800行近くあっても、コメントが開いているのは数えるほど。

Canonicalization        simple/simple
Domain                  example.co.jp
KeyFile                 /var/db/opendkim/example.co.jp.private
LogWhy                  yes
Mode                    sv
ReportAddress           (転送先)@gmail.com
Selector                example.co.jp
SendReports             yes
Socket                  local:/var/run/milteropendkim/socket
SubDomains              Yes
Syslog                  Yes
SyslogSuccess           yes

という設定にします。"_YOUR_SOCKET_SPEC_" に相当するのは、"/var/run/milteropendkim/socket" ということになります。

# mkdir /var/db/opendkim
# chmod 700 /var/db/opendkim
# chown mailnull:mailnull opendkim
# opendkim-genkey -D /var/db/opendkim -d example.co.jp -s example.co.jp
# cd /var/db/opendkim
# chown mailnull:mailnull *
# ll  /var/db/opendkim
total 8
-rw-------  1 mailnull  mailnull  887 May 17 10:37 example.co.jp.private
-rw-------  1 mailnull  mailnull  323 May 17 10:37 example.co.jp.txt

上記、example.co.jp.txtに相当するファイルには、DNSのTXTレコードの記述する情報が入っています。
これを参考に、ゾーンファイルに追加することにします。
※ここではDNSのゾーンファイルの記述方法の詳細は書きません。

_domainkey      IN      TXT     "t=y; o=~"
example.co.jp._domainkey  IN      TXT     "v=DKIM1; g=*; k=rsa; p=M~B"
_adsp._domainkey        IN      TXT"    dkim=unknown"

example.co.jp._domainkeyのexample.co.jp部分は、opendkim.confに記述したSelector に相当する内容です。
_adsp._domainkeyはRFCにある通りで記述しました。

以下で確認します。

# nslookup -q=txt example.co.jp._domainkey.example.co.jp
Server:         127.0.0.1
Address:        127.0.0.1#53

example.co.jp._domainkey.example.co.jp      text = "v=DKIM1\; g=*\; k=rsa\; p=M~B"

表示されました。

このタイミングで、OpenDKIMのデーモンを起動しましょう。

# service milter-opendkim start
# ps aux | grep opendkim|grep -v grep
      mailnull 46199   0.0  0.3  53196   9068 ??  Is    5:18PM    0:00.07 
     /usr/local/sbin/opendkim -l -u mailnull -P /var/run/milteropendkim/pid -x /usr/local/etc/mail/opendkim.conf

こんな感じです。

次は、sendmailの設定の追加です。/etc/mailにある自分の設定ファイルを編集(追加)しましょう。

INPUT_MAIL_FILTER(`dkim-filter', `S=local:/var/run/milteropendkim/socket, F=T, T=R:2m')dnl
define(`confINPUT_MAIL_FILTERS', `dkim-filter, (他に導入している場合は最初からあるもの)')dnl

上記2行の追加を行います。

# make cf install all restart

として、内容を反映します。問題なくあがりましたか?
折角なので、gmail宛にメールしてみました。

opendkim[-]: -: no signing domain match for 'HOST.example.co.jp'
opendkim[-]: -: DKIM-Signature field added (s=example.co.jp, d=example.co.jp)
sm-mta[-]: -: Milter insert (1): header: DKIM-Signature:  v=1; a=rsa-sha256; c=simple/simple; d=example.co.jp;
  \n\ts=example.co.jp; t=-; i=@example.co.jp;\n\tbh=~;\n\th=....

という(maillog内容)感じな内容。

受け取った側のメールのヘッダーでは、

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.co.jp;
	s=example.co.jp; t=-; i=@example.co.jp;
	bh=-;
	h=Date:From:To:Subject;
	b=~=

みたく加わっていました。

利用しているサーバには、いくつかのドメインが共存しています。
移行は、マルチドメインで利用する方法も検討と実装をします。

 マルチドメイン

opendkim.confに記載したKeyFile をコメントにして、KeyTableとSigningTableを追加するようです。
書き方はこの辺りを参照します。

#KeyFile                      /var/db/opendkim/example.o.jp.private
#RequireSafeKeys         No ←※ここは気にしないで
KeyTable                refile:/usr/local/etc/mail/opendkim-KeyTable
SigningTable            refile:/usr/local/etc/mail/opendkim-SigningTable

KeyTableには、SelectorとKeyFileの絶対パス名の記述をドメインごとに記述していきます。

さて、今回は別のドメインexample.comをこれまでと同じ秘密鍵を使って追加することにしました。
さきほどと同じ手順で別の鍵を作成・登録でも良いです。

#Selector                                                  KeyFile PATH
example.co.jp._domainkey.example.co.jp example.co.jp:example.co.jp:/var/db/opendkim/example.co.jp.private
example.co.jp._domainkey.example.com      example.com:example.co.jp:/var/db/opendkim/example.co..jp.private 

SigningTableファイルにはメールアドレスとSelectorを記述します。
SubDomains yesが効かない感じなので、サブドメインがあれば同様に追記します。

#E-mail          Selector
*@example.co.jp example.co..jp._domainkey.example.co.jp
*@HOST.example.co.jp example.co..jp._domainkey.example.co.jp
*@example.com example.co.jp._domainkey.example.co.jp

面倒なので割愛しますが、example.comのゾーンファイルも同様です。
上記に書いた3行を、まったく同じ内容でペーストしてあげればできあがりです。

# service milter-opendkim restart

これで設定ファイルを読み直して、利用すればちゃんと追加したドメイン側も利用できるようになりました。

受信しているメール側でも "DKIM verification successful" とかちゃんと出ています。※facebookmail.comなどよりのメール
SpamAssassinなどで、判定を利用できるようにするなどすれば、また精度をあげてくれそうな感じで楽しみです。

Copyright © 1996,1997-2006,2007- by F.Kimura,