SPFレコードの書き方メモ
今回はマニアックな内容ですが、自分の備忘録としてSPFレコードの書き方についてまとめます。
SPFとは
SPFとはSender Policy Frameworkの略称で、メールの送信アドレス(正確には送信ドメイン)を偽っていないかをチェックするための仕組みです。
パソコンや携帯に自分のメールアドレスから迷惑メールが送られてきた・・・なんて経験がある方も多いのではないでしょうか?
メールを送信する場合、SMTP(Simple Mail Transfer Protocol)というプロトコルを使用するのですが、このプロトコルでは差出人(from address)を自由に設定することができます。迷惑メールではこれを利用しているのです。
SPFとは上記のようなことを防ぐための仕組みで、DNS利用して差出人の正当性を確認します。
具体的にはメールを受信する際に以下のような流れでチェックが行われます。
1.受信サーバが、差出人アドレスに記されたドメインのDNSからTXTレコードを取得する
2.TXTレコードに記載されているルールに則り、送信なサーバの正当性をチェックする
3.結果によって、メールを受信するまたは拒否するなどの処理を行う
上記の流れでSPFのチェックが行われるため、送信側では自身のドメインのDNSサーバに送信サーバが正当であることをTXTレコードとして設定しておく必要があります。
SPFレコードの書き方
SPFレコードの基本書式
一般的には上記のような形になります。
ダブルコーテーションの外側の部分はTXTレコードの書式となり、お使いのサーバ・サービスなどにより多少異なります。
SPFレコードは「v=spf1 +ip4:192.168.0.1 -all」の部分となり、上記の例では色分けしておりますが、基本的に以下の書式となります。
<SPF version> <qualifier><mechanism>:<値>
上記の例に当てはめていきますと、「<SPF version>」が「v=spf1」、「<qualifier>」が①の「+」と④の「-」、「<mechanism>」が②の「ip4」と⑤の「all」、「<値>」が③の「192.168.0.1」の部分となります。
また、上記例でもそうですが、「<qualifier><mechanism>:<値>」は複数回書くことができます。以下にそれぞれ詳細を記載していきます。
SPF versionについて
基本的に「v=spf1」と記載すればOKです。
それ以外に「spf2.0/pra,mfrom」と記載する場合もありますが、個人的には「v=spf1」と覚えておけば大丈夫だと思っています。
よく「v=spf1.0」と書いてエラーになってしまう場合がありますので注意しましょう。
qualifier - クオリファイアについて
qualifier - クオリファイアは後ろに続くmechanism - メカニズムがマッチした場合に、その認証結果をどうするかを指定します。
また、qualifierは省略することも可能で、省略した場合は「+」として処理されます。
種類とそれぞれの意味についは以下表のとおりです。
qualifiler | 判定結果 | 備考 |
---|---|---|
+ | Pass | 正常:正当なメールとして処理される |
- | Fail | 異常:不当なメールとして処理され、配信拒否される場合がある |
~ | SoftFail | 異常:不当なメールとして処理されるが、配信は行われる |
? | Neutral | その他:SPF指定がないものとして処理される |
※備考の内容は一般的に行われる処理となります。実際の処理については受信サーバ側の設定に依存するため、SoftFailでも配信拒否されるっといった可能性もあります。
mechanism - メカニズムと値について
mechanismと値は判定ルールのようなもので、記載したルールにマッチした場合に設定していたqualifierの値を返します。
また、mechanismはいくつも記載することができ(※)、左側に記載したほど優先してマッチしているかが評価されます。前述にもありますが、mechanismはいろいろな種類がありそれぞれの内容を以下に記載しています。
※いくつかのmechanismを使用したい場合、必ずひとつのSPFレコードに記載します。
SPFレコード自体を複数、指定するとエラーになりますので注意が必要です。
ip4 - IPアドレスを使用したメカニズム
ip4:192.168.0.1/16
「ip4」は指定したIPアドレスと送信元のIPアドレスが一致するかを確認します。上記のように"/16"とすることでマスク指定が可能です。
また、"ip4"ではなく"ip6"と記載することでIPv6での指定も可能です。
mx - MXレコードを使用したメカニズム
mx:ho-plus.com
「mx」は指定したドメインのMXレコードに設定されているドメインのIPアドレスと送信元のIPアドレスが一致するかを確認します。
a - Aレコードを使用したメカニズム
a:ho-plus.com
「a」は指定したドメインのAレコードに設定されているIPアドレスと送信元のIPアドレスが一致するかを確認します。
incluede - 他ドメインのSPFレコードを使用したメカニズム
include:artistics.co.jp
「include」は指定したドメインのSPFレコードを確認します。
all - 全てマッチとなるメカニズム
all
「all」は他のメカニズムとは違い必ずマッチするメカニズムです。
基本的にSPFレコードの最後に記載し、その他のメカニズムにマッチしなかった場合にどのクオリファイアを返すのかを指定します。
イメージとしてはSPFレコードのデフォルト値の設定のようなものです。
ptr - 逆引きで得たドメインを使用したメカニズム
ptr:ho-plus.com
「ptr」は送信元のIPアドレスの逆引きによって取得したドメインと指定したドメインが一致するかを確認します。「ptr」はDNSサーバの不可が高くなるといった理由からあまり推奨されていないので、使う機会はほとんどないです。
exist - ドメインの存在を確認するメカニズム
exist:ho-plus.com
「exist」は指定ドメインにAレコードが存在するかを確認します。「exist」もあまり使うことがないメカニズムだと思います。正直私も使いどころがわかっていません。
SPFレコードについての備考
本記事では割愛しましたが、Modifier - モディファイア(ちょっと特別なMechanismと思ってください)というくくりで"redirect"と"exp" という指定方法も存在します。気になる方は検索してみてください。
ちょっと長くなってしまいましたが、SPFレコードの書き方は上記のような書式・意味となります。DNSレコードは一文字間違えるだけで正常に動作しませんので実際に設定する場合には必ず動作確認を行うようにしましょう。