2026年5月19日
2026年5月19日
SPF・DKIM・DMARCの設定を確認する方法|digでのDNS確認と受信メールのヘッダーでの検証
SPF・DKIM・DMARC は、メールの送信元のドメインがなりすまされていないかを、受信したサーバーが確かめるための仕組みです。設定がないか間違っていると、自分のドメインから送ったメールが迷惑メールに分類されたり、受け取りを拒否されたりします。
この記事では、3つの設定を DNS とメールのヘッダーで確認する方法を説明します。記録の書き方の基準は RFC 7208(SPF)、RFC 6376(DKIM)、RFC 7489(DMARC)、Gmail の送信者の要件は Google の「メール送信者のガイドライン」の2026年10月時点の内容です。example.com は自分のドメインに置き換えてください。
3つの仕組みの違い
| 仕組み | 確かめること | DNS の場所 | 対象のドメイン |
|---|---|---|---|
| SPF | 送ってきたサーバーの IP アドレスが、そのドメインから送ってよいサーバーか | ドメイン自体の TXT(example.com) |
エンベロープの差出人(Return-Path のドメイン) |
| DKIM | メールに付いた電子署名が正しいか(途中で書き換えられていないか) | セレクター._domainkey.example.com の TXT |
署名の d= のドメイン |
| DMARC | SPF か DKIM の結果が、From: のドメインと一致した形で合格しているか。不合格のときの扱い |
_dmarc.example.com の TXT |
From: ヘッダーのドメイン |
SPF と DKIM はそれぞれ別のドメインを確かめるので、どちらかに合格しても、受信者が目にする From: のドメインが正しいとは限りません。DMARC は、SPF か DKIM で合格したドメインが From: のドメインと一致すること(アラインメント)を求めることで、この穴をふさぎます。
確認を始める前に
メールを送っているサービスをすべて洗い出しておきます。たとえば、自社のメールサーバー、Google Workspace や Microsoft 365、メルマガの配信サービス、問い合わせフォームのメールを送る Web サーバー(WordPress など)です。SPF にはこれらすべてを含める必要があり、DKIM はサービスごとに署名の設定があります。
DNS を調べるには dig を使います。Debian / Ubuntu では bind9-dnsutils(または dnsutils)、RHEL 系では bind-utils パッケージに含まれます。Windows では nslookup -type=TXT ドメイン名 で同じ内容を確認できます。
SPF を確認する
dig +short TXT example.com
ドメインの TXT レコードがすべて表示されます。その中の v=spf1 で始まるものが SPF です。
"v=spf1 ip4:203.0.113.10 include:_spf.google.com -all"
| 書き方 | 意味 |
|---|---|
ip4:203.0.113.10 / ip6:... |
この IP アドレス(範囲)から送ってよい |
a / mx |
このドメインの A レコード / MX レコードのサーバーから送ってよい |
include:_spf.google.com |
指定したドメインの SPF に書かれたサーバーも許可する(外部のサービスを使うとき) |
-all |
上に当てはまらないサーバーは不合格(fail) |
~all |
上に当てはまらないサーバーは「おそらく不正」(softfail) |
?all |
判定しない(neutral) |
include: の先の内容も、同じように dig +short TXT _spf.google.com で確認できます。
SPF のよくある間違い
v=spf1のレコードが2つ以上ある。 SPF は1つのドメインに1つだけです。複数あると結果がエラー(permerror)になります。サービスを追加するときは、新しいレコードを作らず、既存のレコードにinclude:を足します。- DNS の参照が10回を超える。
include・a・mx・ptr・exists・redirectは DNS の参照を伴い、includeの先で使われている分も含めて合計10回を超えるとエラーになります。不要になったサービスのinclude:を消して減らします。 - 送信に使っているサーバーが含まれていない。 Web サーバーからフォームのメールを送っている場合などに起こります。そのサーバーの IP アドレスを
ip4:で追加するか、送信を許可済みのメールサーバー経由に変えます。 - 確認するドメインが違う。 SPF が確かめるのは
From:ではなく、エンベロープの差出人(受信したメールのReturn-Path:ヘッダー)のドメインです。配信サービスによってはReturn-Pathがサービス側のドメインになっています。
DKIM を確認する
DKIM の公開鍵は セレクター._domainkey.ドメイン の TXT レコードに置かれます。セレクターは送信するサービスごとに決まっている名前で、ドメインだけでは調べられません。
セレクターを見つける
自分のドメインから送ったメールを受信し、ヘッダーの DKIM-Signature: を見ます。
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=default; ...
d= が署名したドメイン、s= がセレクターです。この例では default._domainkey.example.com に公開鍵があります。DKIM-Signature: がない場合は、そのメールは DKIM で署名されていません。送信サービス側で署名の設定を有効にします。
公開鍵のレコードを確認する
dig +short TXT default._domainkey.example.com
"v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
p=の後ろが公開鍵です。長い鍵は"..." "..."のように複数の文字列に分かれて表示されますが、受信側では1つにつなげて読まれるので問題ありません。p=の後ろが空(p=;またはp=で終わる)の場合、その鍵は無効にされています。- 何も表示されない場合は、セレクターかドメインが違うか、レコードがまだ登録されていません。
- Microsoft 365 などでは、
selector1._domainkeyが CNAME でサービス側のレコードを指す形になっています。digはその CNAME をたどって TXT を表示します。
Google は、DKIM の鍵の長さを 1024 ビット以上とし、2048 ビットを推奨しています。
自分のサーバーで OpenDKIM を使っている場合
OpenDKIM の opendkim-testkey(Debian / Ubuntu では opendkim-tools パッケージ)で、DNS の公開鍵とサーバーの秘密鍵が対応しているかを確認できます。
sudo opendkim-testkey -d example.com -s default -k /etc/opendkim/keys/example.com/default.private -vvv
key OK と表示されれば一致しています。key not secure は DNSSEC で保護されていないという意味で、署名の検証には影響しません。秘密鍵の場所はサーバーの OpenDKIM の設定に合わせてください。
DMARC を確認する
dig +short TXT _dmarc.example.com
"v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
何も表示されない場合は DMARC が設定されていません。主なタグは次のとおりです。
| タグ | 意味 |
|---|---|
p= |
不合格のメールの扱い。none(何もしない、監視だけ)、quarantine(迷惑メールとして扱う)、reject(受け取りを拒否する) |
sp= |
サブドメインに対する扱い。省略すると p= と同じ |
rua= |
集計レポートの送り先。受信したサーバーから、合否の集計が XML で届く |
ruf= |
失敗したメールごとの詳細レポートの送り先(送ってこない受信サーバーも多い) |
pct= |
ポリシーを適用する割合(%)。省略すると 100 |
adkim= / aspf= |
アラインメントの判定。r(緩やか、初期値)または s(厳密) |
サブドメイン(news.example.com など)に _dmarc のレコードがない場合は、組織のドメイン(example.com)の DMARC が使われ、sp= が適用されます。
アラインメントとは
DMARC に合格するには、次のどちらかが必要です。
- SPF に合格し、その SPF のドメイン(
Return-Pathのドメイン)がFrom:のドメインと一致している - DKIM に合格し、その署名の
d=のドメインがFrom:のドメインと一致している
r(緩やか)では、mail.example.com と example.com のように組織のドメインが同じなら一致とみなされます。s(厳密)ではドメインが文字どおり同じである必要があります。
外部の配信サービスを使っている場合、SPF は Return-Path がサービスのドメインになるため一致しないことがよくあります。その場合でも、サービスで自分のドメインの DKIM 署名(d=example.com)を設定すれば DMARC に合格します。
ポリシーを強める順番
いきなり p=reject にすると、洗い出し漏れのサービスから送ったメールが届かなくなります。まず p=none と rua= で集計レポートを受け取り、正規の送信元がすべて合格していることを確かめてから、p=quarantine、p=reject の順に強めます。
受信したメールで認証結果を確かめる
DNS のレコードが正しくても、実際に送ったメールで合格しているとは限りません。自分のドメインから Gmail のアドレスにメールを送り、受信した側で結果を確認します。
Gmail では、メールを開いて右上の「その他」(縦の3点)から「メッセージのソースを表示」を選ぶと、先頭に SPF・DKIM・DMARC の結果が PASS / FAIL などで表示されます。
ヘッダーの Authentication-Results: には、次のように詳しい結果が記録されます。
Authentication-Results: mx.google.com;
dkim=pass header.i=@example.com header.s=default header.b=AbCdEfGh;
spf=pass (google.com: domain of info@example.com designates 203.0.113.10 as permitted sender) smtp.mailfrom=info@example.com;
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=example.com
| 項目 | 見るところ |
|---|---|
spf= |
pass か。smtp.mailfrom= が SPF で確かめたドメイン |
dkim= |
pass か。header.i= / header.s= が署名のドメインとセレクター |
dmarc= |
pass か。header.from= が From: のドメイン。p= は適用されたポリシー |
spf=softfail や spf=fail なら送信サーバーが SPF に含まれていない、dkim=fail なら公開鍵の不一致や本文の書き換え、dkim=none なら署名がない、dmarc=fail なら SPF・DKIM のどちらも From: のドメインと一致した形で合格していない、と見当を付けられます。
Gmail の送信者の要件
Google は2024年2月から、Gmail の個人アカウントあてに送るすべての送信者に、SPF か DKIM の設定を求めています。1日に5,000通を超えて送る送信者には、SPF・DKIM・DMARC のすべてと、From: のドメインが SPF か DKIM のドメインと一致していること(アラインメント)を求めています。この場合の DMARC のポリシーは p=none でもよいとされています。すべての送信者には、ほかに正引き・逆引きの DNS、TLS での送信、迷惑メールの報告率を 0.3% 未満に保つことなども求められ、大量に送る送信者には、マーケティングメールをワンクリックで配信停止できるようにすることも求められています。
WordPress から送るメールの確認
WordPress の問い合わせフォームや通知のメールは、初期状態では Web サーバーから直接送られます。このとき From: は自分のドメインでも、送信元の IP アドレスが SPF に含まれていない、DKIM の署名がない、Return-Path がサーバーのホスト名になっている、といった理由で DMARC に不合格になることがあります。
自分あてにフォームのメールを送り、上の方法で Authentication-Results: を確認してください。不合格の場合は、SMTP プラグインで認証済みのメールサーバー(DKIM 署名と SPF の設定があるもの)から送るように変えるのが一般的な対処です。
まとめ
- SPF は
dig +short TXT example.com、DKIM はdig +short TXT セレクター._domainkey.example.com、DMARC はdig +short TXT _dmarc.example.comで確認する - DKIM のセレクターは、受信したメールの
DKIM-Signature:のs=で調べる - SPF は1ドメインに1レコード、DNS の参照は10回まで
- DMARC の合格には、SPF か DKIM のドメインが
From:と一致していることが必要。外部サービスでは DKIM の独自ドメイン署名が鍵になる - 最終的な確認は、実際に送ったメールの
Authentication-Results:で行う - DMARC は
p=noneで様子を見てから強める
関連記事: