Postfix 迷惑メール判定されないDKIM設定(複数ドメイン)Rocky ,Alma, CentOS

ネットワーク

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

迷惑メール判定されないようにPostfixでDKIMを利用したい。

この疑問に回答します。

メールを送信する際に、迷惑メール防止の設定を組み込まないと相手に届く前に振るい落されます。しっかりと迷惑メール防止対策を実施する必要があります。

迷惑メール対策 SPFとDKIM

迷惑メール対策は色々なものがあります。その中から最も利用度が高い、SPF(エスピーエフ)とDKIM(ディーキム)について解説します。SPF,DKIMともメールを送信する側が対応するものです。

SPF(Sender Policy Framework)とDKIM(Domainkeys Identified Mail)は、どちらも送信ドメイン認証の仕組みです。IETFによってSPFはRFC4408、DKIMはRFC4871およびRFC5672にて仕様が定められています。

SPFはDNSのSPFレコードを利用し送信ドメインを認証します。SPFに対応しているメール受信サーバーは、メール受信時に送信元ドメインのDNSサーバーからSPFレコードを参照し値を検証します。この検証によりなりすまし等を防ぐことができます。

DKIMは電子署名を利用し送信ドメインを認証します。SPFと同様にDNSを利用します。DKIMはDNSサーバーに送信元ドメインの公開鍵を登録します。メールサーバーは秘密鍵で暗号化した電子署名を付加してメールを送信します。DKIMに対応しているメール受信サーバーはメールヘッダーから送信元ドメインのDNSサーバーから公開鍵を取得し、電子署名を検証します。この検証によりなりすまし等を防ぐことが可能となります。

DKIMに対応した環境を構築する

私の利用している環境はOSが最小パッケージなので必要なものを追加しています。

epelレポジトリのインストール

DKIMを利用するためのソフトウェアはEPELレポジトリに含まれています。インストールの手順を紹介します。

# yum install -y epel-release
CentOS-8 - AppStream                            5.9 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                 7.9 kB/s | 3.9 kB     00:00
CentOS-8 - Extras                               3.2 kB/s | 1.5 kB     00:00
Dependencies resolved.
================================================================================
 Package               Architecture    Version            Repository       Size
================================================================================
Installing:
 epel-release          noarch          8-8.el8            extras           23 k

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

Total download size: 23 k
Installed size: 32 k
Downloading Packages:
epel-release-8-8.el8.noarch.rpm                 512 kB/s |  23 kB     00:00
--------------------------------------------------------------------------------
Total                                            69 kB/s |  23 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : epel-release-8-8.el8.noarch                            1/1
  Running scriptlet: epel-release-8-8.el8.noarch                            1/1
  Verifying        : epel-release-8-8.el8.noarch                            1/1

Installed:
  epel-release-8-8.el8.noarch

Complete!

特に問題は出ずにインストールが完了できると思います。

OpenDKIMのインストール

DKIMを利用するためにはopendkimのインストールが必要になります。opendkimのインストールについて説明します。

# yum -y install opendkim

Last metadata expiration check: 0:02:22 ago on Mon 18 May 2020 01:37:04 PM JST.
Dependencies resolved.
================================================================================
 Package                   Arch      Version                 Repository    Size
================================================================================
Installing:
 opendkim                  x86_64    2.11.0-0.9.el8          epel         236 k
Installing dependencies:
 libmemcached-libs         x86_64    1.0.18-15.el8           AppStream    137 k
 sendmail-milter           x86_64    8.15.2-32.el8           AppStream     82 k
 perl-Carp                 noarch    1.42-396.el8            BaseOS        30 k
 perl-Errno                x86_64    1.28-416.el8            BaseOS        76 k
 perl-Exporter             noarch    5.72-396.el8            BaseOS        34 k
 perl-File-Path            noarch    2.15-2.el8              BaseOS        38 k
 perl-IO                   x86_64    1.38-416.el8            BaseOS       141 k
 perl-PathTools            x86_64    3.74-1.el8              BaseOS        90 k
 perl-Scalar-List-Utils    x86_64    3:1.49-2.el8            BaseOS        68 k
 perl-Socket               x86_64    4:2.027-3.el8           BaseOS        59 k
 perl-Text-Tabs+Wrap       noarch    2013.0523-395.el8       BaseOS        24 k
 perl-Unicode-Normalize    x86_64    1.25-396.el8            BaseOS        82 k
 perl-constant             noarch    1.33-396.el8            BaseOS        25 k
 perl-interpreter          x86_64    4:5.26.3-416.el8        BaseOS       6.3 M
 perl-libs                 x86_64    4:5.26.3-416.el8        BaseOS       1.6 M
 perl-macros               x86_64    4:5.26.3-416.el8        BaseOS        72 k
 perl-parent               noarch    1:0.237-1.el8           BaseOS        20 k
 perl-threads              x86_64    1:2.21-2.el8            BaseOS        61 k
 perl-threads-shared       x86_64    1.58-2.el8              BaseOS        48 k
 libbsd                    x86_64    0.9.1-4.el8             epel         106 k
 libopendkim               x86_64    2.11.0-0.9.el8          epel          80 k
 opendbx                   x86_64    1.4.6-21.el8            epel          56 k

Transaction Summary
================================================================================
Install  23 Packages

Total download size: 9.4 M
Installed size: 23 M
Downloading Packages:
(1/23): perl-Carp-1.42-396.el8.noarch.rpm       861 kB/s |  30 kB     00:00
(2/23): perl-Errno-1.28-416.el8.x86_64.rpm      8.0 MB/s |  76 kB     00:00
(3/23): perl-Exporter-5.72-396.el8.noarch.rpm   6.8 MB/s |  34 kB     00:00
(4/23): perl-File-Path-2.15-2.el8.noarch.rpm    7.8 MB/s |  38 kB     00:00
(5/23): libmemcached-libs-1.0.18-15.el8.x86_64. 2.2 MB/s | 137 kB     00:00
(6/23): perl-IO-1.38-416.el8.x86_64.rpm          15 MB/s | 141 kB     00:00
(7/23): perl-Scalar-List-Utils-1.49-2.el8.x86_6  12 MB/s |  68 kB     00:00
(8/23): sendmail-milter-8.15.2-32.el8.x86_64.rp 1.1 MB/s |  82 kB     00:00
(9/23): perl-Socket-2.027-3.el8.x86_64.rpm      8.2 MB/s |  59 kB     00:00
(10/23): perl-PathTools-3.74-1.el8.x86_64.rpm   4.3 MB/s |  90 kB     00:00
(11/23): perl-Unicode-Normalize-1.25-396.el8.x8  14 MB/s |  82 kB     00:00
(12/23): perl-constant-1.33-396.el8.noarch.rpm  5.4 MB/s |  25 kB     00:00
(13/23): perl-Text-Tabs+Wrap-2013.0523-395.el8. 1.8 MB/s |  24 kB     00:00
(14/23): perl-macros-5.26.3-416.el8.x86_64.rpm  4.8 MB/s |  72 kB     00:00
(15/23): perl-parent-0.237-1.el8.noarch.rpm     2.6 MB/s |  20 kB     00:00
(16/23): perl-threads-2.21-2.el8.x86_64.rpm     4.3 MB/s |  61 kB     00:00
(17/23): perl-threads-shared-1.58-2.el8.x86_64. 4.6 MB/s |  48 kB     00:00
(18/23): perl-libs-5.26.3-416.el8.x86_64.rpm    9.8 MB/s | 1.6 MB     00:00
(19/23): libopendkim-2.11.0-0.9.el8.x86_64.rpm  1.4 MB/s |  80 kB     00:00
(20/23): opendbx-1.4.6-21.el8.x86_64.rpm        1.0 MB/s |  56 kB     00:00
(21/23): perl-interpreter-5.26.3-416.el8.x86_64  16 MB/s | 6.3 MB     00:00
(22/23): opendkim-2.11.0-0.9.el8.x86_64.rpm     705 kB/s | 236 kB     00:00
(23/23): libbsd-0.9.1-4.el8.x86_64.rpm           88 kB/s | 106 kB     00:01
--------------------------------------------------------------------------------
Total                                           3.5 MB/s | 9.4 MB     00:02
warning: /var/cache/dnf/epel-6519ee669354a484/packages/libbsd-0.9.1-4.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY
Extra Packages for Enterprise Linux 8 - x86_64  1.6 MB/s | 1.6 kB     00:00
Importing GPG key 0x2F86D6A1:
 Userid     : "Fedora EPEL (8) <[email protected]>"
 Fingerprint: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : perl-Exporter-5.72-396.el8.noarch                     1/23
  Installing       : perl-libs-4:5.26.3-416.el8.x86_64                     2/23
  Installing       : perl-Carp-1.42-396.el8.noarch                         3/23
  Installing       : perl-Scalar-List-Utils-3:1.49-2.el8.x86_64            4/23
  Installing       : libbsd-0.9.1-4.el8.x86_64                             5/23
  Installing       : libopendkim-2.11.0-0.9.el8.x86_64                     6/23
  Installing       : perl-macros-4:5.26.3-416.el8.x86_64                   7/23
  Installing       : perl-parent-1:0.237-1.el8.noarch                      8/23
  Installing       : perl-Errno-1.28-416.el8.x86_64                        9/23
  Installing       : perl-Socket-4:2.027-3.el8.x86_64                     10/23
  Installing       : perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch         11/23
  Installing       : perl-Unicode-Normalize-1.25-396.el8.x86_64           12/23
  Installing       : perl-File-Path-2.15-2.el8.noarch                     13/23
  Installing       : perl-IO-1.38-416.el8.x86_64                          14/23
  Installing       : perl-PathTools-3.74-1.el8.x86_64                     15/23
  Installing       : perl-constant-1.33-396.el8.noarch                    16/23
  Installing       : perl-threads-1:2.21-2.el8.x86_64                     17/23
  Installing       : perl-threads-shared-1.58-2.el8.x86_64                18/23
  Installing       : perl-interpreter-4:5.26.3-416.el8.x86_64             19/23
  Installing       : opendbx-1.4.6-21.el8.x86_64                          20/23
  Installing       : sendmail-milter-8.15.2-32.el8.x86_64                 21/23
  Running scriptlet: sendmail-milter-8.15.2-32.el8.x86_64                 21/23
  Installing       : libmemcached-libs-1.0.18-15.el8.x86_64               22/23
  Running scriptlet: opendkim-2.11.0-0.9.el8.x86_64                       23/23
  Installing       : opendkim-2.11.0-0.9.el8.x86_64                       23/23
  Running scriptlet: opendkim-2.11.0-0.9.el8.x86_64                       23/23
  Verifying        : libmemcached-libs-1.0.18-15.el8.x86_64                1/23
  Verifying        : sendmail-milter-8.15.2-32.el8.x86_64                  2/23
  Verifying        : perl-Carp-1.42-396.el8.noarch                         3/23
  Verifying        : perl-Errno-1.28-416.el8.x86_64                        4/23
  Verifying        : perl-Exporter-5.72-396.el8.noarch                     5/23
  Verifying        : perl-File-Path-2.15-2.el8.noarch                      6/23
  Verifying        : perl-IO-1.38-416.el8.x86_64                           7/23
  Verifying        : perl-PathTools-3.74-1.el8.x86_64                      8/23
  Verifying        : perl-Scalar-List-Utils-3:1.49-2.el8.x86_64            9/23
  Verifying        : perl-Socket-4:2.027-3.el8.x86_64                     10/23
  Verifying        : perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch         11/23
  Verifying        : perl-Unicode-Normalize-1.25-396.el8.x86_64           12/23
  Verifying        : perl-constant-1.33-396.el8.noarch                    13/23
  Verifying        : perl-interpreter-4:5.26.3-416.el8.x86_64             14/23
  Verifying        : perl-libs-4:5.26.3-416.el8.x86_64                    15/23
  Verifying        : perl-macros-4:5.26.3-416.el8.x86_64                  16/23
  Verifying        : perl-parent-1:0.237-1.el8.noarch                     17/23
  Verifying        : perl-threads-1:2.21-2.el8.x86_64                     18/23
  Verifying        : perl-threads-shared-1.58-2.el8.x86_64                19/23
  Verifying        : libbsd-0.9.1-4.el8.x86_64                            20/23
  Verifying        : libopendkim-2.11.0-0.9.el8.x86_64                    21/23
  Verifying        : opendbx-1.4.6-21.el8.x86_64                          22/23
  Verifying        : opendkim-2.11.0-0.9.el8.x86_64                       23/23

Installed:
  opendkim-2.11.0-0.9.el8.x86_64
  libmemcached-libs-1.0.18-15.el8.x86_64
  sendmail-milter-8.15.2-32.el8.x86_64
  perl-Carp-1.42-396.el8.noarch
  perl-Errno-1.28-416.el8.x86_64
  perl-Exporter-5.72-396.el8.noarch
  perl-File-Path-2.15-2.el8.noarch
  perl-IO-1.38-416.el8.x86_64
  perl-PathTools-3.74-1.el8.x86_64
  perl-Scalar-List-Utils-3:1.49-2.el8.x86_64
  perl-Socket-4:2.027-3.el8.x86_64
  perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch
  perl-Unicode-Normalize-1.25-396.el8.x86_64
  perl-constant-1.33-396.el8.noarch
  perl-interpreter-4:5.26.3-416.el8.x86_64
  perl-libs-4:5.26.3-416.el8.x86_64
  perl-macros-4:5.26.3-416.el8.x86_64
  perl-parent-1:0.237-1.el8.noarch
  perl-threads-1:2.21-2.el8.x86_64
  perl-threads-shared-1.58-2.el8.x86_64
  libbsd-0.9.1-4.el8.x86_64
  libopendkim-2.11.0-0.9.el8.x86_64
  opendbx-1.4.6-21.el8.x86_64

Complete!

特に問題は出ずにインストールが完了できると思います。

libmilter.so が無い場合は、依存関係のエラーが出力されます。

# yum -y install opendkim
Last metadata expiration check: 0:38:41 ago on Tue 16 Apr 2024 03:11:24 PM JST.
Error:
Problem: conflicting requests
– nothing provides libmilter.so.1.0()(64bit) needed by opendkim-2.11.0-0.36.el9.x86_64 from epel
– nothing provides libmemcached.so.11()(64bit) needed by opendkim-2.11.0-0.36.el9.x86_64 from epel
(try to add ‘–skip-broken’ to skip uninstallable packages or ‘–nobest’ to use not only best candidate packages)

rocky.repoを修正しcrbを有効化させます。依存関係モジュールがインストールされエラーは解消されます。

/etc/yum.repos.d/rocky.repo

[crb]
name=Rocky Linux $releasever - CRB
gpgcheck=1
enabled=1
countme=1

Perl Getopt::Long モジュールのインストール

opendkimでキーペア(秘密鍵/公開鍵)を作成する際にPerl Getopt::Long モジュールが必要になります。Perl Getopt::Long モジュールのインストールについて説明します。

yum -y install perl-Getopt-Long.noarch
Last metadata expiration check: 0:14:30 ago on Mon 18 May 2020 01:37:04 PM JST.
Dependencies resolved.
================================================================================
 Package                  Arch       Version                Repository     Size
================================================================================
Installing:
 perl-Getopt-Long         noarch     1:2.50-4.el8           BaseOS         63 k
Installing dependencies:
 perl-Digest              noarch     1.17-395.el8           AppStream      27 k
 perl-Digest-MD5          x86_64     2.55-396.el8           AppStream      37 k
 perl-Net-SSLeay          x86_64     1.88-1.el8             AppStream     379 k
 perl-URI                 noarch     1.73-3.el8             AppStream     116 k
 perl-libnet              noarch     3.11-3.el8             AppStream     121 k
 perl-Data-Dumper         x86_64     2.167-399.el8          BaseOS         58 k
 perl-Encode              x86_64     4:2.97-3.el8           BaseOS        1.5 M
 perl-File-Temp           noarch     0.230.600-1.el8        BaseOS         63 k
 perl-HTTP-Tiny           noarch     0.074-1.el8            BaseOS         58 k
 perl-MIME-Base64         x86_64     3.15-396.el8           BaseOS         31 k
 perl-Pod-Escapes         noarch     1:1.07-395.el8         BaseOS         20 k
 perl-Pod-Perldoc         noarch     3.28-396.el8           BaseOS         86 k
 perl-Pod-Simple          noarch     1:3.35-395.el8         BaseOS        213 k
 perl-Pod-Usage           noarch     4:1.69-395.el8         BaseOS         34 k
 perl-Storable            x86_64     1:3.11-3.el8           BaseOS         98 k
 perl-Term-ANSIColor      noarch     4.06-396.el8           BaseOS         46 k
 perl-Term-Cap            noarch     1.17-395.el8           BaseOS         23 k
 perl-Text-ParseWords     noarch     3.30-395.el8           BaseOS         18 k
 perl-Time-Local          noarch     1:1.280-1.el8          BaseOS         34 k
 perl-podlators           noarch     4.11-1.el8             BaseOS        118 k
Installing weak dependencies:
 perl-IO-Socket-IP        noarch     0.39-5.el8             AppStream      47 k
 perl-IO-Socket-SSL       noarch     2.066-3.el8            AppStream     297 k
 perl-Mozilla-CA          noarch     20160104-7.el8         AppStream      15 k

Transaction Summary
================================================================================
Install  24 Packages

Total download size: 3.4 M
Installed size: 14 M
Downloading Packages:
(1/24): perl-Digest-1.17-395.el8.noarch.rpm     453 kB/s |  27 kB     00:00
(2/24): perl-Digest-MD5-2.55-396.el8.x86_64.rpm 595 kB/s |  37 kB     00:00
(3/24): perl-IO-Socket-IP-0.39-5.el8.noarch.rpm 582 kB/s |  47 kB     00:00
(4/24): perl-Mozilla-CA-20160104-7.el8.noarch.r 290 kB/s |  15 kB     00:00
(5/24): perl-Net-SSLeay-1.88-1.el8.x86_64.rpm   7.4 MB/s | 379 kB     00:00
(6/24): perl-IO-Socket-SSL-2.066-3.el8.noarch.r 3.6 MB/s | 297 kB     00:00
(7/24): perl-Data-Dumper-2.167-399.el8.x86_64.r 6.6 MB/s |  58 kB     00:00
(8/24): perl-URI-1.73-3.el8.noarch.rpm          2.3 MB/s | 116 kB     00:00
(9/24): perl-File-Temp-0.230.600-1.el8.noarch.r 8.5 MB/s |  63 kB     00:00
(10/24): perl-Getopt-Long-2.50-4.el8.noarch.rpm  12 MB/s |  63 kB     00:00
(11/24): perl-HTTP-Tiny-0.074-1.el8.noarch.rpm  5.5 MB/s |  58 kB     00:00
(12/24): perl-libnet-3.11-3.el8.noarch.rpm      1.8 MB/s | 121 kB     00:00
(13/24): perl-MIME-Base64-3.15-396.el8.x86_64.r 3.5 MB/s |  31 kB     00:00
(14/24): perl-Pod-Escapes-1.07-395.el8.noarch.r 3.1 MB/s |  20 kB     00:00
(15/24): perl-Pod-Perldoc-3.28-396.el8.noarch.r 8.1 MB/s |  86 kB     00:00
(16/24): perl-Pod-Usage-1.69-395.el8.noarch.rpm 3.4 MB/s |  34 kB     00:00
(17/24): perl-Pod-Simple-3.35-395.el8.noarch.rp 7.6 MB/s | 213 kB     00:00
(18/24): perl-Storable-3.11-3.el8.x86_64.rpm    5.8 MB/s |  98 kB     00:00
(19/24): perl-Term-ANSIColor-4.06-396.el8.noarc 4.6 MB/s |  46 kB     00:00
(20/24): perl-Term-Cap-1.17-395.el8.noarch.rpm  3.0 MB/s |  23 kB     00:00
(21/24): perl-Text-ParseWords-3.30-395.el8.noar 3.8 MB/s |  18 kB     00:00
(22/24): perl-Time-Local-1.280-1.el8.noarch.rpm 4.3 MB/s |  34 kB     00:00
(23/24): perl-podlators-4.11-1.el8.noarch.rpm   7.4 MB/s | 118 kB     00:00
(24/24): perl-Encode-2.97-3.el8.x86_64.rpm       12 MB/s | 1.5 MB     00:00
--------------------------------------------------------------------------------
Total                                           3.6 MB/s | 3.4 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : perl-MIME-Base64-3.15-396.el8.x86_64                  1/24
  Installing       : perl-IO-Socket-IP-0.39-5.el8.noarch                   2/24
  Installing       : perl-Time-Local-1:1.280-1.el8.noarch                  3/24
  Installing       : perl-Text-ParseWords-3.30-395.el8.noarch              4/24
  Installing       : perl-Digest-1.17-395.el8.noarch                       5/24
  Installing       : perl-Digest-MD5-2.55-396.el8.x86_64                   6/24
  Installing       : perl-Net-SSLeay-1.88-1.el8.x86_64                     7/24
  Installing       : perl-Term-Cap-1.17-395.el8.noarch                     8/24
  Installing       : perl-Term-ANSIColor-4.06-396.el8.noarch               9/24
  Installing       : perl-Storable-1:3.11-3.el8.x86_64                    10/24
  Installing       : perl-Pod-Escapes-1:1.07-395.el8.noarch               11/24
  Installing       : perl-File-Temp-0.230.600-1.el8.noarch                12/24
  Installing       : perl-Data-Dumper-2.167-399.el8.x86_64                13/24
  Installing       : perl-Mozilla-CA-20160104-7.el8.noarch                14/24
  Installing       : perl-Encode-4:2.97-3.el8.x86_64                      15/24
  Installing       : perl-Pod-Simple-1:3.35-395.el8.noarch                16/24
  Installing       : perl-Getopt-Long-1:2.50-4.el8.noarch                 17/24
  Installing       : perl-podlators-4.11-1.el8.noarch                     18/24
  Installing       : perl-Pod-Usage-4:1.69-395.el8.noarch                 19/24
  Installing       : perl-Pod-Perldoc-3.28-396.el8.noarch                 20/24
  Installing       : perl-HTTP-Tiny-0.074-1.el8.noarch                    21/24
  Installing       : perl-IO-Socket-SSL-2.066-3.el8.noarch                22/24
  Installing       : perl-libnet-3.11-3.el8.noarch                        23/24
  Installing       : perl-URI-1.73-3.el8.noarch                           24/24
  Running scriptlet: perl-URI-1.73-3.el8.noarch                           24/24
  Verifying        : perl-Digest-1.17-395.el8.noarch                       1/24
  Verifying        : perl-Digest-MD5-2.55-396.el8.x86_64                   2/24
  Verifying        : perl-IO-Socket-IP-0.39-5.el8.noarch                   3/24
  Verifying        : perl-IO-Socket-SSL-2.066-3.el8.noarch                 4/24
  Verifying        : perl-Mozilla-CA-20160104-7.el8.noarch                 5/24
  Verifying        : perl-Net-SSLeay-1.88-1.el8.x86_64                     6/24
  Verifying        : perl-URI-1.73-3.el8.noarch                            7/24
  Verifying        : perl-libnet-3.11-3.el8.noarch                         8/24
  Verifying        : perl-Data-Dumper-2.167-399.el8.x86_64                 9/24
  Verifying        : perl-Encode-4:2.97-3.el8.x86_64                      10/24
  Verifying        : perl-File-Temp-0.230.600-1.el8.noarch                11/24
  Verifying        : perl-Getopt-Long-1:2.50-4.el8.noarch                 12/24
  Verifying        : perl-HTTP-Tiny-0.074-1.el8.noarch                    13/24
  Verifying        : perl-MIME-Base64-3.15-396.el8.x86_64                 14/24
  Verifying        : perl-Pod-Escapes-1:1.07-395.el8.noarch               15/24
  Verifying        : perl-Pod-Perldoc-3.28-396.el8.noarch                 16/24
  Verifying        : perl-Pod-Simple-1:3.35-395.el8.noarch                17/24
  Verifying        : perl-Pod-Usage-4:1.69-395.el8.noarch                 18/24
  Verifying        : perl-Storable-1:3.11-3.el8.x86_64                    19/24
  Verifying        : perl-Term-ANSIColor-4.06-396.el8.noarch              20/24
  Verifying        : perl-Term-Cap-1.17-395.el8.noarch                    21/24
  Verifying        : perl-Text-ParseWords-3.30-395.el8.noarch             22/24
  Verifying        : perl-Time-Local-1:1.280-1.el8.noarch                 23/24
  Verifying        : perl-podlators-4.11-1.el8.noarch                     24/24

Installed:
  perl-Getopt-Long-1:2.50-4.el8.noarch
  perl-IO-Socket-IP-0.39-5.el8.noarch
  perl-IO-Socket-SSL-2.066-3.el8.noarch
  perl-Mozilla-CA-20160104-7.el8.noarch
  perl-Digest-1.17-395.el8.noarch
  perl-Digest-MD5-2.55-396.el8.x86_64
  perl-Net-SSLeay-1.88-1.el8.x86_64
  perl-URI-1.73-3.el8.noarch
  perl-libnet-3.11-3.el8.noarch
  perl-Data-Dumper-2.167-399.el8.x86_64
  perl-Encode-4:2.97-3.el8.x86_64
  perl-File-Temp-0.230.600-1.el8.noarch
  perl-HTTP-Tiny-0.074-1.el8.noarch
  perl-MIME-Base64-3.15-396.el8.x86_64
  perl-Pod-Escapes-1:1.07-395.el8.noarch
  perl-Pod-Perldoc-3.28-396.el8.noarch
  perl-Pod-Simple-1:3.35-395.el8.noarch
  perl-Pod-Usage-4:1.69-395.el8.noarch
  perl-Storable-1:3.11-3.el8.x86_64
  perl-Term-ANSIColor-4.06-396.el8.noarch
  perl-Term-Cap-1.17-395.el8.noarch
  perl-Text-ParseWords-3.30-395.el8.noarch
  perl-Time-Local-1:1.280-1.el8.noarch
  perl-podlators-4.11-1.el8.noarch

Complete!

特に問題は出ずにインストールが完了できると思います。

opendkimでキーペア(秘密鍵/公開鍵)を作成する

opendkimは /etc/opendkim/keys にキーペア(秘密鍵/公開鍵)の情報ファイルを作成します。複数ドメイン(マルチドメイン)で利用する場合は専用のディレクトリを作るほうが間違いを起こしません。

# mkdir /etc/opendkim/keys/[任意]

opendkim-genkey コマンドを利用して電子署名用のキーペアを作成します。

opendkim-genkey -D [ファイルの保存パス] -d [ドメイン名] -s [セレクタ名]

-D : 鍵の作成されるディレクトリ
-d : ドメイン名
-s : セレクタ名(任意の名称)

“-s”のセレクタ名は、電子署名ヘッダーに表示されるラベルになります。任意のものを指定します。セレクタ名はファイルの作成日を利用するパターンと、defaultとするパターンのどちらかが多いです。

opendkim-genkeyコマンドがインストールされていない場合には、追加パッケージ(opendkim-tools)をインストールしてください。

私の場合は日付を指定します。

# opendkim-genkey -D /etc/opendkim/keys/mydomain/ -d mydomain.com -s 20200518

ディレクトリを参照すると公開鍵と秘密鍵が作成されています。

# ls /etc/opendkim/keys/mydomain/
20200519.private  20200519.txt

[セレクタ名].private・・・秘密鍵
[セレクタ名].txt・・・公開鍵

ファイルの所有権を設定します。

# chown -R opendkim:opendkim /etc/opendkim/keys/

これでにキーペア(秘密鍵/公開鍵)の作業は完了です。

DNSにDKIMレコードを登録する

先ほど作成した公開鍵を使ってDNSにDKIMレコードを登録します。公開鍵は生成されたファイルの中に記載されています。

# cat /etc/opendkim/keys/mydomain/20200518.txt
20200519._domainkey     IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=******************************************" )  ; ----- DKIM key 20200518 for mydomain.com

DNSに登録する部分は(”v=DKIM1; ~~ p=***”)の部分です。

対象部分に入っている「””」(行頭、中間、行末)は不要なので消去してください。

この情報を元にDNSへのレコード設定を追加します。
公開鍵ファイルに含まれる情報の詳細は以下の通りです。

v=DKIM1keyレコードのバージョン番号(指定する場合はDKIM1)
k=rsa電子署名の作成に利用できる鍵の形式、DKIMではRSAのみサポート
p=****公開鍵データ

 

DNSサーバーにDKIMで利用する2つのレコードを登録します。

DKIM(公開鍵)レコードキーペアの公開鍵を登録
DKIMポリシー用レコードADSP(Author Domain Signing Practice)
DKIM署名が有効ではないメールの扱いを設定

DKIM(公開鍵)レコードの登録

DNSにDKIMレコードを登録します。DKIMレコードの書式は下記の通りです。

[セレクタ名]._domainkey.[ドメイン名].  IN TXT "v=DKIM1; k=rsa; p=公開鍵データ"

公開鍵データの””を消去し、1行で登録してください。

DKIM(ADSP)レコードの登録

ADSPレコードの書式は次の通りです。

_adsp._domainkey.[ドメイン名].  IN TXT "dkim=レコード値"

ADSPレコードの値は次のように指定します。一般的には dkim=unkown を指定します。

ADSPレコード値意味
dkim=unknownDKIM署名していないメールも送信する。
dkim=all送信するメールはすべてDKIM署名を行う。
dkim=discardableDKIM署名がされていないメールはすべて削除してよい

dkim=discardableやdkim=allにすると、署名して送信したメールが配送経路において再署名されるケース(メーリングリストへの投稿等)、第三者にメールの送信を委託する場合などで、受信側で削除される可能性があります。discardableやallの公開については注意が必要です。

DKIMレコードの確認

DKIM レコードを確認してくれるサイトがありますので利用します。

DKIM Record Checker

利用方法はドメイン名セレクタ名を指定するだけで簡単です。画面の上部に入力すると、画面下部にレコード情報が表示されます。

DKIM Record Checker
DKIM Record Checker

このように表示されたら正しくDNSに登録がされています。

OpenDKIMの設定

opendkim.confの設定

OpenDKIMの設定ファイルを変更します。

# cp /etc/opendkim.conf /etc/opendkim.conf.org
# vi /etc/opendkim.conf

OpenDKIMの設定ファイルの修正箇所です。

# モードの変更 s:送信時に署名する v:受信時に確認する
Mode    sv

# OpenDKIMのソフトウェアバージョン秘匿
SoftwareHeader no
#KeyfileではなくKeyTableを利用する。
#KeyFile        /etc/opendkim/keys/default.private ← コメントアウト
KeyTable        refile:/etc/opendkim/KeyTable ← #を外して有効化

# 署名するドメインの指定
SigningTable    refile:/etc/opendkim/SigningTable ← #を外して有効化

# 外部ホストの特定
# 署名を付けるかの判断
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts ← #を外して有効化

#内部ホストの特定
# 署名を付けるかの判断
InternalHosts   refile:/etc/opendkim/TrustedHosts ← #を外して有効化

Modeパラメーター(動作モード)

動作モードを指定する設定です。

Modeパラメータのデフォルト設定は、メール受信時の確認のみの”v”になっています。今回はメール送信時の署名を行うために ”s” を追加します。

SoftwareHeaderパラメーター(ソフトウェアバージョンなどの情報)

ソフトウェアバージョンなどの情報提示を制御する設定です。デフォルト”yes”だとメールヘッダーにバージョン情報が記載されます。

バージョン情報を表示するとセキュリティリスクになるので非表示 “no” にします。

ソフトウェアバージョン情報
ソフトウェアバージョン情報

マルチドメイン対応:KeyFile , KeyTableパラメーター(秘密鍵を指定)

メールのドメイン秘密鍵ファイルの情報をマッピングするための設定です。

マルチドメイン(複数ドメイン)で利用できるようにKeyFileパラメーターを無効化してKeyTableパラメーターを有効化させます。秘密鍵ファイルとドメインの紐づけを実施します。

KeyTableの書式は次の通りです。

[セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:/etc/opendkim/keys/[任意]/[セレクタ名].private

KeyTableを修正します。

# vi /etc/opendkim/KeyTable
20200518._domainkey.mydomain.com mydomain.com:20200518:/etc/opendkim/keys/mydomain/20200518.private

# 各ドメイン毎に違うキーペアを使う場合の設定
20200518._domainkey.sub1.mydomain.com sub1.mydomain.com:20200518:/etc/opendkim/keys/sub1.mydomain/20200518.private
20200518._domainkey.sub2.mydomain.com sub2.mydomain.com:20200518:/etc/opendkim/keys/sub2.mydomain/20200518.private

# 各ドメインに共通のキーペアを使う場合の設定
20200518._domainkey.sub3.mydomain.com sub3.mydomain.com:20200518:/etc/opendkim/keys/mydomain/20200518.private
20200518._domainkey.sub4.mydomain.com sub4.mydomain.com:20200518:/etc/opendkim/keys/mydomain/20200518.private

マルチドメイン(複数ドメイン)で利用している場合は、対象ドメインの数だけKeyTableに記述します。今回はサブドメインの場合、個別のキーペアを利用していますが、メインドメインのものを共通で利用しても構いません。

マルチドメイン対応:SigningTableパラメータ(署名ドメインを指定)

署名をするメールのドメイン公開鍵ファイルの情報をマッピングするための設定です。

SigningTablの書式は次の通りです。

*@[ドメイン名] [セレクタ名]._domainkey.[ドメイン名]

SigningTablを修正します。

# vi /etc/opendkim/SigningTable
*@mydomain.com mydomain._domainkey.mydomain.com
*@sub1.mydomain.com sub1.mydomain._domainkey.sub1.mydomain.com
*@sub2.mydomain.com sub2.mydomain._domainkey.sub2.mydomain.com

マルチドメイン(複数ドメイン)で利用している場合は、対象ドメインの数だけSigningTableに記述します。

リレーサーバ対応:ExternalIgnoreList, InternalHostsパラメータ(署名するホストを指定)

ExternalIgnoreList,InternalHostsパラメータには署名するサーバーを指定します。

メールを中継するメールリレーサバーが署名を付ける場合には、サーバーを指定します。

一般的なメールサーバーを構築する際は、設定変更は必要ありません。デフォルトでサーバー自身のループバックIPである127.0.0.1が記述されています。

TrustedHostsの書式は次の通りです。

127.0.0.1
::1

TrustedHostsを修正します。

# vi /etc/opendkim/TrustedHosts
# サーバー自身
127.0.0.1
# メールリレーで署名をつける場合
# 内部(ローカルIP)からメール受信するIP
192.168.0.0/16
172.16.0.0/12
10.0.0.0/8
# 外部(グローバルIP)から中継する
8.8.8.8 など

OpenDKIMの起動

OpenDKIMサービスの起動と、自動起動の設定を行います。

# systemctl start opendkim
# systemctl enable opendkim

これでOpenDKIMの設定は完了です。残りはPostFixと連携です。

PostfixとOpenDKIMを連携させる

main.cfの設定

SMTP接続時にDKIMと連携するパラメーター設定を追記します。設定ファイルの最下行に以下を追記します。

# vi /etc/postfix/main.cf
# DKIM連携の設定
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = inet:127.0.0.1:8891
milter_default_action = accept

設定ファイルにエラーが無いか確認します。

# postfix check

PostFixの起動

変更した設定を反映するためにPostfixを再起動します。

# systemctl restart postfix

引数をrestart (再起動)にしていますが、reload(再読み込み)でも構いません。

後は送受信チェックを行うのみです。

正常に動作すればメールヘッダーにDKIM認証の結果と、公開鍵が付加されます。

PostfixとOpenDKIMが連携した時のメールヘッダー
PostfixとOpenDKIMが連携した時のメールヘッダー

上のブルーが認証の可否を示した箇所です。「dkim=pass」となっており認証が成功しています。下のブルーが電子署名の部分です。

 

 

以上、「CentOS Postfix 迷惑メール判定されないDKIM設定(複数ドメイン)」という記事でした。

コメント

  1. P より:

    コメント失礼します。
    DKIM(公開鍵)レコードの登録
    [セレクタ名]._domainkey.[ドメイン名]. IN TXT “v=DKIM1; k=rsa; p=公開鍵データ”
    これはどこの設定ファイルに記述でしょうか?

    • りんか りんか より:

      DNSサーバーにDKIMの必要情報(公開鍵、ADSP)をTXTレコードとして登録し公開します。

      動きを説明すると、
      送信元(サーバーA)は、秘密鍵で暗号化した署名を、メールに付与し送信先(サーバーB)に送ります。
      送信先(サーバーB)は、DNSに登録されている公開鍵を利用し復号化、署名内容を判断します。