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 コンテナで実測済み
目次
- SPF / DKIM / DMARC とは何か
- 前提環境と必要なもの
- SPF 設定手順
- DKIM 設定手順(opendkim + Postfix)
- DMARC 設定手順
- 設定の確認・テスト
- よくあるエラーと解決策
- まとめ
SPF / DKIM / DMARC とは何か
3つのプロトコルはそれぞれ異なる役割を持ちますが、組み合わせることでなりすましメール・フィッシングメールを受信側サーバーが検出・拒否できるようになります。

- 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レコードを追加します。
# タイプ: 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 コマンドで確認できます。
“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 連携手順を実測ログとともに解説します。

手順1:opendkim をインストールする
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 鍵ペアを生成する

$ 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 を設定する

Ubuntu 24.04 では /etc/default/opendkim はレガシーファイルになりました。設定はすべて /etc/opendkim.conf で行います。
以下の内容を設定します(コメント行を含むデフォルト設定を編集します)。
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:テーブルファイルを作成する
$ 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 と連携する
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に登録します。
# タイプ: 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 レコードを作成する
# タイプ: 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 と 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 レコードを確認する
$ 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 で鍵の整合性を確認する
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 の結果を確認できます。
# 数分後に自分のメールアドレスへレポートが届く
# 期待する結果:
DKIM check: pass
SPF check: pass
SpamAssassin check: ham
よくあるエラーと解決策
① opendkim が起動しない(Permission denied)
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」エラー)
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=rやadkim=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点セットを設定しておくことを強くお勧めします。
VPSでメールサーバーを立てる方へ
本格的なメールサーバーを安定して運用するには、固定IPを持つVPSが必要です。Vultr・DigitalOcean・Linodeなどの海外VPSは月5〜6ドルから利用でき、逆引きDNS(PTRレコード)の設定も管理画面から簡単に行えます。



コメント