先日、お客さんから、システムから送信されるメールがなりすましと判断されていると連絡があった。警告がでるだけで一応メールの内容は見れるらしい。
いろんな人に相談したりしてると、SPFレコードとやらが原因ではないかということになった。
……SPFレコードって…なんだ?
SPFレコードとは
調べているとIPA(情報処理推進機構)がSPFについて分かりやすく解説しているページがあった。
参考:https://www.ipa.go.jp/security/topics/20120523_spf.html
まず、SPFは「Sender Policy Framework」の略で、メール送受信のルール(方式)を指すらしい。
どうやらこのSPFというルールは、
「皆がこのルール(SPF)を守れば世界からなりすましメールが撲滅できるよ。だからみんなでルール(SPF)を守ろうね。」
という感じで、全てのメールに適用することが推奨されているものらしい。
そしてSPFレコードというのは、このSPFの仕組みを成立させるための1つの要素のことだ。
SPFの仕組みを理解する
まず、SPFというものを理解するために、A社とB社の間でメールをやりとりすることを考えてみる。便宜上、A社所有のサーバには名称末尾に「A」、B社所有のサーバには名称末尾に「B」をつけている。
はじめにメールサーバAからメールサーバBへメールを送信する。(図中①)
メールサーバBはメールを受け取ると、DNSサーバAにメールサーバAが信頼できるかどうか問い合わせる。(図中②)
ここで、DNSサーバAが「メールサーバAは信頼できるよ」と証明できればOK。できなければなりすましメールと判断される。(図中③)
DNSサーバAが、「メールサーバAが信頼できる」ことを証明をするために必要になるものが、SPFレコードだ。
つまり、なりすましメールと判断されている事象を解消するには、A社のDNSサーバにSPFレコードを追加すればよい。
なるほど。要するにメールを送信しているところの対応が必要となるということか。
という理解だとハマってしまう可能性があるので注意が必要だ。
少しややこしい構成の場合
次に、先ほどの例にC社を介入させる。
A社とB社間でやりとりしているように見えて、実はC社が間にいるケース。
これはクラウド型のメール配信サービス等を使用しているケースに当てはまる。
ここでは、クラウド型のメール配信サービスを提供する企業をC社とする。
メールサーバBに届くメールは、FROM(差出人)がA社のメールアドレス、TO(宛先)がB社のメールアドレスになっているとする。
ここで注意が必要なのが、実際にメールを送信しているのはメールサーバCということだ。これはメールサーバCでFROM(差出人)にA社のメールアドレスを設定しているから。クラウド型メール配信サービスの特徴だ。
一見、FROM(差出人)のメールアドレスがA社のドメインなので、メールサーバAからメールが送信されているのかと思いきや、実際にメールを送信しているのはメールサーバCなのだ。
なるほど。つまりメールを送信しているのはC社のメールサーバだから、C社にSPFレコードの追加を依頼すればいいのだな。よし。
と思ってしまいそうだが、それは違うので踏みとどまってほしい。
メールを受信したら、どこにSPFレコードの有無を問い合わせるか
まず、メールを受信した側が、SPFレコードの有無をどこに問い合わせるかという点を学んでみる。
SPFの仕組みでは、メールを受信した側が、メールのFROM(差出人)に入っているメールアドレスのドメインを管理しているDNSサーバに問い合わせをする。
上記の例では、
FROM(差出人)にはA社のメールアドレスが入っているので、
A社のメールアドレスのドメインを管理しているDNSサーバAへ問い合わせにいく。
つまり、DNSサーバAを保有しているA社にSPFレコードの追加を依頼するのが正解だ。
SPFレコードを追加するために必要な情報
次に、SPFレコードの追加に必要な情報が何かを考える。
SPFの仕組みでは、SPFレコードの追加には実際にメールを送信したメールサーバのIPアドレスが必要になる。
メールを受信した側は、
実際にメールを送信したメールサーバのIPアドレスと(これは受信したメールの内部情報に付与されている)、SPFレコードとして登録してあるメールサーバのIPアドレスを突合する。
ここでIPアドレスが一致するSPFレコードがあれば、信頼できる送信元であることが証明されたことになる。
上記の例では、
DNSサーバAのSPFレコード(として登録してあるIPアドレス)が、メールサーバCのIPアドレスと一致すればよい。ということになる。
まとめ
ここまでをまとめると、
DNSサーバAを所持しているA社に、メールサーバCのIPアドレスをSPFレコードとして登録してもらう必要があるということだ。
メールサーバCのIPアドレスは、受信したメールのメールヘッダを分析すれば分かるらしいが、C社に問い合わせてしまった方が確実だし早いと思う。
(実際にメールを送信するメールサーバが冗長的な構成をとっておりIPアドレスが複数存在する場合も考えられるため)
以上。