メールサーバ(postfix)- 認証情報(SPF・DKIM) - DKIM


クラウディア 


1. 概要
2. インストール
3. opendkim.conf
4. 鍵の生成・設定
5. opendkim 起動
6. メールサーバ設定
7. 確認
8. 参考サイト

1. 概要

 「DKIM」(「DomainKeys Identified Mail」)は、「SPF」と同様、送信ドメイン認証の一種で。  送信ドメインの所有者が、メールに電子署名を付与し、受信側でその署名を検証することで、送信元の正当性を確認する仕組みです。  「DKIM」も、「DNS」サーバに設定することで機能しますが、メールサーバの設定も必要になります。  「DKIM」は「このメールは本当にこのドメインが送ったもので、途中で改ざんされていない」ことを証明する仕組みです。  送信側は、メールに「DKIM」ヘッダを付与します。  「DKIM」ヘッダには、ヘッダ(From、To、Subject)や本文を暗号化したものと、公開鍵を置いているネームサーバを記述しています。  受信側は、「DKIM」の暗号化した情報を公開鍵を用いて複合し、一致するか調べて、正しいメールかどうかを判断します。  「DKIM」ヘッダはおよそ、下記のような情報(バリエーションは、たくさん)で。

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=mail;
	t=1770227771; bh=...;
	h=From:To:Subject;
	b=...
 この場合、下記のような情報になっています。 ・v=1 バージョン1(2026年2月5日現在、1のみ) ・a=rsa-sha256 署名アルゴリズム、RSA + SHA-256(現在の標準) ・c=simple/simple 正規化方式、ヘッダ / 本文 の順 ・d=example.com 「DNS」の公開鍵はこのドメイン配下にある ・s=mail セレクタ名、受信側が引く「DNS」名は「mail._domainkey.example.com」 ・t=1770091157 署名時刻(UNIX time)、未来や極端に過去だと不審扱いされることがある ・bh=... 本文のハッシュ値 ・h=From:To:Subject 署名対象のヘッダ ・b=... 署名本体、秘密鍵で生成された暗号署名

2. インストール

 「root」ユーザ権限で。  (画像等は、「FreeBSD 15.0-RELEASE-p2」2026年2月2日のものです)

cd /usr/ports/mail/opendkim

make config
 デフォルトの状態です。  (「opendkim-2.10.3_20」と比較して、1ページ分は減っています。)

 デフォルトのままにしておきます。


make NO_DIALOG=yes

make install
 インストール時のメッセージを末尾に掲載しておきます。

===>  Installing for opendkim-2.10.3_21
===>  Checking if opendkim is already installed
===>   Registering installation for opendkim-2.10.3_21
Installing opendkim-2.10.3_21...
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.

3. opendkim.conf

 「opendkim」インストール時に、下記のファイルが作成されています。

/usr/local/etc/mail
|-- opendkim.conf
`-- opendkim.conf.sample

vi /usr/local/etc/mail/opendkim.conf
 下記の先頭の「#」を外して、有効化します。

# Mode                  sv
 下記の先頭の「#」を外して、有効化し、「addr1,addr2,...」の位置に公開鍵を登録するネームサーバのローカルアドレスを記述します。

# Nameservers addr1,addr2,...
 下記の「port」の箇所に通信に使用する、ポート番号を記述します。  (なぜか、ポート番号に「8891」を設定するように書いてあるサイト多し)  「localhost」は、そのままか、ネームサーバで使用している「IP」アドレスを設定します。

Socket                  inet:port@localhost
 下記の先頭の「#」を外して、有効化し、「No」を「Yes」に変更します。  これで、処理が成功した場合も、メールログに「opendkim」のログが出力されます。  落ち着いてきたら「No」にしてもいいかもしれません。

# SyslogSuccess         No
 末尾に下記を記述します。

KeyTable                /usr/local/etc/opendkim/KeyTable
SigningTable            refile:/usr/local/etc/opendkim/SigningTable
ExternalIgnoreList      refile:/usr/local/etc/opendkim/TrustedHosts
InternalHosts           refile:/usr/local/etc/opendkim/TrustedHosts

vi /usr/local/etc/opendkim/KeyTable
 下記を記述します。

mail._domainkey.example.com example.com:mail:/usr/local/etc/opendkim/example.com/mail.private
mail._domainkey.sub.example.com sub.example.com:mail:/usr/local/etc/opendkim/sub.example.com/mail.private

vi /usr/local/etc/opendkim/SigningTable
 下記を記述します。

*@example.com mail._domainkey.example.com
*@sub.example.com mail._domainkey.sub.example.com

vi /usr/local/etc/opendkim/TrustedHosts
 下記を記述します。  「ip_address」の箇所に、メールサーバの「IP」アドレスを記述します。  外部からメール送信する場合は、行を分けて、外部の「IP」アドレスも記述します。

127.0.0.1
::1
ip_address
 作成したファイルの権限を設定します。

chown -R mailnull:mailnull /usr/local/etc/opendkim

chown mailnull:mailnull /usr/local/etc/opendkim/KeyTable /usr/local/etc/opendkim/SigningTable /usr/local/etc/opendkim/TrustedHosts

chmod 600 /usr/local/etc/opendkim/KeyTable /usr/local/etc/opendkim/SigningTable /usr/local/etc/opendkim/TrustedHosts
 本項の設定は、メールサーバそれぞれに行います。  「IP」アドレスは異なるので、そこはご注意ください。

4. 鍵の生成・設定

 鍵の生成・設定については、ネームサーバ側で行います。  ネームサーバの設定については、「メンテナンス・トラブルシュート - DNS(Domain Name System)」の「DKIM」の項をご参照ください。

5. opendkim 起動

 「opendkim」のサービスを有効化して、起動します。

service milter-opendkim enable

service milter-opendkim start

6. メールサーバ設定

 「Postfix」の設定を更新します。

vi /usr/local/etc/postfix/main.cf
 下記の「smtpd_milters」「non_smtpd_milters」の行を変更します。

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
 メールサーバが、ネームサーバと同一の場合と、ネームサーバが異なる場合とで設定が異なります。  ネームサーバの「IPv4」アドレスを「192.168.1.2」として。  メールサーバが、ネームサーバと同一の場合、下記のように記述します。

smtpd_milters = inet:192.168.1.2:8891, inet:127.0.0.1:11332
non_smtpd_milters = inet:192.168.1.2:8891
・外部送信 →「OpenDKIM」署名あり +「Rspamd」チェックあり ・内部宛(ローカル配送) →「OpenDKIM」署名のみ ・外部からの受信 →「OpenDKIM」検証 +「Rspamd」スパムチェック  という設定になっています(「8891」は「OpenDKIM」使用ポート番号、「11332」は「Rspamd」使用ポート番号)。  メールサーバが、ネームサーバと異なる場合、下記のように記述します。

smtpd_milters = inet:192.168.1.2:8891, inet:127.0.0.1:11332
non_smtpd_milters = $smtpd_milters
 これは、外部宛も内部宛も「OpenDKIM」署名あり +「Rspamd」チェックありにしています。  ネームサーバが外部なので、「Rspamd」は署名しないようです。  「postfix」を「mailnull」のグループに追加して、再起動します。

pw groupmod mailnull -m postfix

service postfix reload

7. 確認

 ネームサーバの「DKIM」が正しく登録されているかは、以下で確認できます。

drill mail._domainkey.example.com TXT

drill mail._domainkey.sub.example.com TXT
 「DKIM」のチェックを行っているメールサーバに対して、メールを送信します。  受信側のメールのヘッダを確認して。

DKIM-Signature:...
 が存在していること。

Authentication-Results: receive_mail_server_name;
	dkim=pass header.d=...
 上記が「dkim=pass」になっていれば、「DKIM」の設定はうまくいっています。

8. 参考サイト

 本ページは、「ChatGPT」軍曹を参考にさせていただきました。

EaseUS
AbemaTV 無料体験
ベルリッツ