おつかれさまです。Dです。

メールの到達率を上げるためにSPFやDKIMの設定をすることがあると思うのですが
サーバー側でのDKIM設定は実際にやったことがなかったので、試しにやってみたいと思います。

今回はAlmaLinux8.7で実施していきます。


---------------------------------------------------------
# cat /etc/redhat-release
AlmaLinux release 8.7 (Stone Smilodon)
---------------------------------------------------------

まずはdkim設定に必要なパッケージをインストールします。


---------------------------------------------------------
# dnf install opendkim

Last metadata expiration check: 1:37:27 ago on Sat 25 Mar 2023 10:04:36 AM JST.
Dependencies resolved.
========================================================================================================================================================================
 Package                                     Architecture                       Version                                     Repository                             Size
========================================================================================================================================================================
Installing:
 opendkim                                    x86_64                             2.11.0-0.28.el8                             epel                                  244 k
Installing dependencies:
 libbsd                                      x86_64                             0.11.7-2.el8                                epel                                  120 k
 libmd                                       x86_64                             1.0.4-2.el8                                 epel                                   37 k
 libopendkim                                 x86_64                             2.11.0-0.28.el8                             epel                                   83 k
 opendbx                                     x86_64                             1.4.6-21.el8                                epel                                   56 k
 sendmail-milter                             x86_64                             8.15.2-34.el8                               appstream                              81 k

Transaction Summary
========================================================================================================================================================================
Install  6 Packages

Total download size: 621 k
Installed size: 1.4 M
Is this ok [y/N]: y
Downloading Packages:
(1/6): sendmail-milter-8.15.2-34.el8.x86_64.rpm                                                                                         1.5 MB/s |  81 kB     00:00
(2/6): libmd-1.0.4-2.el8.x86_64.rpm                                                                                                     256 kB/s |  37 kB     00:00
(3/6): libopendkim-2.11.0-0.28.el8.x86_64.rpm                                                                                           251 kB/s |  83 kB     00:00
(4/6): libbsd-0.11.7-2.el8.x86_64.rpm                                                                                                   296 kB/s | 120 kB     00:00
(5/6): opendbx-1.4.6-21.el8.x86_64.rpm                                                                                                  202 kB/s |  56 kB     00:00
(6/6): opendkim-2.11.0-0.28.el8.x86_64.rpm                                                                                              1.8 MB/s | 244 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                   453 kB/s | 621 kB     00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                1/1
  Installing       : opendbx-1.4.6-21.el8.x86_64                                                                                                                    1/6
  Installing       : libmd-1.0.4-2.el8.x86_64                                                                                                                       2/6
  Installing       : libbsd-0.11.7-2.el8.x86_64                                                                                                                     3/6
  Installing       : libopendkim-2.11.0-0.28.el8.x86_64                                                                                                             4/6
  Installing       : sendmail-milter-8.15.2-34.el8.x86_64                                                                                                           5/6
  Running scriptlet: sendmail-milter-8.15.2-34.el8.x86_64                                                                                                           5/6
  Running scriptlet: opendkim-2.11.0-0.28.el8.x86_64                                                                                                                6/6
  Installing       : opendkim-2.11.0-0.28.el8.x86_64                                                                                                                6/6
  Running scriptlet: opendkim-2.11.0-0.28.el8.x86_64                                                                                                                6/6
  Verifying        : sendmail-milter-8.15.2-34.el8.x86_64                                                                                                           1/6
  Verifying        : libbsd-0.11.7-2.el8.x86_64                                                                                                                     2/6
  Verifying        : libmd-1.0.4-2.el8.x86_64                                                                                                                       3/6
  Verifying        : libopendkim-2.11.0-0.28.el8.x86_64                                                                                                             4/6
  Verifying        : opendbx-1.4.6-21.el8.x86_64                                                                                                                    5/6
  Verifying        : opendkim-2.11.0-0.28.el8.x86_64                                                                                                                6/6

Installed:
  libbsd-0.11.7-2.el8.x86_64             libmd-1.0.4-2.el8.x86_64   libopendkim-2.11.0-0.28.el8.x86_64   opendbx-1.4.6-21.el8.x86_64   opendkim-2.11.0-0.28.el8.x86_64
  sendmail-milter-8.15.2-34.el8.x86_64

Complete!
# dnf install opendkim-tools

Last metadata expiration check: 1:37:56 ago on Sat 25 Mar 2023 10:04:36 AM JST.
Dependencies resolved.
========================================================================================================================================================================
 Package                                     Architecture                        Version                                        Repository                         Size
========================================================================================================================================================================
Installing:
 opendkim-tools                              x86_64                              2.11.0-0.28.el8                                epel                               84 k

Transaction Summary
========================================================================================================================================================================
Install  1 Package

Total download size: 84 k
Installed size: 201 k
Is this ok [y/N]: y
Downloading Packages:
opendkim-tools-2.11.0-0.28.el8.x86_64.rpm                                                                                               606 kB/s |  84 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                   195 kB/s |  84 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                1/1
  Installing       : opendkim-tools-2.11.0-0.28.el8.x86_64                                                                                                          1/1
  Running scriptlet: opendkim-tools-2.11.0-0.28.el8.x86_64                                                                                                          1/1
  Verifying        : opendkim-tools-2.11.0-0.28.el8.x86_64                                                                                                          1/1

Installed:
  opendkim-tools-2.11.0-0.28.el8.x86_64

Complete!


※上記パッケージのインストールには「EPELリポジトリ」が必要なため、「dnf install epel-release」で事前にインストールしておきましょう。

dkim設定に必要な鍵を格納するディレクトリを作成します。
※設定ドメインについては例として「example.com」を使用します。


---------------------------------------------------------
# cd /etc/opendkim/keys/
# mkdir example.com
# chmod 750 example.com
# chown -R opendkim:opendkim /etc/opendkim/keys/
---------------------------------------------------------

設定するドメイン用の鍵を作成します。
※-Dオプションで鍵の出力先ディレクトリを指定し、-dオプションでドメインを指定します。


---------------------------------------------------------
# opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com
---------------------------------------------------------

鍵作成時に指定したディレクトリ内にdkim設定用のTXTレコードが出力されているので確認し
ドメインが利用しているネームサーバーにレコード情報を登録しておきます。
※レコード登録については割愛します。


---------------------------------------------------------
# cat /etc/opendkim/keys/example.com/default.txt

default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7SVO+gjyJu10yoFVUDSeQQvDa2Iwd40AgYatGN3ABFVl6MFf8cxtrqOwDE7PkYE5Wqfh4uY7G8JOEUOWo3tQnOACwiKuphKDvgg49LTYHjibOPKt7BrNH7A+RpI/FyYOQD1i0cWVqW3b00LWIDvI/F2ZbSAsQEmNO3JOYLlkgCwIDAQAB" )  ; ----- DKIM key default for example.com
---------------------------------------------------------

opendkimの設定ファイルを一部修正します。


----------------------------------------------------------------------------------------
# cp -ip /etc/opendkim.conf /etc/opendkim.conf.org
# vi /etc/opendkim.conf
※変更箇所
=========================================================
Mode    sv
KeyTable  /etc/opendkim/KeyTable
SigningTable  refile:/etc/opendkim/SigningTable
=========================================================
----------------------------------------------------------------------------------------

Modeの「s」は署名(サイン)の意味でメール発信時に署名をする際に必要です。

設定ファイルで指定したKeyTableに使用する鍵を指定します。


----------------------------------------------------------------------------------------
# vi /etc/opendkim/KeyTable
※以下を追記
=========================================================
default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private
=========================================================
----------------------------------------------------------------------------------------

設定ファイルで指定したSigningTableに使用するドメインを指定します。


----------------------------------------------------------------------------------------
# vi /etc/opendkim/SigningTable
※以下を追記
=========================================================
*@example.com default._domainkey.example.com
=========================================================
----------------------------------------------------------------------------------------

opendkimサービスの起動を実施。


---------------------------------------------------------
# systemctl status opendkim
# systemctl start opendkim
# systemctl status opendkim
---------------------------------------------------------

postfixとopendkimの連携設定を追記しpostfixサービスの再起動を実施。


----------------------------------------------------------------------------------------
# vi /etc/postfix/main.cf
※以下を追記
=========================================================
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
=========================================================
# systemctl restart postfix
----------------------------------------------------------------------------------------

telnetでメールサーバーへ接続し動作テストを実施。


---------------------------------------------------------
# telnet localhost 587
mail from:noreplay@example.com
rcpt to:***@***
data
from:noreplay@example.com
to:d.***@***
subject:test
test
.
quit
---------------------------------------------------------

※宛先メールアドレスは会社用アドレスのため伏せておきます。

正常に署名されていれば、メール送信時のメールログに以下のようなログが記載されます。


---------------------------------------------------------
# cat /var/log/maillog
=========================================================
opendkim[906220]: 7952F12A73E: DKIM-Signature field added (s=default, d=example.com)
=========================================================

正常に署名されていれば受信したメールのヘッダを確認すると、以下のような項目が確認出来ます。


-----------------------------------------------------------------------
DKIM-Filter: OpenDKIM Filter v2.11.0 ****** 7952F12A73E
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com;
    s=default; t=1679817365;
    bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=;
    h=from:to:subject:Date:From;
    b=rESgbDI0kshMS+b7p2i32yLuHgHaUQL44Ia4QxMIb9ekN3UGHU3Ga3qw1AcSM5fHz
     GkkW+s0IouSI28xS2aFUYLYZ6h0OIGTzFnFmZUYUMZgRhiSplus33mK2xAVV/hgtDo
     KIFIpES34xMTskuCLt75c/h5V8tecwlVwSt67SN0=
-----------------------------------------------------------------------

※Opendkimのバージョン情報が表示されてしまっているので、これを秘匿するには「SoftwareHeader no」をopendkim設定ファイルに追記すれば可能です。


【まとめ】

dkimの設定は難しいイメージがあったのですが、実際試してみると手軽に出来るので
一度試してみると良いかと思います。