SPFを使ってメール送信者偽装を防ごうとしてみる


SPFってどういうことができるの?

Sender Policy Framework の略。
なりすましメール絶許マン。

  • メールはSMTPという仕組みを使って配信される
  • 配信元メールアドレス「from」は結構自由にSMTPに送れてしまう。偽り放題。
    • 悪意のある人が、自分のフリをして、迷惑メールを他人に送っていたら困る
      • 自分にクレームが来る…
      • 自分のドメインの信用が下がる…

そこで

  • 自分が持っているドメインのメールアドレスの配信元を宣言する仕組みがSPF

ざっくりすぎる図解

  1. メールを送信1
  2. 受信メールサーバが、メール情報にある「送信元」が指定されているドメインDNSが許可している送り元からの送信かを確認
  3. DNSのSPFの内容で正規送り元か判断がつく!2
  4. 送り先の人は偽装メールを受け取らずに済んでみんな幸せ

SPFってどう指定するの?

許可したい送信元がどこなのかを把握

ドメインですか?IPですか?
例として今回はドメインwatashinomono.comとして、SMTPサーバのドメインkyokashitai.domain.comとIPXX.XX.XX.XXからのメール送信を許可(宣言)していきます。

SPFレコードをDNSに記載

SPFはDNSにあるものです。
DNSのゾーンファイルにあるものです。
ドメイン名をレコード名とするTXTレコードとして公開されるものです。

ゾーンファイルの記述は以下の通り。

watashinomono.com. IN TXT "v=spf1 +include:kyokashitai.domain.com +ip4:XX.XX.XX.XX ~all"
  • v=spf1
    • SPFのバージョンを指定
  • +include:kyokashitai.domain.com
    • ドメインに対する指定はincludeに続ける
  • +ip4:XX.XX.XX.XX
    • IP4形式のIPに対する指定はip4に続ける
  • ~all
    • 全てに対する指定

SPF記述は先頭(左側)にあればあるほど優先されるので「all」に対する宣言は末尾(右側)に書くようにしましょう。

クオリファイア

Q.ドメインやIPの前に「+」とか「~」が頭についてるけどなんですか?
A.クオリファイアアです。使用許可だけではなく使用禁止も宣言できます

記号 意味
+ 許可
~ 禁止
- 禁止(強い)

SPF落とし穴

SPFとして指定できるレコード数には限りがあるらしいので、TXTに記載したからと言って設定が通っているかは怪しいらしい…?
以下のようなサイト・ツールを使って設定した自DNSにSPF情報を取得しに行ってみましょう。

  • DOMAIN:watashinomono.com
  • IP:XX.XX.XX.XX

そもそもTXTに文字数制限があるのでIPを書き連ねるはあんまりよくなさそうですね…送信元が自分が持ってるSMTPサーバなら、そいつもきちんとDNS設定して1ドメインにまとめてあげたりしてください。

受信メールサーバ側

わかりやすさを優先して、ざっくり図解をDNSがYesNo返すみたいな書き方にしてしまったけど、DNSはSFPレコードを持っているだけなのでした。
Yes,Noの判断は受信メールサーバ側で行います。

SPFレコードは受信メールサーバ側の挙動あってこそのものです。
あなたがメールサーバの管理者であればSPFチェックの仕組みと、不正であった場合の対応の決定・処理の設定を行いましょう。

  1. メールを受信したら
  2. 送信者のメールアドレスからドメイン(@以降)を取り出して
  3. ドメインのSPFレコードをDNSに問い合わせて
  4. 返ってきた結果と、メール送信元IPアドレスを照合し、
  5. メールを破棄、迷惑メール扱いにする、等の処理を行うようにしておく

オマケ

送信者偽装を防ぐ「送信側」のドメインが打てる手は、SPF以外に
DomainKeys Identified Mail(DKIM)Sender IDもあります。

参考元

DNSのSPFレコードについてあらためて学習してみた
http://fanblogs.jp/nowlogging/archive/34/0

SPFレコードの設定・書式について理解する
https://monaski.hatenablog.com/entry/2016/02/27/150530


  1. 送信してから受信メールサーバへ届くまでに、SMTP使ったりとかしてるけど、今回の図では略 

  2. 受信メールサーバ側で判断がつくだけなので、そのまま受信ユーザへメールが送信されることがあります。受信メールサーバ側で、SPF設定と異なる送信元である場合はユーザに送信しないとか迷惑メールの扱いにする等の挙動設定が必要。