DKIM設定

  • 投稿日:
  • by
  • カテゴリ:

さてSPFに続いて、DKIMの設定を行う。

まずはdkimを入れる呪文。

# apt-get install opendkim opendkim-tools

色々な設定方法がネットに落ちているが、debian10(Buster)でインストールしたバイナリは以下のことに注意する。

  • /etc/opendkim.confを参照する。
  • opendkim はroot権限で動く。
  • pidファイルは /var/run/opendkim/opendkim.pid となる。

なお、データファイルを /etc/mail , /etc/mail/keys に纏めた。/etc/opendkim なるディレクトリを作って、そこに纏めたほうが、第三者から見て見やすいかとは思う。

opendkim.confの雛形は /usr/share/doc/opendkim/examples/ 以下にある。

# cp -p /usr/share/doc/opendkim/examples/opendkim.conf.sample.gz /etc/

こいつを/etc/mail 以下に解凍し、opendkim.conf.example を /etc/opendkim.conf としてコピー保存する。また、秘密鍵を保存する /etc/mail/keys ディレクトリを作って、パーミッションを700にする。

# gunzip opendkim.conf.sample.gz
# cp -p opendkim.conf.sample opendkim.conf
# mv opendkim.conf ..
# mkdir keys
# chmod 700 keys

秘密鍵と公開鍵を"opendkim-genkey"で作成する

# opendkim-genkey -b 2048 -s 20200612hsol -d h-sol.jp
# ls
20200612hsol.private 20200612hsol.txt
#

秘密鍵公開鍵ができた。

公開鍵の.txtは、bindのzoneファイルに貼れるようになっている(Zoneファイルの書き方で後述)

次に /etc/mail/ 以下にsigning.table と key.table なるファイルを作る。/etc/opendkim.conf で場所を定義して、参照される。

# cd /etc/mail
# vi signining.table
*@h-sol.jp h-sol
#vi key.table
h-sol h-sol.jp:20200612hsol:/etc/mail/keys/20200612hsol.private
# vi trusted.hosts
127.0.0.1
::1
localhsot
153.127.50.48
ik1-423-43544.vs.sakura.ne.jp
h-sol.jp
#

パーミッションの設定


# ls
keys key.table m4 opendkim.conf.sample signining.table trusted.hosts
# chmod 644 *
# mv m4 .m4
# chown -R opendkim:opendkim *
# chmod 700 keys
# cd /etc/mail/keys
# chmod -R 600 *
# ls
20200612hsol.private 20200612hsol.txt
# ls -al
total 16
drwx------ 2 opendkim opendkim 4096 Jun 12 10:07 .
drwxr-xr-x 4 root root 4096 Jun 12 10:08 ..
-rw------- 1 opendkim opendkim 1679 Jun 12 09:48 20200612hsol.private
-rw------- 1 opendkim opendkim 514 Jun 12 09:48 20200612hsol.txt
# cd ..
# ls -al
total 52
drwxr-xr-x 4 root root 4096 Jun 12 10:08 .
drwxr-xr-x 81 root root 4096 Jun 12 09:44 ..
drwx------ 2 opendkim opendkim 4096 Jun 12 10:07 keys
-rw-r--r-- 1 opendkim opendkim 64 Jun 12 10:04 key.table
drw-r--r-- 2 root root 4096 Jun 12 09:34 .m4
-rw-r--r-- 1 opendkim opendkim 21800 May 11 2015 opendkim.conf.sample
-rw-r--r-- 1 opendkim opendkim 17 Jun 12 10:04 signining.table
-rw-r--r-- 1 opendkim opendkim 77 Jun 12 10:05 trusted.hosts
#

/etc/opendkim.conf と /etc/default/opendkim の設定

# cd /etc/default
# vi opendkim
# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
#DAEMON_OPTS=""
# Change to /var/spool/postfix/var/run/opendkim to use a Unix socket with
# postfix in a chroot:
#RUNDIR=/var/spool/postfix/var/run/opendkim
RUNDIR=/var/run/opendkim
#RUNDIR=/run/opendkim
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
# default:
# SOCKET=local:$RUNDIR/opendkim.sock
#local:/var/spool/postfix/opendkim/opendkim.sock
# listen on all interfaces on port 54321:
#SOCKET=inet:54321
# listen on loopback on port 12345:
#SOCKET=inet:12345@localhost
# listen on 192.0.2.1 on port 12345:
#SOCKET=inet:12345@192.0.2.1
#USER=opendkim
#GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=

root で稼働するので以下の設定は不要

# adduser postfix opendkim

bindの設定

# vi /etc/bind/named.conf.local

zone "h-sol.jp" {
check-names ignore;
type master;
file "/etc/bind/h-sol_zone";
};

zone "50.127.153.in-addr.arpa" {
type master;
file "/etc/bind/h-sol.rev";
};

#

ここで再起動、少なくとも10分待つ。

$ sudo su
# cd /etc/mail/keys
# opendkim-testkey -d h-sol.jp -s 20200612hsol -k 20200612hsol.private -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: key loaded from 20200612hsol.private
opendkim-testkey: checking key '20200612hsol._domainkey.h-sol.jp'
opendkim-testkey: key not secure
opendkim-testkey: key OK
#

ここで

OKが出ればOK

-----------------------------------------------------------

ここからドツボにハマる

root@ik1-423-43544:/etc/postfix# opendkim-testkey -d h-sol.jp -s 20200612hsol -k /etc/mail/keys/20200612hsol.private -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: key loaded from /etc/mail/keys/20200612hsol.private
opendkim-testkey: checking key '20200612hsol._domainkey.h-sol.jp'
opendkim-testkey: key not secure
opendkim-testkey: key OK
root@ik1-423-43544:/etc/postfix#

これはOK

root@ik1-423-43544:/etc/postfix# dig 20200612hsol._domainkey.h-sol.jp txt

; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> 20200612hsol._domainkey.h-sol.jp txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31415
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 260c0fceb55cd654a53da80b5ee41eb52c617f5119eca5e4 (good)
;; QUESTION SECTION:
;20200612hsol._domainkey.h-sol.jp. IN TXT

;; ANSWER SECTION:
20200612hsol._domainkey.h-sol.jp. 600 IN TXT "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxlYXhq6irYb7SnoiEZDYtiJz+9XOCh5zlYSAsezikPcAheXwDlhwrH20/y10isRo0m2uP4LD14A4wqbndM2C9FmnQZ1C2T+P/oO9LvqT1tnCEVf8EUIkylqf1aXEHs4+T5QQSeZIJc1NYNODPi10GpzwK6GMwc5eZNeOC4Li77CEeeTGZfRdhFlHaUtoEjiQ7y44JwxYqhcWf" "y+FduIfMTuSttMJ61EFJ6kO2LgaQig0w2yGddp1AY1uTr1+LfC5P2LT9OAhCrTlxuuqi/0I8pfRXYzrXvrqkNh5bPAeM6MTucXaVq53H8QYSCGFy/s3TFJ4+CdBN5QSejUeIaAjQIDAQAB"

;; AUTHORITY SECTION:
h-sol.jp. 600 IN NS ns1.dns.ne.jp.
h-sol.jp. 600 IN NS ns2.dns.ne.jp.

;; ADDITIONAL SECTION:
ns1.dns.ne.jp. 31773 IN A 61.211.236.1
ns2.dns.ne.jp. 31773 IN A 133.167.21.1

;; Query time: 0 msec
;; SERVER: 153.127.50.48#53(153.127.50.48)
;; WHEN: Sat Jun 13 09:32:53 JST 2020
;; MSG SIZE rcvd: 599

root@ik1-423-43544:/etc/postfix#

これもOKみたいだ。

----------------------------------------------------

長い試行錯誤を経て、

opendkim は rootで動く。→ /etc/mail /var/run/opendkim のパーミッション注意。

/etc/opendkim.conf は opendkim.conf.sample から、下記の様に書き換える。

# diff mail/opendkim.conf.sample opendkim.conf
129a130
> Canonicalization relaxed/simple
162c163
< Domain example.com
---
> Domain h-sol.jp
203a205
> ExternalIgnoreList /etc/mail/trusted.hosts
229a232
> InternalHosts /etc/mail/trusted.hosts
247c250,251
< KeyFile /var/db/dkim/example.private
---
> # KeyFile /var/db/dkim/example.private
> KeyFile /etc/mail/keys/20200612hsol.private
258a263
> KeyTable /etc/mail/key.table
339c344
< # Mode sv
---
> Mode sv
359c364,368
< # MultipleSignatures no
---
> # MultipleSignatures yes
> # KeyTable /etc/mail/key.table
> # SigningTable refile:/etc/mail/signing.table
> # ExternalIgnoreList /etc/mail/trusted.hosts
> # InternalHosts /etc/mail/trusted.hosts
434a444
> PidFile /run/opendkim/opendkim.pid
572c582,583
< Selector my-selector-name
---
> # Selector my-selector-name
> Selector 20200612hsol
632a644
> SigningTable refile:/etc/mail/signing.table
660c672,674
< Socket inet:port@localhost
---
> #Socket inet:port@localhost
> Socket inet:8891@localhost
> #Socket local:/var/spool/postfix/opendkim/opendkim.sock
#