1 DKIMとは
本記事は、
CentOSなどのRHEL系OSにおけるDKIMのインストール設定について示したものです。
まず初めに、DKIMとはなんぞや、を簡単に。
DKIM(Domain 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 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
署名に使う秘密鍵のファイルパスを指定します。
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
署名を行うドメイン名を指定します。
*@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に登録する時に使用します。
# 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.4 Postfixの設定
パス“/etc/postfix/main.cf”のPostfixの設定ファイルに、下に示す4行を追記します。
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
そして、Postfixを“opendkim”グループに追加して、Postfixを再起動します。
# systemctl restart postfix
2.5 OpenDKIMの起動と自動起動設定
下に示すコマンドで、opendkimを起動し、また自動起動設定を行います。
# systemctl enable opendkim
3 DNSへの設定
3.1 DNSへの設定
DKIMレコードは、下に示す書式のTXT形式のレコードです。
下に、DNS登録サンプルと、図3.1にドメインレジストラの登録画面の様子を示します。
3.2 Test DKIM Key
3.2.1 ローカルでの秘密鍵の整合性チェック
“opendkim-testkey”コマンドで、
登録するDKIMレコードとローカルにある秘密鍵の整合性をチェックすることができます。
なにも問題が無ければ、次のように表示されます。
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 を使用しないのであれば、このままで問題ありません。
以上
本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
少しでも役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。