【DKIM / Postfix】RHEL/CentOSのPostfixにDKIMをインストル設定する

1 DKIMとは

本記事は、
CentOSなどのRHEL系OSにおけるDKIMのインストール設定について示したものです。

まず初めに、DKIMとはなんぞや、を簡単に。

DKIMDomain Keys Identified Mail)は、 電子メールにおける送信ドメイン認証技術の一つです。
メールを送信する際に送信元が電子署名を行い、受信者がそれを検証することで、
送信者のなりすましやメールの改ざんを検知できるようにするものです。

送信ドメイン認証技術は、送信元のIPアドレスを利用するものと、
電子署名を利用するものとに大きくわかれます。
DKIM電子署名を利用し、
その電子署名の検証に必要となる公開鍵は送信元ドメインのDNSサーバーで公開されます

受信者は受け取ったメール中の署名者に関する情報からドメインを特定し、
そのDNSサーバーへ問い合わせることで公開鍵を取得します。

2 OpenDKIMの導入

CentOSなどのRHEL系OSにDKIMをインストールして設定する手順は、
図2-1に示すようになります。
どのステップも大きいものではありませんので、それほど面倒なものではありません。

2.1 OpenDKIMのインストールとConfigファイル編集

最初にEPEL(Enterprise Linux向けの追加パッケージ)リポジトリを有効にします。
それからOpenDKIMをインストールします。

$ sudo dnf install epel-release
$ sudo dnf install opendkim opendkim-tools

次に、OpenDKIMの設定ファイルであるパス“/etc/opendkim.conf”のファイルを編集します。

Mode”は、”v”を“sv”に変更します。

Socket”は、
Milter”というPostfixのフィルターアプリケーションのソケットインターフェースです。
変更する必要はありませんが、Postfixと連携する際の必要な情報となります。

【DKIM署名を1つしか使用しない場合】

1つしかDKIM署名を使用しない場合
(個人運営のメールサーバーでは、このケースが多いかと思います)は、
Mode”の他に“Selector”、“Domain”、“KeyFile”の3行を編集します。

Selector”は、“default”のままか、
任意の文字列(多くの場合は、年月日(YYYYMMDD))を設定します。

KeyTable”と“SigningTable”の設定は必要ありませんので、
コメントアウトします。

【DKIM署名を複数使用する】

DKIM署名を複数使用する場合は、
逆に“Selector”、“Domain”、“KeyFile”の3行は必要ありません。
コメントアウトします。

代わりに、“KeyTable”と“SigningTable”の設定が必要となります。

2.2 “/etc/opendkim”下の各種テーブルファイル

本節では、次の3つのテーブルの設定について示します。

KeyTable
SigningTable
TrustedHosts

②と③のテーブルについては、1つの署名しか使用しない場合、
Configファイルにおいて“Selector”、“Domain”、“KeyFile”を設定していれば不要です。

2.2.1 KeyTable

署名に使う秘密鍵のファイルパスを指定します。

【書式】

【サンプル】
default._domainkey.mail.example.com
mail.example.com:default:/etc/opendkim/keys/mail.example.com/default.private
 
20240715._domainkey.example2.com
example2.com:20240715:/etc/opendkim/keys/example2.com/20240715.private
 
※複数のドメイン扱う場合は、以下のように改行区切りで全てのドメインを記載します。

2.2.2 SigningTable

署名を行うドメイン名を指定します。

【書式】

【サンプル】
*@mail.example.com default._domainkey.mail.example.com
*@example2.com 20240715._domainkey.example2.com
 
※複数のドメイン扱う場合は、以下のように改行区切りで全てのドメインを記載します。

2.2.3 TrustedHosts

信頼するホストを登録します。

自端末のみを信頼する場合は、下に示すような設定となります。

2.3 DKIM署名用の秘密鍵と公開鍵の作成

以下に示す手順で、DKIM署名用鍵ファイルを作成します。

2.3.1 鍵ファイルの作成先ディレクトリを作成

下に示すディレクトリパスの下に、<ドメイン名>のディレクトリを作成します。

2.3.2 鍵ファイルの作成

opendkim-genkey”コマンドで、鍵ファイル秘密鍵公開鍵)を作成します。

【コマンド書式】

鍵長は、一般的には1,024ビット(128バイト)ですが、
Googleでは2,048ビット(256バイト)となっています。

なかには、TXTレコードの最大長が254桁程度に制限されているドメインレジストラの
DNSサーバーがあります。
そのような場合には、鍵長1,024ビット(128バイト)とします。

指定されたディレクトリの下に、
*.private”の秘密鍵、“*.txt”の公開鍵の2つのファイルが作成されます。

*.txt”の公開鍵ファイルの内容は、DNSに登録する時に使用します。

【サンプル】
【セレクタが“default”の場合】
# opendkim-genkey -D /etc/opendkim/keys/example.com -b 2048 -d example.com -s default
 
【セレクタが“20240715”の場合】
# opendkim-genkey -D /etc/opendkim/keys/example.com -b 2048 -d example.com -s 20240715

2.3.3 ディレクトリと鍵ファイルの所有者とパーミッションを変更

2.3.1項2.3.2項で 作成したディレクトリとファイルの所有者を“opendkim”に、
パーミッションを下に示すように変更します。

# chown opendkim:opendkim -R /etc/opendkim/keys/<ドメイン名>
# chmod 600 /etc/opendkim/keys/example.com/<セレクタ>.private
# chmod 644 /etc/opendkim/keys/example.com/<セレクタ>.txt

2.4 Postfixの設定

パス“/etc/postfix/main.cf”のPostfixの設定ファイルに、下に示す4行を追記します。

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters

そして、Postfixを“opendkim”グループに追加して、Postfixを再起動します。

# gpasswd -a postfix opendkim
# systemctl restart postfix

2.5 OpenDKIMの起動と自動起動設定

下に示すコマンドで、opendkimを起動し、また自動起動設定を行います。

# systemctl start opendkim
# systemctl enable opendkim

3 DNSへの設定

3.1 DNSへの設定

DKIMレコードは、下に示す書式のTXT形式のレコードです。

【書式】

  下に、DNS登録サンプルと、図3.1にドメインレジストラの登録画面の様子を示します。

【サンプル】

【ドメインレジストラのDNSレコード登録画面】

3.2 Test DKIM Key

3.2.1 ローカルでの秘密鍵の整合性チェック

opendkim-testkey”コマンドで、
登録するDKIMレコードとローカルにある秘密鍵の整合性をチェックすることができます。

# opendkim-testkey -vvv -d <ドメイン名> -s <セレクタ> -k /etc/opendkim/keys/<セレクタ>.private

なにも問題が無ければ、次のように表示されます。

$ sudo /usr/sbin/opendkim-testkey -d example.com -k /etc/opendkim/keys/example.com/default.private -vv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: record 0 for 'default._domainkey.example.com' retrieved
opendkim-testkey: checking key 'default._domainkey.example.com'
opendkim-testkey: key default._domainkey.example.com not secure
opendkim-testkey: 1 key checked; 1 pass, 0 fail
 
※ DNSSEC が有効になっていない場合、
 上記のように「key default._domainkey.example.com not secure」と指摘されます。
 DNSSEC を使用しないのであれば、このままで問題ありません。

3.2.2 DNS登録DKIMレコードの確認

下に示すサイトで、DNSに登録されているDKIMレコードを確認することができます。

DKIM Record Check | mimecast  

結果は、図3.2-2に示すように表示されます。

以上

本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。

少しでも役に立てていただければ、うれしく思います。

このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元著者名は明らかにしてください

なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ