送信ドメイン認証(そうしんドメインにんしょう、 Sender Domain Authentication)とは、差出人メールアドレスが詐称された電子メール(いわゆる、なりすましメール)の判別を目的とした技術。
迷惑メール対策の一つとして使われており、受信側のメールサーバで送信者情報(reverse-path)を検証することで、差出人メールアドレス(ヘッダFrom)のなりすましを検出している。

https://ja.wikipedia.org/wiki/%E9%80%81%E4%BF%A1%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E8%AA%8D%E8%A8%BC

つまりWordPressでお問い合わせフォーム作った!でも迷惑メールにはいっちゃう〜!!というのは送信ドメイン認証のせい。
我々は送信ドメイン認証に守られているものの、制作側に回ればその壁と対峙する必要がある。

使用されている主な技術

SPF(Sendor Policy Framework)

差出人メールアドレス(ヘッダFrom)のIPアドレスと、送信元メールアドレス(エンベロープFrom)のドメインのSPFレコード(メール送信が許可されたIPアドレスのリスト)を、受信側のメールサーバーで検証する方法。
ただし、ドメインの詐称には有効ではあるが、アカウント名だけを詐称していたり、送信が許可されているメールサーバーから送信している場合には対応できない。
対応方法はDNSレコードにSPFレコード(TXTレコード)を記述するだけでいい。

// メールサーバーが一つしかない場合
v=spf1 ip4:192.168.100.3 ~all
// Aレコードで指定する場合
v=spf1 a:mail.example.jp ~all
// MXレコードで指定する場合
v=spf1 mx ~all
// include機構を使用
v=spf1 include:mail.example.jp ~all
// redirect変更子を使用
v=spf1 redirect:mail.example.jp ~all
// 複数記載する例
v=spf1 a:mail1.example.jp a:mail2.example.jp ~all

// 「+」限定子はPass(当該ドメインの送信メールサーバとして認証する)という意味があるが、「+」は省略可つまり上記は以下と同じ意味である
v=spf1 +a:mail.example.jp ~all
v=spf1 +a:mail1.example.jp +a:mail2.example.jp ~all

限定子:
「+」「-」「~」「?」は限定子でありそれぞれ機構の前に追加することで、条件式を変更することができる。

  • +(Pass):当該ドメインの送信メールサーバとして認証する
  • –(Fail):当該ドメインの送信メールサーバとして認証しない
  • ~(SoftFail):認証情報を公開しているが、正当なメールであっても認証失敗する可能性もある
  • ?(Neutral):認証情報を公開しない

また上述のように「+」は省略可能である。

~all と -allの違い:
~allと-allの前の機構によって認証が通らなかったアドレスをどう処理するかを示しており、「-」はすべて認証しない、「~」ははっきりと認証失敗として扱ってほしくない場合に使用している。

a機構:
送信元ホストのIPアドレスが、ドメイン名に与えられたFQDNのAレコードのいずれかであれば認証を通す。

mx機構:
送信元ホストのIPアドレスが、ドメイン名に対応するMXレコードに指定されているホストのAレコードのいずれかであれば認証を通す。MXは複数与えられる場合があるが、10個までのMXホストに対して検査を行う。

include機構:
ドメイン名を引数とし、include先ドメインのSPFレコードで認証が通る場合、認証を通す。

ip4機構:
送信元ホストのIPアドレスが、引数に指定されるIPネットワークに含まれているかIPアドレスにマッチする場合、認証を通す。

redirect変更子:
redirect先のドメインのSPFレコードを使用する。
redirectを使用した場合、redirect以外の機構は使用しないようにする。

参考:https://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/

DKIM(DomainKeys Identified Mail)

送信側のメールサーバーでメールに電子署名を付加し、受信側で送信元メールアドレスのドメインのDKIMレコード(送信元ドメインのDNSのTXTレコードを公開鍵として扱う)を使って電子署名を検証する。
電子署名を使用しているため、配送途中のメールの改ざん検出にも対応している。
プログラムではなく、メールサーバー側で実装する必要がある。

DMARC

SPFとDKIMのポリシーを併用したもの。