Office 365 フォーラムで SPF レコードが設定されていないメールを受信したときにどんな動作をするのか?というスレッドがあったので確認してみました。
送信側 SPF レコードの内容確認
実験台にするのは例のドメインです。
このドメインは Office 365 で使用しているので こんな感じで SPF レコードが設定されています。spf.protection.outlook.com を参照するように指定されていますね。
# dig kazuakix.jp TXT ;; ANSWER SECTION: kazuakix.jp. 3599 IN TXT "v=spf1 include:spf.protection.outlook.com -all"
spf.protection.outlook.com を確認してみると、Office 365 がメールを送る可能性のある IP アドレスが列挙されています。更に別のレコードを参照していますが、あまり深入りはしないでおきます。
# dig spf.protection.outlook.com TXT ;; ANSWER SECTION: spf.protection.outlook.com. 480 IN TXT "v=spf1 ip4:207.46.101.128/26 ip4:207.46.108.0/25 ip4:207.46.100.0/24 ip4:207.46.163.0/24 ip4:65.55.169.0/24 ip4:157.55.133.0/25 ip4:157.56.110.0/23 ip4:157.55.234.0/24 ip4:213.199.154.0/24 ip4:213.199.180.0/24 include:spfa.protection.outlook.com -all"
ここで SPF レコードの末尾は "-all" となっていますので、「ここに列挙しているアドレス以外からのメールはうちのドメインからのメールではありませんよ」と宣言していることになります。
これが "~all" だと「もしかしたら このアドレス以外からも送るかもね」という宣言になります。*1
受信側 Office 365 の設定
そして受信側、上記ネタドメインとは別のドメインで運用している Office 365 のテナントで設定をおこないます。
Exchange 管理センターの 保護 - スパムフィルター を開いて Default ポリシーの詳細オプションを開きます。
ここに "SPF レコード: Hard Fail" ・ "条件付き Sender ID フィルター処理: Hard Fail" といった項目があり、初期値ではオフになっています。
この状態だと 別サーバーから上記ドメインを騙ったメールを送信しても普通に受信してしまいました。 Exchange Online Protection の機能で拒否したりはしないんですね...
その後これらの設定をオンにして同様にメールを送ったところ、メールは Junk フォルダ送りになりました。受信しているので送信元にエラーが返ったりすることもありませんでした。
最近だと SPF レコードは正しく設定しているのが当たり前みたいな感じなので、これらの設定はオンにしておいてもいいのかもしれませんね。
*1:これを softfail と呼びますが、-all を hardfail と言うのかどうかは知りません