foxmaster.jpメールサービスにDKIMを適用しました

たいとる(´・ω・`)おんりぃ。(コラ

rootを使えてネームサーバーのレコードを弄れるのであればそれほど難しいことではないかと思います。

参考サイト:
PostfixにDKIMの設定をする(blog.fetus.jp)
OpenDKIM(ArchWiki)

以下設定については随時更新予定。やりかたはほぼ参考サイトの通りでOKです。

1.OpenDKIMのインストール

普通にEPELからYumでOpenDKIMをインストールするだけ。以上w

2.DKIM鍵の生成

秘密鍵とネームサーバーに登録する公開鍵の設定をします。
本当は鍵長を2048bitにしたかったのですが、収容サービスのネームサーバーではTXTレコードが256文字までしか使えなかったため、やむなくデフォルトの1024bitにしました。
参考までに、登録するレコード長が 1024bitで240文字強、2048bitでは410文字強となります。

# mkdir /etc/opendkim/keys/foxmaster.jp
# cd /etc/opendkim/keys/foxmaster.jp/
# opendkim-genkey -d foxmaster.jp -s 20170201
# ls -l
合計 8
-rw------- 1 root root 887  2月  1 08:35 2017 20170201.private
-rw------- 1 root root 314  2月  1 08:35 2017 20170201.txt
# chown -R opendkim. /etc/opendkim/keys/foxmaster.jp
# chmod 700 /etc/opendkim/keys/foxmaster.jp

-s オプションで指定している文字列は任意ですが、判りやすいように作成日としました。
秘密鍵 20170201.private と公開鍵 20170201.txt が作成されます。
該当ファイルに他者がアクセスできないよう、所有者とパーミッションを変更しておきます。

3.ネームサーバーにDKIM公開鍵を登録

公開鍵をネームサーバーに登録します。

# cat /etc/opendkim/keys/foxmaster.jp/20170201.txt
20170201._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
	  "p=MIGfMA0G … jwIDAQAB" )  ; ----- DKIM key 20170201 for foxmaster.jp

「20170201._domainkey」というサブドメインを作成し、TXTレコードに先ほどの文字列を設定します。
このサブドメインにはAレコード等は不要です。
文字列が長いため複数行に別れていますが、「v=DKIM1;~AQAB」までを1行にまとめて登録します。

登録したらDNSレコードがある程度反映されるまで1回休み。

4.OpenDKIMの設定

先ほど登録したTXTレコードが dig で引けるようになったら、手始めに /etc/sysconfig/opendkim

AUTOCREATE_DKIM_KEYS=NO

って書いておくと 幸せになれます 起動時に余計なエラーが表示されなくなります。

次に /etc/opendkim.conf を編集します。
該当サーバーは複数ドメインを収容しているので、一覧は別ファイルにまとめます。
修正する箇所はつぎのようになります。

Mode sv
#KeyFile        /etc/opendkim/keys/default.private (コメントアウト)
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

これだけでも充分ですが、TCPソケットではなくUnixソケットを使用するため更に修正します。

##  Create a socket through which your MTA can communicate.
#Socket  inet:8891@localhost
Socket  local:/var/run/opendkim/opendkim.sock

/etc/opendkim/KeyTable にドメインとDKIMセレクタ名、秘密鍵のファイルパスを記載します。

20170201._domainkey.foxmaster.jp foxmaster.jp:hoge:/etc/opendkim/keys/foxmaster.jp/20170201.private

/etc/opendkim/KeyTable に署名を適用するメールアドレスとDKIMセレクタ名を記載します。

*@foxmaster.jp 20170201._domainkey.foxmaster.jp

なお、/etc/opendkim/TrastedHost はデフォルトのまま(ローカルホストIPアドレスが記載されている)でOK。(無論SMTPを別サーバーで稼働させている場合はそのアドレスを記載する必要があると思います)

このままだと Postfix がUnixソケットにアクセスできず OpenDKIM と通信できないできないため、ディレクトリのパーミッションを弄ります。(TCPソケット使用時は不要)

# chgrp mail /var/run/opendkim
# chmod g+sw /var/run/opendkim
# ls -la /var/run/opendkim/
合計 12
drwxrwsr-x   2 opendkim mail 4096  2月  1 17:51 2017 .
drwxr-xr-x. 23 root     root 4096  2月  1 08:33 2017 ..
-rw-r--r--   1 root     mail    6  2月  1 17:51 2017 opendkim.pid
srwxrwxr-x   1 opendkim mail    0  2月  1 17:51 2017 opendkim.sock

※起動後にsocketファイルが作成された状態

その後、opendkimデーモンを起動します。

# /etc/rc.d/init.d/opendkim start

5.SMTPサーバー(Postfix)の設定

Postfix の設定ファイル /etc/postfix/main.cf にOpenDKIMのフィルターを実行する設定を追加します。

smtpd_milters = unix:/var/run/opendkim/opendkim.sock
#smtpd_milters = inet:127.0.0.1:8891 # TCPソケットを使う場合はこちら
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

postfix を起動します。

# /etc/rc.d/init.d/postfix restart