送信メールが迷惑メール扱いされないための設定 ~DKIM認証編~

はじめに

前回の記事「送信メールが迷惑メール扱いされないための設定 ~SPF認証編~」では自ドメインからの送信メールが宛先SMTPサーバーによるSPF認証にpassするように対策しました。

今回は送信メールが宛先SMTPサーバーのDKIM認証にpassするように設定したいと思います。

DKIM認証というのは、以下のようなものです。

「送信ドメインのDNSに公開鍵を登録し、送信元SMTPサーバーは自身の秘密鍵で暗号化した電子署名を付加してメールを送信する。受信側SMTPサーバーは受信したメールヘッダから特定した送信元ドメインのDNSサーバから公開鍵を取得し、電子署名を検証する。」

前回の記事で触れたとおり、PostfixでOCNメールサーバーへのリレーを設定した場合はEnvelope-fromに基づくSPF認証については気にせずともpassすることから、大抵の場合は送信メールは宛先まで届きます。

とはいえ、メール送信先メールサーバーが将来的にDKIM認証/DMARC結果に対する処理ポリシーを変更してしまうかどうかについては分かりません。
送信先メールサーバーのポリシー変更に怯えることなく安心してメール送信できるように今のうちから対策をしておきたいと思います。
今回はまずDKIM認証への対策を行います。

前提とする環境は以下の通りです。

  • CentOS7.8
  • Postfix 2.10.1(一般的な Postfix の設定については完了している)

追記(2022年 3月): AlmaLinux8 に移行後も今回の設定で問題なく動作しています。

 

OpenDKIMのインストール

今回はOpenDKIMをインストールし、「s mode」(署名モード) のみを使います。
自サーバーが受信したメールを検証するための「v mode」(検証モード) は使用しません。

まだEPELリポジトリを追加していない場合は先に追加してから、OpenDKIMをインストールします。

# dnf install epel-release
# dnf install opendkim

 

秘密鍵/公開鍵の作成

キーペアを保存するディレクトリを作成し、その中にキーペアを作成します。

# mkdir /etc/opendkim/keys/example.com
# opendkim-genkey -D /etc/opendkim/keys/lsmodena.com -d lsmodena.com -s 20200516
# ls /etc/opendkim/keys/example.com
20200505.private  20200516.txt
# chown -R opendkim:opendkim /etc/opendkim/keys/example.com/

“-s” で指定するセレクタ名は任意の名前ですが、ファイル作成日を利用することが多いようです。
「/etc/opendkim/keys/example.com」ディレクトリ内に秘密鍵20200516.privateと公開鍵20200516.txtが作成されました。
それらのアクセス権も変更しておきます。

 

DNSサーバーへの登録

公開鍵の登録

先ほど作成した公開鍵20200516.txt の中身を覗いてみると、DNSサーバーに登録すべき内容がそのまま記載されています。この内容にしたがって「お名前.com」のDNSレコード登録画面からTXTレコードを設定します。

ホスト名   :20200516._domainkey (.example.com)
TYPE        :TXT
VALUE      :v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3D ・・・

DKIM Record Checker のサイトでドメイン名とセレクタ名を入力すれば、ちゃんと登録できているか確認することができます。

 

ADSPレコードの登録

続いて ADSPレコードを登録します。これはDKIM認証にfailした場合の取り扱いを送信者側として宣言しておくためのTXTレコードです。やはり「お名前.com」のDNSレコード登録画面から設定します。

ホスト名   :_adsp._domainkey (.example.com)
TYPE        :TXT
VALUE      :dkim=unknown

「dkim=」の部分は「all」「unknown」「discardable」のいずれかを指定しますが、「unkown」だと署名に失敗してもメール送信できるようになります。

 

Opendkimの設定

「/etc/opendkim.conf」の編集

オリジナルのバックアップを取ったら、以下のように編集します。

</etc/opendkim.conf>

Mode s                                               # "s"=送信時に署名
# 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      # コメントアウト解除

この中に登場する「/etc/opendkim/KeyTable」「/etc/opendkim/SigningTable」「/etc/opendkim/TrustedHosts」はこの後で編集します。

 

KeyTableに秘密鍵を登録

「/etc/opendkim/KeyTable」のバックアップを取ってから以下を追記します。

20200516._domainkey.lsmodena.com lsmodena.com:20200516:/etc/opendkim/keys/lsmodena.com/20200516.private

 

信頼できるホストの指定

「/etc/opendkim/TrustedHosts」を確認します。

# cat /etc/opendkim/TrustedHosts
127.0.0.1

ここで指定したアドレスから送信するメールに対してのみ署名を追加します。
デフォルトでループバックアドレスが指定されているので、変更の必要はなさそうです。

 

ドメインの指定

「/etc/opendkim/SigningTable」のバックアップを取ってから、以下を追記します。

*@lsmodena.com 20200505._domainkey.lsmodena.com

 

OpenDKIM の起動

# systemctl start opendkim
# systemctl enable opendkim
# systemctl is-enabled opendkim
enabled

 

Postfixの設定

「/etc/postfix/main.cf」に以下を追記します。

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

最後に Postfixをreloadします。

# systemctl reload postfix

 

動作確認

試しにGmailアカウント宛てにメールを送信してみます。
メールヘッダーを見てみると、mx.google.com から「dkim=pass」の判定であったことが分かります。

コメント

タイトルとURLをコピーしました