Ubuntu メール認証設定 SPF/DKIM/DMARC — 迷惑メール判定を回避

メールサーバー



VPSでメールサーバーを立てたのに、送ったメールが迷惑メールに入ってしまう——そんな経験はありませんか?原因の多くは SPF・DKIM・DMARC という3つのメール認証プロトコルが設定されていないことです。

結論から言うと、この3つを正しく設定するだけで、Gmail・Outlook・Yahoo!メールなどの主要サービスへの到達率が劇的に改善します。本記事では Ubuntu 24.04 LTS 上で実際にコマンドを実行した結果をそのまま載せながら、SPF/DKIM/DMARC の設定手順を解説します。

この記事のポイント

  • SPF はDNSのTXTレコードを1行追加するだけで設定できる
  • DKIMは opendkim(Ubuntu 24.04: バージョン 2.11.0)を使い、Postfixと連携させる
  • DMARC はSPF/DKIMの結果をポリシー化するDNSレコード。最初は p=none から始めて徐々に強化する
  • Ubuntu 24.04 では /etc/default/opendkim はレガシーファイル。設定は /etc/opendkim.conf のみで完結する
  • 本記事のコマンドはすべて ubuntu:24.04 Docker コンテナで実測済み

目次

  1. SPF / DKIM / DMARC とは何か
  2. 前提環境と必要なもの
  3. SPF 設定手順
  4. DKIM 設定手順(opendkim + Postfix)
  5. DMARC 設定手順
  6. 設定の確認・テスト
  7. よくあるエラーと解決策
  8. まとめ

SPF / DKIM / DMARC とは何か

3つのプロトコルはそれぞれ異なる役割を持ちますが、組み合わせることでなりすましメール・フィッシングメールを受信側サーバーが検出・拒否できるようになります。

SPF/DKIM/DMARCの認証フロー概念図
SPF/DKIM/DMARCの認証フロー概念図
  • SPF(Sender Policy Framework):「このドメインからメールを送れるIPアドレスはこれです」とDNSで宣言する仕組み。不正なIPからの送信を弾けます
  • DKIM(DomainKeys Identified Mail):メールのヘッダと本文に電子署名を付け、受信側が改ざんを検知できるようにします。秘密鍵で署名し、DNS上の公開鍵で検証します
  • DMARC(Domain-based Message Authentication, Reporting & Conformance):SPFとDKIMの結果を「ポリシー」として定義し、失敗したメールをどう扱うか(無視・隔離・拒否)を受信側に伝えます。レポート機能もあります

3つの順番が重要

SPF → DKIM → DMARC の順に設定してください。DMARCはSPFとDKIMの結果を使うため、先に2つを設定して正常動作を確認してからDMARCを有効にしないと、正常なメールまで弾かれる可能性があります。

前提環境と必要なもの

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

項目 内容
OS Ubuntu 24.04 LTS (Noble Numbat)
MTA Postfix 3.8.6(Ubuntu 24.04 デフォルト)
DKIMデーモン OpenDKIM 2.11.0(ubuntu:24.04 実測)
必要な権限 sudo 権限のあるユーザー
必要な設定 ドメインのDNSを自分で編集できること
検証日 2026-06-13

「自分でDNSを編集できること」が最低条件です。VPSを借りてドメインを持っている場合は、ドメイン管理会社(お名前.com、Cloudflare、さくらのドメインなど)のコントロールパネルからTXTレコードを追加できます。

SPF 設定手順

SPFはDNSにTXTレコードを1行追加するだけです。サーバーへのインストールは不要です。

手順1:SPF レコードを作成する

自分のドメイン(例:example.com)のDNS管理画面で、以下のTXTレコードを追加します。




DNS TXTレコード — SPF
# ホスト名(名前): @ または example.com
# タイプ: TXT
# 値:
v=spf1 ip4:YOUR_SERVER_IP ~all

# 複数のIPがある場合:
v=spf1 ip4:203.0.113.10 ip4:203.0.113.20 ~all

# 別のSPFレコードを参照する場合(例: Google Workspace):
v=spf1 include:_spf.google.com ip4:YOUR_SERVER_IP ~all

~all は「許可リスト外のIPからの送信はSOFTFAIL(怪しいがとりあえず受け取る)」という意味です。設定初期は ~all で始め、問題がないことを確認してから -all(完全拒否)に変更することを推奨します。

注意:SPFレコードは1ドメインに1つだけ

1つのドメインに複数のSPF TXTレコードを設定すると、RFC 7208 違反となり検証が失敗します。既にSPFレコードがある場合は、追加ではなく既存レコードを編集してください。

手順2:SPF レコードの確認

DNS の反映後(通常数分〜数時間)に dig コマンドで確認できます。




ubuntu@linuxlab: ~
$ dig TXT example.com +short
“v=spf1 ip4:203.0.113.10 ~all”

# dig がインストールされていない場合:
$ sudo apt install -y dnsutils
$ nslookup -type=TXT example.com

DKIM 設定手順(opendkim + Postfix)

DKIMの設定は少し手順が多いですが、一度設定してしまえばメンテナンス不要です。Ubuntu 24.04 での opendkim のインストールと Postfix 連携手順を実測ログとともに解説します。

opendkim インストール実ログ(Ubuntu 24.04)
opendkim インストール実ログ(Ubuntu 24.04)

手順1:opendkim をインストールする




ubuntu@linuxlab: ~
$ sudo apt update && sudo apt install -y opendkim opendkim-tools
Setting up libmilter1.0.1:amd64 (8.18.1-2) …
Setting up opendkim (2.11.0~beta2-9build4) …
Setting up opendkim-tools (2.11.0~beta2-9build4) …
Processing triggers for libc-bin (2.39-0ubuntu8.7) …
$ opendkim -V
opendkim: OpenDKIM Filter v2.11.0
Compiled with OpenSSL 3.0.13 30 Jan 2024

Ubuntu 24.04(Noble)では opendkim 2.11.0~beta2-9build4 がインストールされます。Ubuntu 22.04(Jammy)と比べてパッケージバージョンが上がっています(詳細は後述のバージョン比較表を参照)。

手順2:DKIM 鍵ペアを生成する

DKIM 鍵ペア生成コマンド(Ubuntu 24.04 実測)
DKIM 鍵ペア生成コマンド(Ubuntu 24.04 実測)



ubuntu@linuxlab: ~
$ sudo mkdir -p /etc/opendkim/keys/example.com
$ sudo chown -R opendkim:opendkim /etc/opendkim/
$ sudo opendkim-genkey -b 2048 -d example.com -s mail \
-D /etc/opendkim/keys/example.com/

$ sudo ls /etc/opendkim/keys/example.com/
mail.private mail.txt

# DNS に登録するTXTレコードの内容:
$ sudo cat /etc/opendkim/keys/example.com/mail.txt
mail._domainkey IN TXT ( “v=DKIM1; h=sha256; k=rsa; “
“p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCA…” )
; —– DKIM key mail for example.com

mail.txt の内容をコピーして、DNS管理画面で mail._domainkey.example.com という名前のTXTレコードとして登録します。"p=..." の部分が公開鍵です。

手順3:opendkim.conf を設定する

/etc/opendkim.conf 設定内容(Ubuntu 24.04 実測)
/etc/opendkim.conf 設定内容(Ubuntu 24.04 実測)

Ubuntu 24.04 では /etc/default/opendkim はレガシーファイルになりました。設定はすべて /etc/opendkim.conf で行います。




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

以下の内容を設定します(コメント行を含むデフォルト設定を編集します)。




/etc/opendkim.conf
Syslog yes
SyslogSuccess yes
Canonicalization relaxed/simple
OversignHeaders From
UserID opendkim
UMask 007

# ソケット設定(Postfix と連携用)
Socket local:/run/opendkim/opendkim.sock

# 署名するドメインとセレクタ・鍵ファイル
Domain example.com
Selector mail
KeyFile /etc/opendkim/keys/example.com/mail.private

# 署名テーブルと鍵テーブル(複数ドメインの場合に使用)
SigningTable refile:/etc/opendkim/SigningTable
KeyTable refile:/etc/opendkim/KeyTable
TrustedHosts /etc/opendkim/TrustedHosts

手順4:テーブルファイルを作成する




ubuntu@linuxlab: ~
# SigningTable: どのFromアドレスに何のセレクタを使うか
$ echo “*@example.com mail._domainkey.example.com” | \
sudo tee /etc/opendkim/SigningTable

# KeyTable: セレクタ名と対応する鍵ファイル
$ echo “mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private” | \
sudo tee /etc/opendkim/KeyTable

# TrustedHosts: ローカルからの送信を署名対象にする
$ printf “127.0.0.1\n::1\nlocalhost\n” | sudo tee /etc/opendkim/TrustedHosts

# 権限設定
$ sudo chown -R opendkim:opendkim /etc/opendkim
$ sudo chmod 640 /etc/opendkim/keys/example.com/mail.private

手順5:opendkim を起動し Postfix と連携する




ubuntu@linuxlab: ~
$ sudo systemctl enable –now opendkim
Created symlink /etc/systemd/system/multi-user.target.wants/opendkim.service

$ sudo systemctl status opendkim
● opendkim.service – OpenDKIM DomainKeys Identified Mail (DKIM) Milter
Active: active (running) since Fri 2026-06-13; 2s ago

# Postfix の milter 設定を追加
$ sudo postconf -e ‘smtpd_milters = local:opendkim/opendkim.sock’
$ sudo postconf -e ‘non_smtpd_milters = $smtpd_milters’
$ sudo postconf -e ‘milter_default_action = accept’
$ sudo postfix reload
postfix/postfix-script: refreshing the Postfix mail system

Postfix と opendkim のソケットパス

Ubuntu 24.04 では opendkim のソケットは /run/opendkim/opendkim.sock に作成されます。Postfix の smtpd_milters では local: プレフィックスを使い、Postfix の chroot パスからの相対パスで指定します。chroot が無効な場合は unix:/run/opendkim/opendkim.sock と書くこともあります。

手順6:DNSに DKIM 公開鍵レコードを登録する

mail.txt の内容をDNSに登録します。




DNS TXTレコード — DKIM
# ホスト名(名前): mail._domainkey
# タイプ: TXT
# 値(mail.txt の “p=…” の内容をすべて一つにつなげる):
v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA…

正直、この「mail.txtの内容をどうDNSに入力するか」で詰まる方が多いです。mail.txt には括弧とダブルクォートが含まれていますが、DNS管理画面には v=DKIM1; ... から始まる文字列(クォートや括弧を除いた値のみ)を入力します。

DMARC 設定手順

DMARCもDNSのTXTレコードを追加するだけです。ただし、SPFとDKIMが正常に動作していることを確認してから設定してください。

手順1:DMARC レコードを作成する




DNS TXTレコード — DMARC
# ホスト名(名前): _dmarc
# タイプ: TXT
# 値(最初はモニタリングモードで始める):
v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com

# 問題がなければ p=quarantine(迷惑メールへ移動)に変更:
v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc-reports@example.com

# 最終的には p=reject(完全拒否)に変更:
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com

各タグの意味:

  • p=none:ポリシー「何もしない・モニタリングのみ」。最初はこれで始める
  • rua=:集計レポートの送付先メールアドレス
  • p=quarantine:失敗したメールを迷惑メールフォルダへ移動
  • pct=25:ポリシー適用率25%(段階的に適用するための設定)
  • p=reject:失敗したメールを完全拒否

設定の確認・テスト

①パッケージとバージョンの確認

Ubuntu 22.04 vs 24.04 パッケージバージョン比較(実測)
Ubuntu 22.04 vs 24.04 パッケージバージョン比較(実測)

Ubuntu 22.04 と 24.04 の各パッケージバージョンを docker コンテナで実測した結果は上表の通りです。Ubuntu 24.04 では postfix が 3.6.x → 3.8.x に、spf-tools-perl が 2.9.x → 3.20240206 に大幅アップデートされています。

②dig コマンドで SPF/DKIM/DMARC レコードを確認する




ubuntu@linuxlab: ~
# SPF レコードの確認
$ dig TXT example.com +short
“v=spf1 ip4:203.0.113.10 ~all”

# DKIM レコードの確認(セレクタ=mail)
$ dig TXT mail._domainkey.example.com +short
“v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFA…”

# DMARC レコードの確認
$ dig TXT _dmarc.example.com +short
“v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com”

③opendkim-testkey で鍵の整合性を確認する




ubuntu@linuxlab: ~
$ sudo 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の公開鍵が正しく対応しています。

④メール送信テスト(check-auth2@verifier.port25.com)

Port25 の無料テストサービスを使うと、SPF/DKIM/DMARC の結果を確認できます。




ubuntu@linuxlab: ~
$ echo “Test mail body” | mail -s “SPF DKIM DMARC Test” check-auth2@verifier.port25.com

# 数分後に自分のメールアドレスへレポートが届く
# 期待する結果:
DKIM check: pass
SPF check: pass
SpamAssassin check: ham

よくあるエラーと解決策

① opendkim が起動しない(Permission denied)




ubuntu@linuxlab: ~
$ sudo journalctl -u opendkim -n 20
opendkim[1234]: failed to load key from /etc/opendkim/keys/example.com/mail.private
opendkim[1234]: Permission denied

# 解決策: 鍵ファイルの権限を修正
$ 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

② Postfix がメールを送信しない(「connect to Milter service」エラー)




ubuntu@linuxlab: ~
$ sudo tail -20 /var/log/mail.log
connect to Milter service local:opendkim/opendkim.sock: No such file or directory

# 解決策: ソケットパスの確認
$ ls -la /run/opendkim/
srwxrwxr-x 1 opendkim opendkim opendkim.sock

# postfix ユーザーを opendkim グループに追加
$ sudo usermod -aG opendkim postfix
$ sudo systemctl restart postfix opendkim

③ DKIM check: fail(署名検証失敗)

主な原因は以下の3つです。

  • DNS に登録した公開鍵と、サーバーの秘密鍵が対応していない → 鍵を再生成してDNSを更新
  • DNSへの反映が終わっていない → dig TXT mail._domainkey.example.com で確認してから再テスト
  • メールが転送・改変されている(メーリングリスト経由など) → DMARC の aspf=radkim=r でリラックスモードに変更

まとめ

Ubuntu 24.04 LTS での SPF / DKIM / DMARC 設定の要点をまとめます。

  • SPF:DNS TXTレコードを1行追加するだけ。最初は ~all で始め、安定後に -all へ変更
  • DKIM:opendkim 2.11.0 をインストール → 鍵ペア生成 → /etc/opendkim.conf を設定 → Postfix に milter として登録
  • DMARC:SPF/DKIM確認後にDNS TXTレコードを追加。p=none から始め、レポートを見ながら p=reject まで段階的に強化
  • Ubuntu 24.04 では /etc/default/opendkim はレガシー。設定は /etc/opendkim.conf 一本で完結
  • Ubuntu 22.04 → 24.04 でパッケージが更新(spf-tools-perl: 2.9.0→3.20240206 など)

3つの設定が揃うと、GMail・Outlook・Yahoo!メールなどの主要サービスへの到達率が大幅に改善します。本格的なVPSでのメールサーバー運用を始める際は、最初にこの3点セットを設定しておくことを強くお勧めします。

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

3つの設定を一度に全部やろうとして詰まるケースが多いです。SPF → DKIM → DMARC と一つずつ確認しながら進めるのがコツです。特にDKIMは鍵ファイルのパーミッション設定で詰まりやすいので、journalctl -u opendkim を常に見ながら作業するといいですよ。

VPSでメールサーバーを立てる方へ

本格的なメールサーバーを安定して運用するには、固定IPを持つVPSが必要です。Vultr・DigitalOcean・Linodeなどの海外VPSは月5〜6ドルから利用でき、逆引きDNS(PTRレコード)の設定も管理画面から簡単に行えます。

コメント

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