「SPFレコードとは?」ノンネットワークSEがSPFを理解するまで

Uncategorized

先日、お客さんから、システムから送信されるメールがなりすましと判断されていると連絡があった。警告がでるだけで一応メールの内容は見れるらしい。

いろんな人に相談したりしてると、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アドレスが複数存在する場合も考えられるため)

 

以上。

タイトルとURLをコピーしました