DNSのSPFレコード設定によるGmailの迷惑メール誤認対策

web/DNS
概要

GNU socialなどWebアプリケーションには、メール送信機能が備わっていることが多いです。ユーザー登録、返信などのアクションに対して、通知メールを送信してくれます。今回、Webサービスから送信されるメールがGmailで迷惑メールに振り分けられてしまったので、その対策を紹介します。

DNSのSPFレコードを設定することで回避できます。「独自ドメインのDNS設定 | GNU social JP」での設定時に一緒にしたほうがいいので紹介します。

現象

WebアプリケーションからGmailの迷惑メールに振り分けられると、以下のようなオレンジや灰色の警告文が表示されることがあります。

このメールにはご注意ください
Gmailでは、このメールが本当にgnusocial.jpから送信されたものであることを確認できませんでした。メールに含まれるリンクのクリックや添付ファイルのダウンロード、または返信に個人情報を記載することは避けてください。

このメールにはご注意ください このメッセージは送信者により認証されていないため、Gmail はこのメールが実際にその送信者から送信されたものであるかを確認できません。

右上の [… (その他)]-[メッセージのソースを表示] を選んで、ソースを表示すると、迷惑メールに振り分けられた詳細な原因がわかります。

上記のように、SPF: SOFTFAILと表示されています。これが迷惑メールに振り分けられた理由です。メールソース本文内に以下のように同じ記載があります。

Received-SPF: softfail (google.com: domain of transitioning senooken@gnusocial.jp does not designate 2400:8500:1301:162::16:1 as permitted sender) client-ip=2400:8500:1301:162::16:1;

これは、送信元のドメインとIPアドレスがDNSのSPFレコードで対応付けられていないことが原因で起こるそうです。

SPF を使用してなりすましと迷惑メールを防止する – Google Workspace 管理者 ヘルプ」にあるとおり、GmailではSPFかDKIMのどちらかの設定をしていないと、迷惑メール扱いするようです。

対策

DNSでSPFかDKIMレコードを設定することでGmailでの迷惑メール誤認を回避します。今回はSPFレコードで行います。

DNSのSPFレコードはRFC7208 (RFC 7208: Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1) で定義されています。SPF=Sender Policy Frameworkで、電子メールのドメイン承認のためのDNSのレコードです。

DNSのTXTリソースレコードに指定するレコードになっています。以下のような書式です。

example.com。        3600    IN    TXT    "v=spf1 [mechanisms]"

[mechanisms] のところで、メール送信元のドメイン (example.com) の実際のメールサーバーのIPアドレスを指定します。先頭の [v=spf1 ] はSPFレコードのバージョンを指定する固定文字列です。

いくつか指定方法があり、概ね以下の4形式になります。

v=spf1 mx ~all
v=spf1 a:[domain1] a:[domain2] ~all
v=spf1 include:[domain1] include:[domain2] ~all
v=spf1 ip4:[IPv4] ip6:[IPv6] ~all

意味は以下の通りです。

  1. mxはMXレコードに指定しているホストを指します。メールサーバーとWebサーバーが同一サーバー上であれば、この指定が一番簡単だと思います。
  2. aは指定したドメインのAかAAAAレコードを指します。
  3. includeは指定したドメインのSPFレコードを指します。
  4. ip4/ip6は指定したIPアドレスを指します。

v=spf1以降の空白区切りのブロックはmechanismsと呼ばれています。

左から評価されていき、最後~allで終わっています。~allまでで一致すればPASS、一致しなければ全てSOFTFAILの結果となります。修飾子にチルダ~ではなく-にするとFAILになります。万が一、考慮漏れがあって送信された場合に、FAILだと受信者を怖がらせることになるので、SOFTFAILになるようにすることが多いようです。なお、修飾子のデフォルトは+=PASSです。

基本はmx 指定しておき、負荷分散などでメールサーバーとWebサーバーを別にする場合などで、aでそれぞれのサーバーのドメインを指定する使い方がベターに感じます。

以下のようなイメージです。

example.com. 3600 IN TXT "v=spf1 mx a:[domain1] a:[domain2] ~all"

MXレコードは基本的にメールサーバーとして使うので、mxは常に指定しておいてよい気がします。追加する場合にa:[domain]を追記するのがシンプルだと思います。

SPFレコードを設定して、反映まで少し待ってから再度送信しても、またGmailで迷惑メールに振り分けられるかもしれません。その場合、メッセージソースを開いて [SPF: PASS] となっていればOKです。

SPFレコードはOKでも、直前にほぼ同じ文面の迷惑メールがあったので、Gmailが自動で迷惑メール判定しています。[問題ない] を選んで迷惑メール判定を解除すれば、次回以降は誤認されなくなります。

結論

Gmailでの迷惑メール誤認対策のDNSのSPFレコードの設定でした。

Gmailはユーザーが多いので、迷惑メール判定回避のためにほぼ必須の設定に思います。サーバーやドメイン設定・移転時などに忘れないように設定しましょう。

既存のSPFレコード設定の説明ページだと、書式の説明がなかったり、指定方法がまちまちで混乱したので、整理できてよかったです。

コメント

Copied title and URL