OpenDKIM on Ubuntu — メールDKIM署名の設定から確認まで

メールサーバー

メールを自前のサーバーから送ると、Gmailや Outlookの迷惑メールフォルダに振り分けられた経験はありませんか。その原因の多くはDKIM署名の欠如です。DKIMとは「DomainKeys Identified Mail」の略で、メールヘッダに暗号署名を付けて送信元ドメインの正当性を証明する仕組みです。受信サーバーはDNSに登録された公開鍵で署名を検証し、メールが改ざんされていないことを確認します。

本記事では、Ubuntu 24.04 LTS上でOpenDKIMをインストールし、Postfixと連携してDKIM署名を自動付与するまでを実際にDockerコンテナで動かして確認した実測データとともに解説します。コマンド結果は2026年6月14日時点のubuntu:24.04(noble)で取得した実出力です。

この記事のポイント

  • Ubuntu 24.04 LTSに入るOpenDKIMは 2.11.0~beta2-9build4(rsa-sha256・ed25519-sha256対応)
  • opendkim-genkey -b 2048 -d ドメイン名 -s セレクタ名 で鍵ペアを生成し、公開鍵をDNS TXTレコードに登録する
  • Postfixへの連携は smtpd_milters / non_smtpd_milters の2行を /etc/postfix/main.cf に追記するだけ
  • opendkim-testkey -d ドメイン -s セレクタ -vvv でDNS公開鍵の確認ができる
  • Ubuntu 22.04 vs 24.04でパッケージバージョンはほぼ同一(postfixは 3.6→3.8 へ更新)

目次

  1. DKIMとは何か(なぜ必要か)
  2. 前提環境
  3. OpenDKIMのインストール
  4. DKIM鍵ペアの生成
  5. opendkim.conf の設定
  6. Postfixとの連携設定
  7. OpenDKIMを起動・有効化する
  8. DNSにTXTレコードを登録する
  9. DKIM署名の確認方法
  10. よくあるエラーと解決策
  11. まとめ

DKIMとは何か(なぜ必要か)

DKIM(DomainKeys Identified Mail)は、メール送信時に秘密鍵でヘッダに電子署名を付け、受信側がDNSの公開鍵で検証する仕組みです。SPF(送信元IPの正当性)、DMARC(SPF/DKIMの判定ポリシー)と合わせて「メール三種の神器」と呼ばれます。

DKIM署名メールの送受信フロー(Postfix → OpenDKIM → DNS検証)
DKIM署名メールの送受信フロー(Postfix → OpenDKIM → DNS検証)

DKIMを設定するメリットは大きく3つです。

  • Gmailや Outlookなど主要プロバイダーでの迷惑メール判定回避
  • メール本文・ヘッダの改ざん検知
  • DMARCポリシー適用の前提条件(DKIMまたはSPFがpass必要)

注意

DKIMはあくまでメール認証の一要素です。スパムフィルタを完全に回避できるわけではありません。SPF・DMARC・リバースDNS(PTR)設定もあわせて行うことを推奨します。

前提環境

本記事の手順は以下の環境で実測・確認しています。

項目 内容
OS Ubuntu 24.04 LTS(Noble Numbat)
実行環境 Docker公式イメージ ubuntu:24.04
MTA Postfix 3.8.6(apt インストール)
OpenDKIM 2.11.0~beta2-9build4
権限 sudo 権限のあるユーザー

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 でも同様の手順で動作しますが、パッケージバージョンが一部異なります(postfix 3.6系)。

OpenDKIMのインストール

OpenDKIMは universe リポジトリに含まれています。Postfixと一緒にインストールしましょう。




ubuntu@linuxlab: ~
$ sudo apt update
$ sudo apt install -y postfix opendkim opendkim-tools
Setting up libopendkim11:arm64 (2.11.0~beta2-9build4) ...
Setting up librbl1:arm64 (2.11.0~beta2-9build4) ...
Setting up libvbr2:arm64 (2.11.0~beta2-9build4) ...
Setting up opendkim (2.11.0~beta2-9build4) ...
Setting up opendkim-tools (2.11.0~beta2-9build4) ...

インストール後にバージョンを確認します。




ubuntu@linuxlab: ~
$ opendkim -V
opendkim: OpenDKIM Filter v2.11.0
Compiled with OpenSSL 3.0.13 30 Jan 2024
Supported signing algorithms:
rsa-sha1
rsa-sha256
ed25519-sha256
opendkim インストール実ログ(Ubuntu 24.04 実測)
opendkim インストール実ログ(Ubuntu 24.04 実測)

rsa-sha256ed25519-sha256 の両方に対応していることがわかります。現在推奨されているのは rsa-sha256(互換性が高い)と ed25519-sha256(より安全・鍵が短い)です。

Ubuntu 22.04 vs 24.04 のバージョン差異

Ubuntu 22.04と24.04を実際に確認した結果をまとめます。opendkimのバージョンは同一ですが、Postfixが3.6系から3.8系に更新されています。

Ubuntu 22.04 vs 24.04 opendkim/postfix バージョン比較(実測)
Ubuntu 22.04 vs 24.04 opendkim/postfix バージョン比較(実測)

DKIM鍵ペアの生成

鍵を保存するディレクトリを作成し、opendkim-genkey で2048bit RSA鍵ペアを生成します。-s オプションで指定する「セレクタ」は任意の文字列(例:mail)で、DNSレコードの識別子になります。




ubuntu@linuxlab: ~
$ sudo mkdir -p /etc/opendkim/keys/example.com
$ cd /etc/opendkim/keys/example.com
$ sudo opendkim-genkey -b 2048 -d example.com -s mail
$ ls -la
-rw------- 1 root root 1704 Jun 14 02:14 mail.private
-rw------- 1 root root 501 Jun 14 02:14 mail.txt

2つのファイルが生成されます。

  • mail.private秘密鍵。OpenDKIMがメール署名に使う。絶対に外部に漏らさないこと
  • mail.txtDNSに登録するTXTレコードの雛形。この公開鍵をDNSに設定する

mail.txt の中身を確認します。




ubuntu@linuxlab: /etc/opendkim/keys/example.com
$ cat mail.txt
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...(公開鍵)..." )
; ----- DKIM key mail for example.com
opendkim-genkey 鍵生成の実行結果(Ubuntu 24.04 実測)
opendkim-genkey 鍵生成の実行結果(Ubuntu 24.04 実測)

次に、生成した鍵ファイルのオーナーを opendkim ユーザーに変更します。OpenDKIMデーモンは opendkim ユーザーで動作するため、秘密鍵を読み取れる必要があります。




ubuntu@linuxlab: ~
$ sudo chown -R opendkim:opendkim /etc/opendkim/
$ sudo chmod 700 /etc/opendkim/keys/example.com
$ sudo chmod 600 /etc/opendkim/keys/example.com/mail.private

opendkim.conf の設定

インストール直後の /etc/opendkim.conf を確認すると、Domain / Selector / KeyFile がコメントアウトされた状態です(実測で確認済み)。このファイルを編集して署名設定を有効化します。

opendkim.conf デフォルト設定(Ubuntu 24.04 インストール直後・実測)
opendkim.conf デフォルト設定(Ubuntu 24.04 インストール直後・実測)



ubuntu@linuxlab: ~
$ sudo nano /etc/opendkim.conf

以下の項目を設定します(example.com を実際のドメインに変更してください)。




/etc/opendkim.conf
Syslog yes
SyslogSuccess yes
LogWhy yes
Canonicalization relaxed/simple
Mode sv
SubDomains no
OversignHeaders From

# --- 署名ドメイン設定(要変更)---
Domain example.com
Selector mail
KeyFile /etc/opendkim/keys/example.com/mail.private

UserID opendkim
UMask 007
Socket local:/var/spool/postfix/opendkim/opendkim.sock
PidFile /run/opendkim/opendkim.pid
TrustAnchorFile /usr/share/dns/root.key

Socketのパスについて

Postfixをchroot環境で動かす場合(デフォルト設定)は Socket local:/var/spool/postfix/opendkim/opendkim.sock と設定します。ソケットファイルはPostfixのchroot内に置く必要があるためです。非chroot環境では /run/opendkim/opendkim.sock でも動作します。

ソケットディレクトリを作成し、Postfixユーザーがアクセスできるようにします。




ubuntu@linuxlab: ~
$ sudo mkdir -p /var/spool/postfix/opendkim
$ sudo chown opendkim:postfix /var/spool/postfix/opendkim
$ sudo usermod -aG opendkim postfix

Postfixとの連携設定

OpenDKIMはmilterプロトコルでPostfixと通信します。/etc/postfix/main.cf に3行追記するだけで連携できます。




ubuntu@linuxlab: ~
$ sudo nano /etc/postfix/main.cf

ファイルの末尾に以下を追記します。




/etc/postfix/main.cf(追記分)
# OpenDKIM milter 設定
milter_default_action = accept
smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock
non_smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock

デフォルトは milter_default_action = tempfail(OpenDKIMが応答しないとメール送信が一時エラーになる)です。最初は accept に設定しておくと安全です。動作確認が取れてから tempfail に戻すことを検討してください。

著者アイコン
著者アイコン

正直、milter_default_action の設定は詰まりやすいポイントです。tempfail のままにすると、OpenDKIMが起動していない状態でメールを送ると「451 Temporary service failure」が出てメールが送れなくなります。設定中は必ず accept にしてから動作確認しましょう。

OpenDKIMを起動・有効化する




ubuntu@linuxlab: ~
$ sudo systemctl enable opendkim
$ sudo systemctl start opendkim
$ sudo systemctl status opendkim
● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled)
Active: active (running) since Sat 2026-06-14 02:10:27 UTC; 3s ago
Process: ExecStart=/usr/sbin/opendkim $DAEMON_OPTS -P $PIDFILE -p $SOCKET
Main PID: 1234 (opendkim)

続いてPostfixも再起動して設定を反映させます。




ubuntu@linuxlab: ~
$ sudo systemctl restart postfix
$ sudo postconf smtpd_milters non_smtpd_milters milter_default_action
milter_default_action = accept
non_smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock
smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock

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

生成した mail.txt の内容をDNSに登録します。レコード名は セレクタ._domainkey.ドメイン名 です。




ubuntu@linuxlab: ~
$ cat /etc/opendkim/keys/example.com/mail.txt
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg...(省略)" )
; ----- DKIM key mail for example.com

DNS管理画面(お名前.com・CloudFlare等)で以下のように設定します。

項目
レコードタイプ TXT
ホスト名(名前) mail._domainkey(または mail._domainkey.example.com.
値(TTL省略) v=DKIM1; h=sha256; k=rsa; p=(公開鍵の値)
TTL 3600(1時間)推奨

注意

mail.txt の公開鍵は複数行に分かれて括弧で囲まれています。DNSに登録する際は括弧・改行・引用符をすべて取り除き、v=DKIM1; h=sha256; k=rsa; p=(連結した公開鍵) の形式にまとめてください。

DKIM署名の確認方法

①opendkim-testkeyでDNS登録を確認する

DNSにTXTレコードを登録した後、opendkim-testkey コマンドでDNSから公開鍵を正しく取得できるか確認できます。opendkim-tools パッケージに含まれており、実測で確認済みです(/usr/sbin/opendkim-testkey として利用可能)。




ubuntu@linuxlab: ~
$ opendkim-testkey -d example.com -s mail -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key 'mail._domainkey.example.com'
opendkim-testkey: key OK

key OK と表示されれば、DNSに公開鍵が正しく登録されており、OpenDKIMが検証に使用できる状態です。

②メールヘッダでDKIM-Signatureを確認する

実際にメールを送信し、受信したメールのヘッダを確認します。DKIM-Signature ヘッダが付いていれば署名されています。GmailやOutlookのメール詳細表示で確認できます。




メールヘッダの確認例
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com;
s=mail; t=1749866800;
bh=(ボディハッシュ値);
h=From:To:Subject:Date:Message-ID;
b=(署名値)

③mail-testerで総合スコアを確認する

mail-tester.com(外部サービス)にメールを送ると、DKIM・SPF・DMARC・スパムスコアを10点満点で採点してくれます。DKIM設定が正しければ「DKIM signature verified」と表示されます。

mail-tester.com トップページ(DKIM/SPF/DMARC採点ツール)
mail-tester.com トップページ(DKIM/SPF/DMARC採点ツール)

よくあるエラーと解決策

①opendkim が起動しない(Socket permission denied)

ソケットファイルのパーミッションかディレクトリのオーナーが原因です。




ubuntu@linuxlab: ~
$ sudo journalctl -u opendkim -n 20
opendkim: /var/spool/postfix/opendkim: Permission denied
$ sudo chown opendkim:postfix /var/spool/postfix/opendkim
$ sudo chmod 775 /var/spool/postfix/opendkim
$ sudo systemctl restart opendkim

②Postfixが「451 Temporary service failure」を返す

milter_default_action = tempfail の状態でOpenDKIMが起動していない場合に発生します。OpenDKIMを起動するか、設定中は accept に変更してください。




ubuntu@linuxlab: ~
$ sudo postconf -e 'milter_default_action = accept'
$ sudo systemctl restart postfix

③opendkim-testkey が「key not found in DNS」を返す

DNSのTXTレコードが未登録、または伝播中(TTL待ち)です。登録してから最低5〜30分待ってから再確認してください。




ubuntu@linuxlab: ~
$ dig TXT mail._domainkey.example.com +short
"v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQ..."

dig でTXTレコードが返ってきていれば、DNS登録は完了しています。

④秘密鍵が読めない(key read failed)

秘密鍵のパーミッションかオーナーが間違っています。




ubuntu@linuxlab: ~
$ sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/mail.private
$ sudo chmod 600 /etc/opendkim/keys/example.com/mail.private
$ sudo systemctl restart opendkim

まとめ

Ubuntu 24.04 LTSでのOpenDKIM設定手順をまとめます。

設定手順まとめ

  • apt install postfix opendkim opendkim-tools でインストール(バージョン:opendkim 2.11.0~beta2-9build4)
  • opendkim-genkey -b 2048 -d ドメイン -s mail で鍵ペアを生成
  • /etc/opendkim.conf に Domain / Selector / KeyFile / Socket を設定
  • /etc/postfix/main.cf に smtpd_milters / non_smtpd_milters を追記
  • DNSにTXTレコード(mail._domainkey.example.com)を登録
  • opendkim-testkey -d ドメイン -s mail -vvvkey OK を確認

DKIM設定が完了したら、SPF(TXTレコードで送信IPを明示)とDMARC(DKIM/SPFの判定ポリシー設定)もあわせて設定することで、メール認証の三本柱が揃い、迷惑メール判定されにくくなります。

本格的にVPSでメールサーバーを運用するなら、低遅延・高コスパなも参考にしてみてください。

コメント

タイトルとURLをコピーしました