主なポイント
- PostfixにはDKIM署名機能が組み込まれていないため、サーバーから送信される前にすべての送信メッセージに署名を行うミルター(OpenDKIMまたはRspamd)を接続します。
- OpenDKIMは署名機能としては依然として動作しますが、近年はアップストリームでの活動が乏しくなっています。現在のディストリビューションでのサポート状況を確認できる、単純な単一ドメインの環境ではOpenDKIMを選択し、マルチドメイン環境や本番環境のメールではRspamdを優先してください。
- 最低でも2048ビットのRSA鍵を使用してください。1024ビットの鍵はRFC 8301により非推奨となっています。MTA/milterとDNSプロバイダの双方がEd25519をサポートしている場合は、Ed25519を優先してください。
- 「署名なし」エラーのほとんどは、ソケットや権限の不一致に起因しています。Postfix が smtpd を chroot 環境で実行している場合(一部の Debian/Ubuntu パッケージでは一般的です)、OpenDKIM のソケットを Postfix のスプールディレクトリ内に配置し、postfix ユーザーがそれにアクセスできるようにしてください(例:postfix ユーザーを opendkim グループに追加するなど)。
- DKIMの検証に合格するだけでは不十分です。DMARCでは整合性が求められるため、署名ドメインは「From:」ヘッダーと一致している必要があり、鍵は少なくとも年に1回は更新する必要があります。
Postfix の DKIM とは、送信メールに添付される暗号署名のことで、これにより受信サーバーは、そのメッセージが実際にあなたのドメインから送信されたものであり、転送中に改ざんされていないことを確認できます。
Postfixはこれ自体ではこの処理を行いません。サーバーから送信されるすべてのメッセージに署名を行う「milter」(メールフィルター)を組み込む必要があります。
このガイドでは、2026年におけるPostfixのDKIM設定を最初から最後まで解説します。ミルターの選択や最新の鍵の生成から、Postfixへの組み込み、そして鍵がセキュリティ上のリスクとなる前にローテーションを行う方法までを網羅しています。
OpenDKIM 対 Rspamd:2026年にはどちらを使うべきか?
メッセージに署名を行うには、まず署名を行うミルターを選択する必要があります。2026年現在、PostfixでのDKIM運用において、OpenDKIMとRspamdが最も一般的な選択肢となっています。
どちらも送信メールを正しく認証します。ただし、実行するためにユーザーに求められる作業量や、今後どれほど安心して頼れるかという点では違いがあります。
| 基準 | OpenDKIM | Rspamd |
|---|---|---|
| 保守状況 | アップストリームでの活動は乏しい。最新の安定版リリースは 2.10.3(2015年5月)。2.11.0 ブランチはベータ版である。Debian testing では、libmemcached の依存関係に関するバグのため、自動削除対象(2026年6月)としてマークされている。 | 積極的に開発が進められ、頻繁にリリースされている |
| その機能 | DKIMの署名・検証のみ | DKIM署名と包括的なスパムフィルタリング |
| セットアップの複雑さ | シンプルで、単一の目的を持つ | フロント部分に可動部品が増えた |
| Postfixとの連携 | ミルター(ソケット) | Milter(プロキシソケット) |
| Web UI | なし | 組み込み型ダッシュボード |
OpenDKIMはメールに正しく署名を行っており、現在、数百万台のサーバーがこれに依存しています。しかし、これを基盤としてシステムを構築する前に、そのメンテナンスに関するリスクを慎重に検討する必要があります。
アップストリームでの最新の安定版リリースは、2015年5月12日の2.10.3でした。Ed25519のサポートを追加した2.11.0ブランチは、ベータ版から脱却することはありませんでした。 OpenDKIMは依然として確実にメールに署名を行っており、主要なディストリビューションにもパッケージとして含まれていますが、Debian testingでは、libmemcachedとの推移的依存関係の問題(アップストリームによる開発中止そのものではありません)を理由に、バージョン2.11.0~beta2を自動削除対象として指定しています(現在の予定では2026年6月)。OpenDKIMを長期的な本番環境での使用に導入する前に、お使いのディストリビューションにおける現在のパッケージの状態を確認してください。
今日から運用することは可能ですが、その基盤となっているソフトウェアのアップストリームでは、ここ10年間安定版がリリースされていません。この点を、長期的なリスクとして慎重に検討する必要があります。
Rspamd は、現在も活発にメンテナンスされている代替ツールです。DKIM の署名を行い、単一のミルターからスパムをフィルタリングするため、受信側の保護も必要であれば、2つのサービスではなく1つのサービスだけで済みます。 Postfixは、Rspamdと組み合わせて使用される最も一般的なMTAです であり、Mailcow のようなスタックでは、DKIM 署名に OpenDKIM ではなく Postfix に依存しています。
選び方は以下の通りです:
- OpenDKIM を選択してください 単一のドメインを運用しており、DKIM署名のみを行い、それ以外の設定は一切行わないという、可能な限りシンプルな設定を希望する場合。
- Rspamd を選択する 複数のドメインを管理している場合、本番環境のメールを送信する場合、またはMailcowやiRedMailのようなスタック上で構築している場合は、Rspamdを選択してください。
いずれにせよ、以下の説明では両方の方法について解説しています。ご自身で選んだ方法の項目までスキップしてください。
おすすめ記事: DKIMとは?
開始前の準備事項
鍵を生成したり、設定ファイルを編集したりする前に、以下の4つの事項がすでに整っていることを確認してください
- すでにメールを送信できる状態のPostfix環境: DKIMはサーバーが送信するメールに署名を行うため、まずサーバーが正常にメールを送信できている必要があります。Postfixがまだ設定されていない場合は、先にその設定を済ませてから、次の手順に進んでください。
- ドメインのDNSアクセス: AレコードとMXレコードはすでに公開されているはずですが、公開鍵を格納する場所となるため、TXTレコードを追加できる必要があります。
- メールサーバーでのrootまたはsudoアクセス権: システム設定ファイルの編集やサービスの再起動を行うことになります。
- 長いTXTレコードを受け付けるDNSプロバイダー: 2048ビットの鍵は、1つのTXT文字列の制限である255文字を超えるため、一部のプロバイダーでは、引用符で囲んだ2つの文字列に分割するよう求められます。鍵を生成する前に、ご利用のプロバイダーがこれに対応しているか確認してください。
まず、鍵の長さを選択してください。2048ビットのRSA、あるいはMTA/milterとDNSプロバイダーの両方が対応している場合はEd25519を選択してください。ただし、1024ビットは絶対に使用しないでください。 RFC 8301ではSHA-1の使用が禁止されており(rsa-sha1は「MUST NOT」)、2048ビットRSAが「SHOULD」レベルの最低基準として推奨されていますが、プロトコルの最低要件としては1024ビットが維持されています(少なくとも1024ビットを「MUST」使用)。鍵の強度が低いと、受信者があなたのメールを信用できなくなる理由となります。
OpenDKIM を使用して Postfix の DKIM を設定する方法
OpenDKIMは、単一ドメインのPostfixサーバーにDKIM署名を追加する最も直接的な方法です。デーモンは1つ、鍵も1つで済み、余計な構成要素は一切必要ありません。以下の5つの手順に従うことで、署名のないメールを送信していたサーバーを、受信側が検証可能な鍵を使ってすべての送信メッセージに署名を行うサーバーへと変更できます。各手順は前の手順を基盤としているため、順番通りに実行してください。
手順 1: OpenDKIM をインストールする
2つのパッケージをインストールします: opendkim (署名デーモン本体)と opendkim-tools (鍵の生成に使用するユーティリティ)の2つのパッケージをインストールしてください。
Ubuntu 24.04 / Debian 12:
bash
sudo apt update
sudo apt install opendkim opendkim-tools
RHEL / Rocky 9(OpenDKIM は EPEL リポジトリに含まれています):
bash
sudo dnf install epel-release
sudo dnf install opendkim opendkim-tools
起動時にサービスが開始されるように設定します:
bash
sudo systemctl enable opendkim
注: ディストリビューションによっては 、サービス名やユーザー/グループ名が異なる場合があります(例:opendkim 対 opendkim-daemon、opendkim:opendkim 対 opendkim:postfix)。コマンドが一致しない場合は、パッケージのドキュメントや systemd ユニットを確認してください。
ステップ 2: DKIM 鍵ペアを生成する
ドメインの鍵を格納するディレクトリを作成し、2048ビットの鍵ペアを生成します:
bash
sudo mkdir -p /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -s selector2026 \
-D /etc/opendkim/keys/example.com/
各フラグの機能:
| 旗 | 意味 |
|---|---|
| -b 2048 | 鍵の長さ(ビット単位) - 2048ビットRSA |
| -d example.com | 署名対象のドメイン |
| -s selector2026 | セレクタ名(以下の注を参照) |
| -D /etc/opendkim/keys/example.com/ | 出力ファイルの保存先 |
セレクタについて: the -s 値は、最終的にDNSレコードに反映されるラベルとなります。 selector2026のような年を基にした名前を使用してください。今のところコストはかからず、将来的なローテーションもスムーズに行えます。来年は selector2027 を生成すれば、切り替え期間中も古いレコードは有効なまま維持されます。
このコマンドを実行すると、2つのファイルが生成されます:
| ファイル | 概要 | 規則 |
|---|---|---|
| selector2026.private | あなたの秘密鍵 | 決して共有しないでください。OpenDKIMのみが読み取れるようにしてください。 |
| selector2026.txt | DNS用にフォーマットされた公開鍵 | ステップ5で公開するのはこれです |
それでは、所有権を設定しましょう。ここでの権限設定の誤りは、OpenDKIMによる署名処理が失敗する最も一般的な原因ですので、この手順は絶対に飛ばさないでください:
bash
sudo chown -R opendkim:opendkim /etc/opendkim/keys
sudo chmod 600 /etc/opendkim/keys/example.com/selector2026.private
お使いのディストリビューションで異なる名前が使用されている場合は、ユーザー/グループを調整してください(例:opendkim:postfix)。パッケージのドキュメントまたはsystemdユニットを確認してください。
ステップ 3: OpenDKIM の設定
OpenDKIM は、主な設定を /etc/opendkim.confから読み込み、3つの小さな参照ファイルを用いて、何をどの鍵で署名するかを決定します。まず、中核となるディレクティブを設定します:
| Syslog | はい |
|---|---|
| UMask | 2 |
| モード | s |
| 正規化 | リラックスした/リラックスした |
| ソケット | local:/var/spool/postfix/opendkim/opendkim.sock |
| PidFile | /run/opendkim/opendkim.pid |
| ヘッダーの過剰署名 | から |
| KeyTable | /etc/opendkim/key.table |
| 署名表 | refile:/etc/opendkim/signing.table |
| 外部無視リスト | /etc/opendkim/trusted.hosts |
| InternalHosts | /etc/opendkim/trusted.hosts |
重要な指令の内容:
| 指令 | 制御対象 |
|---|---|
| モード s | 署名のみ。受信メールの検証もOpenDKIMに行わせたい場合は、svを使用してください。 |
| 正規化の緩和/緩和 | 転送中の些細な空白の変更を許容するため、署名の有効性が維持されます。注:正規化は DMARC の整合性を制御しません。DMARC の整合性は、正規化の設定ではなく、DKIM 署名内の d= ドメインが From: ヘッダーのドメインと一致しているかどうかに依存します。 |
| ソケット | OpenDKIMがPostfixの通信を待機する場所です。このパスは、後でPostfixで設定する内容と一致している必要があります。 |
| OversignHeaders 出典: | 「From」ヘッダーに署名を行うことで、攻撃者が2つ目のヘッダーを追加できないようにします。これはささやかながらも、確実ななりすまし防止策です。 |
| KeyTable / SigningTable | ドメイン、セレクタ、キーを関連付ける2つのルックアップファイル(以下)。 |
次に、3つのルックアップファイルを作成します。それぞれのファイルには、1つの役割があります:
| ファイル | 求人 | 例となる行 |
|---|---|---|
| signing.table | 送信者をセレクタにマッピングする | *@example.com selector2026._domainkey.example.com |
| key.table | そのセレクタをディスク上の秘密鍵に関連付ける | selector2026._domainkey.example.com example.com:selector2026:/etc/opendkim/keys/example.com/selector2026.private |
| trusted.hosts | 送信メールに署名が必要となるホストの一覧 | 127.0.0.1 / localhost / ::1 / example.com |
ステップ 4: OpenDKIM を Postfix に接続する
多くの場合、セットアップがここで失敗しますが、その原因はほぼ常にソケットにあります。OpenDKIMは、Postfixと通信するためにソケットファイルを作成します。Postfixがchroot環境内でsmtpdを実行している場合(これはDebian/Ubuntuパッケージのデフォルト設定ですが、アップストリームのPostfixやRHEL/Rockyのデフォルト設定ではありません)、smtpdは/var/spool/postfix内に閉じ込められており、そのディレクトリ外のソケットを認識できません。 その結果、両者は接続できず、メールは署名なしのまま送信されてしまいます。
この問題を解決するには、ソケットを を Postfixのスプールディレクトリ内に配置し、 postfix ユーザーにそのソケットへのアクセス権限を与えることです。以下の手順を順に実行してください:
1. Postfixのスプール内にソケットディレクトリを作成します:
bash
sudo mkdir -p /var/spool/postfix/opendkim
sudo chown opendkim:postfix /var/spool/postfix/opendkim
お使いのディストリビューションで「opendkim:opendkim」が使用されている場合は、グループを調整してください。
2. 以下の postfix ユーザーを opendkim グループにpostfixユーザーを追加し、 に追加し、ソケットを読み込めるようにします:
bash
sudo gpasswd -a postfix opendkim
3. ランタイムソケットのパスを確認する が opendkim.confと一致していることを確認してください。Ubuntu/Debian では、 /etc/default/opendkim (または systemd のオーバーライド)で設定します:
SOCKET=”local:/var/spool/postfix/opendkim/opendkim.sock”
4. Postfix を milter に向ける の /etc/postfix/main.cf:
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
これら4つのPostfixディレクティブの意味は次のとおりです:
| 指令 | 目的 |
|---|---|
| milter_default_action = accept | ミルターがダウンしていても、メールは引き続き配信されます。署名者がダウンしても、キューが黙ってブラックホール化されることはありません。 |
| milter_protocol = 6 | 現在の OpenDKIM が使用している milter プロトコルのバージョン。 |
| smtpd_milters | SMTP経由で受信したメール(送信されたメール)に対して、ミルターを適用します。 |
| non_smtpd_milters | SMTP経由で受信されていないメール(例:ローカルで生成されたメールなど)にこれを適用します。 |
main.cf 内のソケットパス main.cf 内のソケットパスは相対パスであり、 local:opendkim/opendkim.sockであり、完全なファイルシステムパスではありません。これは、Postfixがchroot環境内からこのパスを読み取っているためです。
すべての設定を反映させるには、両方のサービスを再起動してください:
bash
sudo systemctl restart opendkim
sudo systemctl restart postfix
ステップ 5: DKIM DNS TXT レコードを公開する
手順 2 で生成した公開鍵ファイルを開きます:
bash
sudo cat /etc/opendkim/keys/example.com/selector2026.txt
その内容を、ご利用のDNSプロバイダーで新しいレコードとして登録してください:
| フィールド | 価値 |
|---|---|
| レコード名 | selector2026._domainkey.example.com |
| タイプ | TXT |
| 価値 | 括弧内のすべて(v=DKIM1; k=rsa; p=... という文字列) |
これは 2048 ビットの鍵であるため、その値は単一の TXT 文字列の制限である 255 文字を超えてしまいます。ほとんどの DNS プロバイダでは自動的に分割されます。お使いのプロバイダで拒否される場合は、公開鍵を 2 つの引用符で囲まれた文字列に分割し、 .txt ファイルには、分割箇所がすでに示されています。
セットアップ時には、TTLを300秒に設定しておくと、万が一ミスがあっても修正の負担が軽くなります。署名が正常に機能することを確認したら、3600に引き上げてください。
ステップ6:送信前に確認する
DNSの反映には時間がかかります。また、2048ビットの鍵を誤って分割してしまうと、ゾーンエディタ上では問題ないように見えても、受信側がそれを読み取った瞬間にエラーが発生してしまいます。
Rspamd を使用した Postfix DKIM の設定方法(マルチドメイン環境には 2026 を推奨)
単一のドメインを超える場合や、本番環境のメール運用を行う場合には、Rspamd の方が優れた選択肢となります。Rspamd は DKIM 署名を行い、 スパムを をフィルタリングするため、2つのサービスを管理する代わりに1つのサービスで済みます。
また、ドメインごとにキーを自動的に検索するため、新しいドメインを追加する際も、一から設定し直す必要はなく、たった1行の変更で済みます。Postfixでの設定手順を、5つのステップに分けて以下に示します。
手順 1: Rspamd をインストールする
ディストリビューションのベースリポジトリにあるバージョンは通常、古くなっているため、Rspamdの公式安定版リポジトリからインストールしてください。
bash
sudo apt install -y lsb-release wget gpg
sudo mkdir -p /etc/apt/keyrings
wget -O- https://rspamd.com/apt-stable/gpg.key | \
gpg –dearmor | sudo tee /etc/apt/keyrings/rspamd.gpg > /dev/null
echo “deb [signed-by=/etc/apt/keyrings/rspamd.gpg] \
http://rspamd.com/apt-stable/ $(lsb_release -cs) main” | \
sudo tee /etc/apt/sources.list.d/rspamd.list
sudo apt update && sudo apt install rspamd
起動時に自動的に実行されるように設定します:
bash
sudo systemctl enable rspamd
リポジトリのURLやGPGキーの設定手順は時折変更されるため、最新のインストール手順については必ずrspamd.comで確認してください。
ステップ 2: DKIM キーを生成する
Rspamd には独自の鍵生成ツール、 rspamadm dkim_keygen を同梱しており、別途ツールパッケージをインストールする必要はありません。このツールは秘密鍵をファイルに書き出し、公開鍵(DNSレコード)を画面に表示します。これを .pub ファイルとして保存します。
bash
sudo mkdir -p /var/lib/rspamd/dkim
sudo rspamadm dkim_keygen -s selector2026 -b 2048 -d example.com \
-k /var/lib/rspamd/dkim/example.com.selector2026.key | \
sudo tee /var/lib/rspamd/dkim/example.com.selector2026.pub
sudo chown -R _rspamd:_rspamd /var/lib/rspamd/dkim
お使いのディストリビューションで _rspamd:_rspamd ではなく rspamd:rspamd が使用されている場合は、ユーザー/グループを調整してください。確認するには、パッケージの systemd ユニットを確認してください。
フラグは OpenDKIM のものと共通です: -s セレクタ、 -b 2048 鍵サイズ、 -d ドメイン、 -k 秘密鍵の出力ファイル。最終的に以下の2つのファイルが生成されます:
| ファイル | 概要 |
|---|---|
| example.com.selector2026.key | Rspamd が使用する秘密署名鍵です。所有者を _rspamd ユーザーのままにしておいてください。 |
| example.com.selector2026.pub | DNS用にフォーマットされた公開鍵は、ステップ5で公開します。 |
ステップ 3: DKIM 署名を有効にする
Rspamd は、その dkim_signing モジュールを通じてDKIMを処理します。これを有効にし、鍵が保存されている場所を /etc/rspamd/local.d/dkim_signing.confにキーの保存場所を指定します:
selector = “selector2026”;
path = “/var/lib/rspamd/dkim/$domain.$selector.key”;
allow_username_mismatch = true;
use_domain = “header”;
各設定の機能:
| 設定 | 制御対象 |
|---|---|
| セレクタ | セレクタ名は、キーのファイル名およびDNSレコードと一致している必要があります |
| パス | Rspamd が秘密鍵を検出する場所。$domain および $selector は自動的に入力されます。 |
| allow_username_mismatch | 認証されたユーザー名が「From」ドメインと一致しない場合でも署名される |
| use_domain = "header" | メッセージの「From」ヘッダーから署名ドメインを取得します |
それ パス 行こそが、Rspamdを複数のドメインに対応させる強みとなっています。これは $domain および $selectorをファイル名で解決するため、別のドメインを追加する際は、そのキーを同じフォルダに配置するだけで済み、新しい設定ブロックや2つ目のデー をファイル名で解決するため、別のドメインを追加する場合、新しい設定ブロックや2つ目のデーモンを用意することなく、同じフォルダにそのドメインのキーを配置するだけで済みます。
ステップ 4: Rspamd を Postfix に接続する
Postfix を、 /etc/postfix/main.cfで、PostfixをRspamdのmilterに向けるように設定します。ディレクティブはOpenDKIMの設定と同一で、ソケットのみが異なります:
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
Rspamd は、TCP ポート 11332 でリスニングします。これはネットワークソケットであるため、OpenDKIMで問題となる chroot 環境におけるソケット権限の問題を回避できます。2つのミルター間で異なる行は、以下の1行のみです:
| ミルター | main.cf 内のソケット行 |
|---|---|
| OpenDKIM | smtpd_milters = local:opendkim/opendkim.sock |
| Rspamd | smtpd_milters = inet:localhost:11332 |
ステップ 5: DNS レコードを公開する
公開鍵を開き、OpenDKIMのステップ5とまったく同じレコード名形式で、 TXT タイプ、および2048ビット鍵に対する255文字の分割ルールに従って、公開鍵を開き、公開してください:
bash
sudo cat /var/lib/rspamd/dkim/example.com.selector2026.pub
必要に応じて、 /etc/rspamd/local.d/worker-controller.inc
これにより、署名やスパムに関する動向をリアルタイムで確認できます。その後、両方のサービスを再起動してください:
bash
sudo systemctl restart rspamd postfix
公開されたレコードを信頼する前に、OpenDKIMの設定後と同じように、DKIMチェッカーで検証してください。
Rspamdは、OpenDKIM および SpamAssassinの両方を置き換えます。これまで別のスパムフィルターを実行していた場合は、ここでそれを廃止することで、サービス数を減らし、設定対象範囲を縮小し、署名とフィルタリングの両方を一元管理できるようになります。
複数のドメインに対するPostfixのDKIM設定
1台のPostfixサーバーで複数のドメインを運用することは一般的ですが、 DKIM は、この点において手抜きをしません。送信元となる各ドメインには、それぞれ独自の鍵ペアとDNSレコードが必要です。これは、各ドメインが個別に認証されるためであり、すべてのドメインを網羅する共通の鍵は存在しないからです。スケーリングの方法は、選択したミルターによって異なります。
OpenDKIM を使用すると、すでに作成済みのテーブルを拡張できます。 新しいドメインごとに鍵を生成し、各ルックアップファイルにそのドメイン用の行を1行追加します。
「 signing.table:
*@example.com selector2026._domainkey.example.com
*@example.net selector2026._domainkey.example.net
In key.table:
selector2026._domainkey.example.com example.com:selector2026:/etc/opendkim/keys/example.com/selector2026.private
selector2026._domainkey.example.net example.net:selector2026:/etc/opendkim/keys/example.net/selector2026.private
新しいドメインが1つ増えるごとに、キーが1つ、行が2つ増える。手作業ではあるが、予測可能だ。
Rspamd を使えば、その作業はすでに完了しています: 以下の path 設定では $domain 変数を使用しているため、Rspamdはファイル名から各ドメインのキーを自動的に特定します。 example.net.selector2026.key を同じディレクトリに配置するだけで、設定変更なしでそのドメインに対しても署名が行われます。よりきめ細かな制御が必要な場合は、 dkim_signing.confにドメインごとのブロックを追加することも可能です。
マルチドメインの署名作業を管理しやすくするための習慣は2つあります:
- すべてのドメインで同じセレクタを使用してください、 selector2026 をどこでも使用することで、ローテーション処理を複数のプロセスではなく1つのプロセスにまとめることができます。
- ドメインごとに個別のDNSレコードを設定してください。1つでも設定を忘れると、そのドメインのメールはローカルでは署名されますが、受信側での検証に失敗してしまいます。
PostfixのDKIM設定をテストおよび検証する方法
メールに署名することと、その署名が正しく行われていることを確認することは、別物です。送信側からはすべて問題ないように見えても、受信側が密かにその署名を拒否している可能性があり、配信に失敗するまでそのことに気づかないでしょう。
以下の5つの確認手順により、DKIMが実際に機能していることを、自社のログから実際の受信者へと順を追って確認できます。以下の順序に従ってください:
確認事項 1:まずメールログを確認してください
メールログは最も迅速な確認手段であり、ローカルで利用できます。ログをリアルタイムで監視し、テストメッセージを送信して、署名エントリが表示されるのを確認してください:
bash
sudo tail -f /var/log/mail.log
RHEL/Rocky では、そのファイルは /var/log/maillogにあります。メッセージがあなたのセレクタで署名されたことを示す行を探してください。その行があれば、milterは正常に動作しています。
チェック 2: DNS に対してキーの有効性を検証する (OpenDKIM)
検証の結果、ディスク上の秘密鍵が公開した公開鍵と一致していることが確認されました:
bash
opendkim-testkey -d example.com -s selector2026 -vvv
key OK は、2つの部分が一致していることを意味します。それ以外の場合は、DNSの入力ミスまたはキーの不一致が考えられます。先に進む前に、これらを修正する必要があります。
確認項目 3:実際のテストを送信する
受信者があなたの署名を受け入れたことを証明できるのは、この確認方法だけです。Gmailアカウントにメールを送信し、メッセージを開いて、「オリジナルを表示」を選択してください。 DKIM:「PASS」 という文字列を探してください。これは、受信サーバーがあなたの署名が検証済みであることを確認していることを意味します。
チェック 4:外部チェッカーを実行する
DKIMチェッカーは、受信サーバーと同じ方法で公開されたレコードを取得・解析し、鍵が有効かつ完全であることを確認します
お試しください PowerDMARCの無料DKIMチェッカー。その後、mail-tester.comにメッセージを送信して、DKIMに加え、SPF、DMARC、スパムシグナルも考慮した、より包括的な配信可能性スコアを確認してください。
チェック 5:DKIMは合格するがDMARCは不合格となる落とし穴に注意する
署名が完全に検証されていても、DMARCが失敗する場合があります。これは、DMARCにはアラインメントが必要だからです。つまり、DKIMの d= タグ内のドメインが、表示されるFrom:ヘッダー内のドメインと一致している必要があります。
署名として mail.example.com として署名し、Fromには example.com で送信する場合、relaxedアライメントなら問題ありませんが、strictでは失敗します。DKIMが合格しているにもかかわらずDMARCが失敗する場合は、署名テーブルが正しいドメインに紐付けられているか確認してください。
チェック6:3つすべてを一度に監査する
DKIMチェックに合格すれば、認証の一部が機能していることは確認できますが、配信率やなりすまし対策の成否は、 DKIM、SPF、DMARC が連携して機能しているかどうかにかかっています。
PowerDMARCの無料 ドメインアナライザー は、これら3つすべてを一度にスキャンし、A~Fのスコアを返します。そのため、1回のスキャンで、ドメインが実際にエンドツーエンドで保護されているのか、それとも部分的にしかカバーされていないのかがわかります。
「DKIMは通過するがDMARCは失敗する」といった問題に直面した際は、無料の 「Email Header Analyzer」 が DKIM 判定結果と整合性の結果を並べて表示してくれるため、生のヘッダーを凝視することなく、数秒で不一致の箇所を正確に特定できます。
Postfix の DKIM キーのローテーション
サーバー上に何年も放置されたままの秘密鍵は、漏洩するリスクが徐々に高まっている鍵です。万が一漏洩した場合、あなたがそれに気づくまで、攻撃者はあなたのドメイン名を使ってメールに署名することが可能になります。
スケジュールに従って、少なくとも年に1回はローテーションを行うことで、その期間を短く抑えることができます。年単位のセレクタを使用することで、切り替えをスムーズに行うことができます。
回転のプロセス:
- 新しいセレクタを使用して新しいキーを生成する – selector2027。
- 新しい公開鍵を新しいDNS TXTレコードとして公開し、古いレコードはそのまま残しておきます。
- 新しいセレクタを使用して署名を行うよう、設定を更新してください。
- ミルターを再起動し、DNSのTTLが反映されるまで待ちます。
- 古いレコードは、TTLおよび送信中のメールの量に応じて、少なくとも前回のTTLに24~48時間を加えた期間(通常は合計48~72時間)は有効にしておいてください。古い鍵で署名され、すでに送信中のメールについては、引き続き検証が必要です。
- 古いセレクターを廃止し、そのDNSレコードを削除してください。
手順 5 と 6 の重複する部分は、決して急いではいけない部分です。古いレコードを早すぎるタイミングで削除してしまうと、そのレコードとの照合がまだ進行中のメッセージはすべて検証に失敗してしまいます。これはまさに、DKIM が防ぐべきである「サイレントな認証失敗」そのものです。
OpenDKIMもRspamdも、鍵の生成、DNSへの公開、あるいは鍵の有効期間の重複管理を自動化しません。ドメインが1つの場合は、年に1回のカレンダーリマインダーで済みますが、5つ以上になると、見落としがちな定期的なタスクとなります。そして、気づかないうちに鍵のローテーションが行われないまま放置されると、誰かに証明を求められて初めて気づくようなコンプライアンス上の不備につながります。
PostfixにおけるDKIMのよくあるエラーとその解決方法
PostfixにおけるDKIMの問題は、多くの場合、ソケットの権限、鍵のパス、ドメインの整合性など、いくつかの予測可能な原因に集約されます。以下の表では、発生している症状と、その最も可能性の高い原因および解決策を対にして掲載していますので、ご自身の状況に該当する項目にすぐに目を通すことができます。
| エラー | 考えられる原因 | 修正 |
|---|---|---|
| ヘッダーにDKIM署名がない | Milterが接続されていないか、ソケットが一致していません | opendkim.conf および main.cf 内のソケットのパスが一致していることを確認してください。また、postfix ユーザーが opendkim グループに所属しているか確認してください。 |
| Milter サービスに接続中... 接続が拒否されました | OpenDKIM デーモンが実行されていません | systemctl start opendkim; スプールディレクトリにソケットファイルが実際に存在することを確認する |
| opendkim: 鍵の取得に失敗しました | キーテーブルのパスが間違っているか、権限に問題があります | key.table 内の .private のパスを確認し、そのキーに対して chown opendkim:opendkim を実行してください。 |
| DKIMは合格したが、DMARCは不合格となった | 位置合わせのずれ | 署名ドメイン(d=)は、From: ヘッダーのドメインと一致している必要があります。緩やかな整合性を適用してください。 |
| DNSによって2048ビットの鍵が拒否された | プロバイダーのTXTレコードの文字数制限(255文字) | 同じTXTレコード内で、公開鍵を2つの引用符で囲まれた文字列に分割する |
手動によるPostfix DKIMから移行すべきタイミング
ドメインが1つだけの場合は、Postfixでの自己管理型DKIMが最適な選択肢です。一度設定すれば自動的に機能しますが、送信量が増えるにつれて、その背後にある手作業は、管理手段というよりもむしろリスク要因となってしまいます。
その段階に達したことを示すいくつかの兆候:
- 3つ以上のドメインを登録されます。
- メールは、ESP、トランザクションメール、アプリなど、複数の送信元から送信され、それぞれに独自の鍵が必要です。
- コンプライアンスの期限が迫っており、ローテーションを1回でも逃すわけにはいきません。
- DKIMに関する知識はたった1人の人物がすべて把握しており、その人物が退職すれば、その知識も失われてしまう。
もしこうした課題に直面しているなら、 ホスト型DKIM管理 を利用すれば、手動での作業を完全に排除することで、こうした課題を解決できます。手動によるDKIM管理とホスト型DKIM管理の違いは以下の通りです:
| タスク | マニュアル(OpenDKIM / Rspamd) | ホスティングされたDKIM |
|---|---|---|
| 鍵のローテーション | 各サイクルごとに手動で:生成、公開、オーバーラップ、廃止 | 自動、サイクルごとのDNS編集は不要 |
| 複数のドメイン | ドメインごとにキー、レコード、設定を個別に管理する | 一元的に管理される |
| キーサイズ | 2048ビット(またはEd25519) | 最大4096ビット |
| セレクタの管理 | 手動で追跡 | 主要なESPに対応した自動検出機能 |
| DNSのメンテナンス | 毎回のローテーションで編集される | 1つのCNAMEを1回公開する |
複数のドメインにわたってDKIMを管理している場合や、信頼性の高いコンプライアンス基準を満たすローテーションが必要な場合は、PowerDMARCの「Hosted DKIM」をご利用ください。これにより、手作業による負担と、それに伴うリスクを解消できます。
よくあるご質問
Postfix DKIM とは何ですか?
Postfix DKIM とは、Postfix サーバー上で送信メールに暗号署名を行う仕組みであり、これにより受信側は、そのメールが変更されることなく送信元のドメインから送信されたものであることを確認できます。Postfix には署名機能が組み込まれていないため、各メッセージを OpenDKIM や Rspamd といったミルターに渡して、そこで署名を追加させます。
OpenDKIMとは何ですか?
OpenDKIMは、Postfixやその他のMTA向けにDKIMの署名および検証を行うスタンドアロンのミルターであり、それ以外の機能は一切備えていません。シンプルで広く導入されていますが、2021年以降、安定版がリリースされていないため、長期的な運用を計画する場合は、そのメンテナンスリスクを十分に考慮してください。
Rspamdとは何ですか?
Rspamdは、活発にメンテナンスされているスパムフィルタリングシステムであり、そのDKIM署名モジュールはPostfixのメールに署名を行うことができます。フィルタリングと署名を1つのミルターで処理するため、OpenDKIMとSpamAssassinの両方に取って代わるものであり、マルチドメイン環境や本番サーバーにおいて、2026年を見据えたより強力な選択肢となります。
Postfixとは何ですか?
Postfixは、Unix系サーバー上で電子メールのルーティングと配信を行う、広く利用されているオープンソースのメール転送エージェント(MTA)です。メールの送受信は行いますが、それ自体ではDKIMの署名を行うことはできず、そのためにはOpenDKIMやRspamdのような別のミルターが必要です。
2026年には、Postfixと組み合わせてOpenDKIMとRspamdのどちらを使うべきでしょうか?
単一ドメインのシンプルな環境であれば、OpenDKIMでも問題なく動作します。複数のドメインや本番環境のサーバーの場合は、Rspamdの方が適しています。Rspamdは活発にメンテナンスされており、DKIM署名とスパムフィルタリングを1つのミルターに統合しています。
送信メールにDKIM署名が行われていることを確認するにはどうすればよいですか?
確認 /var/log/mail.log で署名エントリを確認し、 opendkim-testkeyを実行し、Gmailにテストメールを送信して、生のヘッダーで DKIM: PASSがあるか確認するか、無料のDKIMチェッカーでドメインを検査してください。
- 2026年にPostfixのDKIMを設定する方法(OpenDKIMとRspamd) - 2026年6月19日



