WP Mail SMTP の SPF エラー と DMARC 警告の解消

WordPress 環境に導入した WP Mail SMTP で発生していた SPF エラーと DMARC 警告を解消する話です。

WordPress の管理画面からサイトヘルスステータスを見たところ“メールドメインの問題が検出されました” と表示されており、その中身は以下のスクリーンショットです。 タイトルとした SPF に関するエラーとDMARCに関する警告です。 このエラーと警告を解消する備忘ログとなります。

また、DNSサーバには Alibaba Cloud DNS を利用しており、Alibaba Cloud DNS でのレコード確認や追加の画面なども一部記載するので Alibaba Cloud DNS の利用イメージを知りたい場合にも多少有用な情報になると思います。

エラーが何を示すか?

エラーと警告のメッセージは、私のドメイン(bigriver.jp)のDNS設定に以下の問題があることを示しています。

  • SPFエラー(Action Needed): WP Mail SMTP経由でメールを送信するサーバーが、「このドメイン(bigriver.jp)からのメール送信を許可されたサーバー」としてDNSのSPFレコードに登録されていません。このままだと、送信したメールが受信側で迷惑メール(スパム)扱いされたり、不達(バウンス)になるリスクが高くなります。
  • DMARC警告(Action Recommended): ドメインにDMARCレコードが設定されていません。DMARCは、成りすましメールの検知や、SPF/DKIM認証に失敗したメールの扱い(監視・隔離・拒否)を指定するセキュリティプロトコルです。設定がなくても送信自体はできる場合がありますが、主要メールサービス(GmailやYahoo!等)の送信者ガイドラインにおいて設定が強く推奨・義務化されています。

私のドメイン(bigriver.jp)はこのブログサイトのAレコードでも使っていますが、Google Workspace のメールと Exchange Online のメールでも利用しています。 Google と Microsoft のメールは覚えていないくらい、おそらく6~7年前から利用していますが当時SPFは設定した記憶はありつつ、DMARCは外部への送信はほとんど無いため設定していなかった記憶です。

今回は、現状どうなっているかを確認し、必要な対応を行うことにします。 DMARC も必須では無いですが一つの経験として今回設定してみます。

現状のDNSレコードを確認する

設定を変更する前に、コマンドプロンプトやターミナルで現在のDNSレコード(TXTレコード)を確認します。

Windows コマンドプロンプト
c:\temp>nslookup -type=TXT bigriver.jp
サーバー:  UnKnown
Address:  192.168.3.1

権限のない回答:
bigriver.jp     text =

        "bn1df7chl3ckvxdsfvznmpfjpqnwps37"
bigriver.jp     text =

        "_globalsign-domain-verification=2JlaIfCwIXaSXt579ZuRALeGLIQQRbRRKXIXJSMakL"
bigriver.jp     text =

        "_38b10ak8wh8n76ks5drjo1ntomc2xmc"
bigriver.jp     text =

        "q98pv4ctn9vh0kgz80qcrdxmbnmt7jhs"
bigriver.jp     text =

        "rd4m8slzxymw3x3dndpm2trn9t8ms6z8"
bigriver.jp     text =

        "aliyun-site-verification=208cc20c-89e5-4e45-a738-662ad4955bf0"



c:\temp>nslookup -type=TXT m.bigriver.jp
サーバー:  UnKnown
Address:  192.168.3.1

権限のない回答:
m.bigriver.jp   text =

        "v=spf1 include:spf.protection.outlook.com -all"

実行結果から、v=spf1 ... で始まる行があるか確認します。  Google Workspace で使っている”bigriver.jp”ドメインのSPFレコードがありませんね・・。  Exchange Online で利用している”m.bigriver.jp”はちゃんとSPFを設定しています。昔のことなので設定漏れなのか意図的なのかはわかりません。 ちょうど今回それがわかって良かったと言うことで設定することにします。

SPFレコードの問題を解決する

WP Mail SMTPでGoogle Workspace(xxxx@bigriver.jp)のAPIやSMTP経由で送信しているため、ドメイン bigriver.jp にGoogle用のSPFレコードを追加します。

項目設定値
レコードタイプTXT
ホスト名(名前)bigriver.jp (または @ / 空欄)
値(内容)v=spf1 include:_spf.google.com ~all

ここからは私が利用しているDNS Server は Alibaba Cloud DNS なので Alibaba Cloud のコンソールから操作していきます。

Alibaba Cloud DNS > Configurations > Public Zone 画面からbigriver.jp ゾーンをクリックします。

“Add Record”をクリックします。

Record Type には”TXT”を指定し、Hostnameには”@”を指定します。 TTLは特にこの値にしないといけない要件、条件はありませんが、Alibaba Cloud DNS の売りの1つなので1秒にします。 最後にRecord Value として”v=spf1 include:_spf.google.com ~all“を設定します。

追加後に、再度、DNSレコードの状態を確認します。 先ほど登録した”v=spf1 include:_spf.google.com ~all”の応答がありました。

Windows コマンドプロンプト
c:\temp>nslookup -type=TXT bigriver.jp
サーバー:  UnKnown
Address:  192.168.3.1

権限のない回答:

~省略~

bigriver.jp     text =

        "v=spf1 include:_spf.google.com ~all"

~省略~

WordPress でも確認します。 ”Success! The SPF record required by your SMTP server is set up and working correctly.”とステータスが正常化したことを確認出来ました。

最後に、Google Workspace として外部のドメインとメール送受信に問題が無いことを確認します。 ここで今回のSPF未設定とは全く別の問題に気づきました。 その話はまた別途。 最終的にSPFレコード追加後もメール送受信は正しく行えることを確認出来ました。 次はDMARCの警告を解消します。

DMARCの問題を解決する

DMARC(ディーマーク)とは?

SPFやDKIMといった送信ドメイン認証を行ったうえで、「もし認証に失敗したメールが届いた場合、受信側のメールサーバー(GmailやYahoo!など)にどう処理してほしいか」をドメイン所有者が宣言する仕組みがDMARC(Domain-based Message Authentication, Reporting, and Conformance)です。

WP Mail SMTPの警告画面で表示されていた「Action Recommended」は、bigriver.jp にDMARCレコードが未設定であることを示しています。

DMARCポリシーには以下の3段階があります:

  • p=none(監視モード): 認証失敗メールも拒否せず通常通り配信し、レポートのみ受け取る(★最初はこれから始めるのが推奨です)。
  • p=quarantine(隔離): 認証失敗メールを迷惑メールフォルダに隔離する。
  • p=reject(拒否): 認証失敗メールを受信拒否(バウンス)する。

今回は、既存のメール配信に影響を与えない「監視モード(p=none)」でDMARCを初めて導入します。

DNSへの設定手順

DNSの管理画面から、以下のTXTレコードを追加します。

項目設定値説明
レコードタイプTXTレコードの種類
ホスト名(名前)_dmarc.bigriver.jp (または _dmarcDNS事業者によって末尾のドメイン入力が不要な場合があります
Alibaba Cloud DNS では “_dmarc”だけを設定します
値(内容)v=DMARC1; p=none;DMARCバージョン1、ポリシーは監視(none)を指定

DMARCの集計レポート(認証状況の統計情報)を自分のメールアドレスで受け取りたい場合は、以下のように rua タグを追加します。

DNSレコード
v=DMARC1; p=none; rua=mailto:xxxx@bigriver.jp;

Alibaba Cloud DNS からDMARC用のTXTレコードを追加します。

nslookupコマンドで確認します。  想定通りの応答を確認することができました。

Windows コマンドプロンプト
c:\temp>nslookup -type=TXT _dmarc.bigriver.jp
サーバー:  UnKnown
Address:  192.168.3.1

権限のない回答:
_dmarc.bigriver.jp      text =

        "v=DMARC1; p=none; rua=mailto:xxxxxxxxxx@bigriver.jp;"

ちなみに”_dmarc.bigriver.jp”ではなく”_dmarc”だけでは失敗します。

Windows コマンドプロンプト
c:\temp>nslookup -type=TXT _dmarc
サーバー:  UnKnown
Address:  192.168.3.1

*** UnKnown が _dmarc を見つけられません: Non-existent domain

Alibaba Cloud DNS のTXTレコードではhostname として”_dmarc”を指定していますが、Alibaba Cloud DNS 側では”_dmarc.bigriver.jp”と補完する動作となっているためです。 

Alibaba Cloud DNS でDMARCを設定する考え方、具体的な内容に関する公開情報はこちら

https://www.alibabacloud.com/help/en/alibaba-mail/latest/what-is-dmarc-how-do-i-set-it-up

上記のドキュメントでもhostname として”_dmarc”を指定することが紹介されていること確認しています。

WordPressの管理画面でも確認し、DMARCに関する警告が解消されたことを確認できました。

最後に、メールの送信と受信に問題が無いことも確認し、DMARCの警告の解消は完了です。

まとめ

最後にWordPress × Google Workspace × Exchange Online のハイブリッド構成だからこそ得られた知見をまとめます。

1. WP Mail SMTP 導入に伴う対応と SPF の独立運用

  • 対応したこと: WP Mail SMTP で送信リレーとして指定した Google Workspace(postwater9@bigriver.jp)向けに、親ドメイン(bigriver.jp)へ Google 用の SPF レコード(v=spf1 include:_spf.google.com ~all)を新規追加しました。
  • 気づき: WP Mail SMTPとは直接関係しない話ですが、サブドメイン(m.bigriver.jp)で利用している Exchange Online 側(include:spf.protection.outlook.com)の SPF とは FQDN ごとに独立して管理するため、親ドメイン側に サブドメイン のためのSPF記述を混ぜる必要がないことを確認・整理できました。

2. 初めての DMARC 導入(p=none

  • 対応したこと: 親ドメイン(_dmarc.bigriver.jp)に v=DMARC1; p=none; を追加しました。
  • 気づき: 親ドメインに DMARC レコードを設定しておくだけで、サブドメイン(m.bigriver.jp)も含めてドメイン全体にポリシーが適用され、成りすまし対策の第一歩を踏み出すことができました。まずは既存のメール配信を阻害しない「監視モード(p=none)」から安全に開始するのが鉄則です。

以上