DKIMの設定

参考サイト

CentOSのPostfixで迷惑メール判定されないようDKIMを設定する
構築したメールサーバーから送信したメールが迷惑メールとして識別されたことはありませんか?このような場合は、送信したメールが経由するメールサーバーのなりすましメール対策に引っかかっている場合が殆どです。

DKIMのインストール

インストールできるかの確認

yum info opendkim

インストール

sudo yum install opendkim

インストールできているかの確認

yum list installed | grep opendkim

インストールによってopendkimユーザが作成されているはず

$ id opendkim
uid=498(opendkim) gid=499(opendkim) 所属グループ=499(opendkim),12(mail)

インストールができたら鍵の生成を行う

鍵の生成

鍵を保存するディレクトリを作成

mkdir /etc/opendkim/keys/mydomain.com

opendkim-genkey が使えるかの確認

opendkim-genkey --help

なければ opendkim-tools をインストール

sudo yum install opendkim-tools
# -s はセレクタ(鍵の名前)
$ sudo opendkim-genkey -D /etc/opendkim/keys/mydomain.com/ -d mydomain.com -s default

default.private と default.txt の二つのファイルができていることを確認

$ sudo ls keys/mydomain.com
default.private default.txt

default.private(秘密鍵)default.txt(公開鍵)

opendkim からファイルにアクセスできるよう、所有者を変更

$ sudo chown -R opendkim:opendkim /etc/opendkim/keys/mydomain.com/

DNSの設定

DNSにTXTレコードを追加する

さきほど作ったファイル default.txt に登録する内容が書いてある

$ sudo cat /etc/opendkim/keys/mydomain.com/default.txt
[sudo] password for user1:
default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" )  ; ----- DKIM key default for mydomain.com

v=DKIM1は、DKIMのバージョン。k=rsaは、鍵のアルゴリズムがRSAであることを示す。p=xxxxxxは、公開鍵の値。

なお、本記事冒頭の参考ブログに書いてあったADSPレコードの登録は現在は必要ない

DKIM ADSP は廃止されています (HISTORIC です) | IIJ Engineers Blog
結論 (HISTORIC) (※1) 新しくドメイン名を登録された方へ ...

DNSに反映されたかの確認

dig txt default._domainkey.mydomain.com

動作テスト

$ opendkim-testkey -d mydomain.com -s default -vvv #-vvvは詳細表示

エラーが出る

opendkim-testkey: /etc/opendkim/keys/default.private: stat(): No such file or directory

default.private がないらしい。

opendkim-testkeyコマンドは、デフォルトで/etc/opendkim/keys/ディレクトリを参照するが、秘密鍵のディレクトリが異なる場合、OpenDKIMの設定ファイルやコマンドに正しいパスを指定する必要がある。

OpenDKIMの設定ファイル/etc/opendkim.confを確認して、鍵ファイルの場所を正しく指定する。

opendkim.conf を念のためコピーしたら以下のように編集。

秘密鍵のパスを指定するには、KeyFile とKeyTable のいずれを使う。1つのサーバーで複数のドメインやセレクタを運用する場合は、KeyTable を選択する。以下のように書き換える。

KeyFile /etc/opendkim/keys/default.private

# KeyTable      /etc/opendkim/KeyTable

↓↓↓ KeyFile を無効にして KeyTable を有効化

# KeyFile /etc/opendkim/keys/default.private

KeyTable      /etc/opendkim/KeyTable

KeyTable に以下を記述

#一行で
default._domainkey.mydomain.com mydomain.com:default:/etc/opendkim/keys/mydomain.com/default.private
$ opendkim-testkey -d mydomain.com -s default -vvv #-vvvがないとエラー以外何も出ない

KeyTable を使用する場合 SigningTable も必要なので有効にする

# SigningTable refile:/etc/opendkim/SigningTable
↓↓↓
SigningTable refile:/etc/opendkim/SigningTable

その他 opendkim.conf の変更箇所

Mode v
↓
Mode sv


SoftwareHeader  yes
↓
SoftwareHeader  no


# ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
↓
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts


# InternalHosts refile:/etc/opendkim/TrustedHosts
↓
InternalHosts refile:/etc/opendkim/TrustedHosts

# OpenDKIMとPostfixの通信方法
# 同じサーバー上に存在するのでローカルソケットを利用
#Socket  inet:8891@localhost
Socket local:/run/opendkim/opendkim.sock
↓
Socket  inet:8891@localhost
#Socket local:/run/opendkim/opendkim.sock

SigningTableの記述例

*@[ドメイン名] ._domainkey.[ドメイン名]
# 例 *はワイルドカードで、すべてのアドレスを意味する
*@mydomain.com default._domainkey.mydomain.com

opendkim が起動しているか

service opendkim status

自動起動の確認

chkconfig --list opendkim #centOS6.8
もしくは
sudo systemctl is-enabled opendkim #almalinux9

サーバー再起動時の自動起動

sudo chkconfig opendkim on #centOS6.8
もしくは
sudo systemctl enable opendkim #almalinux9

postfixとDKIMを連携させる

postfix 利用時に DKIMを利用するための設定パラメータを main.cf の最下段に記述する

# DKIMと連携させるための記述
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

設定のエラーチェック

postfix check

再起動して反映

送信テスト

$ echo "テストメールです" | sendmail -t -f renraku@example.com test@gmail.com

届いたgmailのソースを見て DKIM:’PASS’ となっていれば成功

しかし、運営サイトのwebフォームから送ったら DKIM:’FAIL’ となった。

メールのソースを見ると body hash did not verify となっている。どうも、改行コードが「\n」でなく「\r\n」になっていると、このエラーになるらしい。PHPファイルを確認すると、ファイルの改行コードがCRLFになっており、本文に改行(\nや\r\nではない)が入っている。この改行を削除したら DKIM:’PASS’ となった。

エラー解決参考

DKIMで「body hash did not verify」というエラーが出る。
DKIMで「body hash did not verify」というエラーが出る。 Centos6.6、pos

さくらのメールボックスのwebメールで送信するときのDKIM認証

ここまでの設定は、運営しているwebサーバーから送信したメールのDKIM認証のやり方で、さくらのメールボックスのwebメールから送信する場合などは、DKIM認証されない。webメールを送信する場合、さくらのメールボックスのSMTPサーバーを経由するので、さくらインターネットのSMTPサーバーがDKIM署名を行う必要がある。そのSMTPサーバー上での設定がさらに必要

やり方のページ

DKIM署名、DMARCを設定したい | さくらのサポート情報
このマニュアルでは、DKIM署名およびDMARCの設定についてご案内しています。※「さくらのマネージドサーバ」のOSがFreeBSD9.1のサーバーは、OSの仕様により対象外となります。対象外のサーバーは、リプレースによるOSアップデート後に対応いたします。DKIM/DMARCと

上記URLを参考にwebサーバー上にある秘密鍵を、さくらのメールボックスのSMTPサーバーにアップロードする。セレクタ名も同じにして、設定を完了すればwebメールやiphoneからの送信もDKIM認証が使えるようになる。

DMARCの設定

SPFとDKIMの設定が終わったらDMARCも設定する

DNSサーバーの設定

ホスト名

_dmarc.<ドメイン名>

txtレコード

v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com

openDKIMをmonitに監視対象にする

check process opendkim with pidfile /var/run/opendkim/opendkim.pid
  start program = "/usr/sbin/service opendkim start"
  stop program  = "/usr/sbin/service opendkim stop"
  if 5 restarts within 5 cycles then timeout

monitを再起動

$ sudo /sbin/service monit restart

確認

sudo monit summary

openDKIMを停止して、再起動するか見てみる

$ sudo /sbin/service opendkim stop
タイトルとURLをコピーしました