Sender Policy Framework (SPF) の仕組み
今回は、Sender Policy Framework (以降、SPF) の仕組みについて簡単に解説してみます。
直訳すると、送信者方針の枠組み(構造)?となります。
ここでの意味は、
メールの送信者が正しいルート(サーバー)を経由してメールを送信しているか確認する仕組みになります。
ここでは、もう少し詳しく解説してみます。
SPFとは、
Sender Policy Framework(センダー・ポリシー・フレームワーク)の略で、電子メールにおける送信ドメイン認証のひとつです。
差出人のメールアドレスが他のドメインになりすましていないかどうかを検出することができると言われています。 SPF もしくは SPF認証 とも呼ばれています。
出典 : Wikipedia
Sender Policy Framework (SPF) の仕組み
SPFの仕組みの流れは、図解すると以下のような流れになります。
- ユーザからメール送信します。
メール送信者のメールサーバーでは、設定によっては他のドメインを拒否するように設定することもできます。ここでは、許可しているものとして解説しています。
- ユーザから受け取ったメールをメール受信者のメールサーバーへ送信します。
メール送信者のメールサーバーでは、ユーザから受け取ったメールの宛先ドメインにて、本来は、ネームサーバーへメールの送信先メールサーバーを問い合わせます。
問い合わせた結果、メール受信者のメールサーバーが決定し、メールを中継しますが、ここでは説明を割愛しています。
- メール受信者のメールサーバーでは、送信者ドメインのSPF情報をネームサーバーへ問い合わせます。
もちろん、メール送信者のドメインを管理しているネームサーバーへ問い合わせます。
- ネームサーバーは、送信者ドメインのSPF情報を返信します。
ネームサーバーでは、SPF情報は、TXTレコードで設定されていますので、その情報があれば、返信します。無ければないで、「無い」と返信します。
- メール受信者のメールサーバーでは、送信者がSPF情報に従って正しいメールサーバーを経由して送信しているか確認します。
確認するのは、MTA ( Sendmail,Postfixなどのメールサーバー ) で認証します。具体的には、Sendmail,PostfixなどのメールサーバーにSPF認証機能を有効に設定していない場合は、この認証は実施されません。
SPF認証機能が有効になっていた場合、認証失敗時の対処を設定できるようになっています。その設定に従い、メール配信が処置されます。
一般的には、メールのヘッダ情報にSPFの認証結果が付加されます。
Received-SPF: SoftFail .......
|
SPFの認証結果
None | : |
SPFレコードが公開されていない |
Neutral | : |
SPFレコードが“?”として公開されている条件にマッチした |
Pass | : |
認証処理に成功した |
Fail | : |
SPFレコードが公開されているが、認証に失敗した |
SoftFail | : |
SPFレコードが“~”として公開されている条件にマッチした |
TempError | : |
一時的な障害で認証処理が失敗した |
PermError | : |
SPFレコードの記述に誤りがあるなどで認証処理に失敗した |
赤色は、REJECT(破棄)すべき、あるいは、REJECT(破棄)を選択される場合もありうる。
橙色は、管理者が判断すべきで、一般的には、受信はする。
青色は、正常と判断、受信する。
出典 : http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/#60 SPF技術解説(財団法人インターネット協会/センドメール執筆)の「6. SPF認証結果」
Sender Policy Framework (SPF) の情報の設定
DNSの設定例
先にも記述したようにSPF情報は、DNS ( ネームサーバー ) の TXT (テキスト) レコード にて設定します。
よくある設定例は、以下のようなものです。
IN MX 10 mail.example.com.
IN TXT "v=spf1 mx ~all"
mail IN A 11.22.33.44
|
上記は、メールに関する事項のみを記載しています。(本当は、それ以外にもウェブサイト名などの設定もありますがここでは省略しています)
設定している内容を簡単に解説しておきます。
- 1行目 : ドメインのメール受信先(MX)ホスト設定
- 2行目 : ドメインのSPF設定
- 3行目 : STMP(Sendmail)サーバーのIPアドレス設定
ここでの設定内容は、以下のような意味になります。
v=spf1
: spf の宣言を指定しています。
mx
: このドメインのメールアドレスは、ここでmxレコードに指定しているホストから送信される・・という宣言です。
~all
: 先の指定内容(ここでは、mx)は、ほぼ全部・・・という意味になります。
-all
: このように指定すると、完全全部・・・という意味になりますから、
もし、mxレコードに指定しているホスト以外からメールを送信した場合、SPF認証結果Failと認識されスパムメールと判断、
破棄されることが考えられます。
まだ、SPFは完全に対応しているわけではないので、一般的には、~all を指定しておくことが無難とされています。
Sender Policy Framework (SPF) の情報の詳細
先の例を含めて、もう少し詳しく解説してみます。
- v=spf1 : 正確には、spf 情報のバージョンを宣言しています。
つまり、ここでは、spfのバージョン1を使います・・・ということです。バージョン1を指定することで、Sender ID との互換性を保持するメリットがあるとされ、一般的にspf1とするのが普通です。
- mx : 機構 と呼ばれるもので、ここで認証対象の送信元ホストのIPアドレスと照合する条件を記述します。
ここでは、mxを指定していますから、
送信元ホストのIPアドレスが、ドメイン名に対応するMXレコードに指定されているホストのAレコードのいずれかであれば認証OKですよ・・ということです。
機構 には、他にも以下のようなものが指定できます。
SPFの機構の種類
all ( なし )
すべての送信元ホストにマッチする。SPFレコードの末尾に置かれ、デフォルトの動作を定義するために利用される
include ドメイン名
引数に与えられたドメインのSPFレコードを使って認証処理を行い、その結果がPassかTempError、またはPermErrorの場合のみ値が採用される。includeに指定された先のドメインのSPFレコードによってFailの判定が与えられても、それが認証結果としては採用されない
a ドメイン名
送信元ホストのIPアドレスが、ドメイン名に与えられたFQDNのAレコードのいずれかであれば条件マッチする
mx ドメイン名
送信元ホストのIPアドレスが、ドメイン名に対応するMXレコードに指定されているホストのAレコードのいずれかであれば条件マッチする。 MXは複数与えられる場合があるが、10個までのMXホストに対して検査を行う
ptr ドメイン名
送信元ホストのIPアドレスをリバースルックアップし、得られたホスト名でさらに正引きを実施し、IPアドレスを得る。そのIPアドレスと送信元ホストのIPアドレスが含まれる場合、そのホスト名が引数に与えられたドメイン名と一致するかそのサブドメインである場合、認証成功となる。リバースルックアップに失敗した場合はFailとみなす。負荷の多い処理となるため、あまり利用は推奨されない
ip4 IPネットワークアドレス(CIDR表記可能)またはIPアドレス
送信元ホストのIPアドレスが、引数に指定されるIPネットワークに含まれているかIPアドレスにマッチする場合、認証成功となる
ip6 IPv6ネットワークアドレスまたはIPv6アドレス
送信元ホストのIPv6アドレスが、引数に指定されるIPv6ネットワークに含まれているかIPv6アドレスにマッチする場合、認証成功となる
exists ドメイン名
引数であるドメイン名に指定された表記でAレコードルックアップを実施し、該当のAレコードが存在すればマッチする。SPFのマクロ機能とあわせての利用を想定している
出典 : http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/ SPF技術解説(財団法人インターネット協会/センドメール執筆)の「6. SPF認証結果」
- ~all : 限定子 と 機構 の組み合わせになります。
限定子は、それに続く機構にマッチした場合の認証結果を指定するものです。
ここでは、
~ : 認証情報を公開しているが、正当なメールであっても認証失敗する可能性もある
all : すべての送信元ホストにマッチする
というそれぞれの意味をあわせた意味になります。
つまり、認証情報は設定されていて、送信元ホストに一致する(ここではmxレコードで指定されたホストになる)場合は、認証成功(Pass)となるが、
mxレコード以外のホストからも送信されることがあるので、認証失敗(SoftFail)とこともあるよ・・・という意味になります。 ちょっとアバウト・・・ですが、そういう意味です。
限定子 には、他にも以下のようなものが指定できます。
SPFの限定子の種類
+ | :[Pass] |
当該ドメインの送信メールサーバとして認証する |
– | :[Fail] |
当該ドメインの送信メールサーバとして認証しない |
~ | :[SoftFail] |
認証情報を公開しているが、正当なメールであっても認証失敗する可能性もある |
? | :[Neutral] |
認証情報を公開しない |
出典 : http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/ SPF技術解説(財団法人インターネット協会/センドメール執筆)の「6. SPF認証結果」
- 上記以外に修飾子 というものも設定することができます。
修飾子 には、以下のようなものが指定できます。
SPFの修飾子の種類
redirect [ redirect=ドメイン名 ]
引数であるドメイン名に指定されたドメインのSPFレコードにより認証処理を実行する。複数のドメインが、1つのSPF定義を共有するような場合での使用を想定している。この修飾子を利用する場合、SPFレコードの末尾に配置することが推奨されている
exp [ exp=ドメイン名 ]
認証が失敗した場合、引数であるドメイン名に指定されたドメインのTXT RRに設定されている文字列を、認証失敗した理由や説明等として利用する。SMTPセッションでのエラーメッセージなどでの利用を想定している
出典 : http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/ SPF技術解説(財団法人インターネット協会/センドメール執筆)の「6. SPF認証結果」
どうでしょうか、少しはSPFについて理解が深まりましたでしょうか?
SPFは、そもそもがスパマーが独自の勝手なSMTPサーバーをたてて、適当なメールアドレスを使って、配信するのを防ぐ意図があります。
確かにドメイン管理者が指定した情報(ネームサーバーに設定したSPF情報)を元に認証を行うので、送信者を偽装しているかどうか・・・を判断できる?かもしれませんね。
ただ、このSPFが全てのメールサーバーに適用されているわけでもありませんし、それほどスパムを排除できないのが現状だと思います。ただし、少なくともFailの判定は、スパムの可能性が高いと言えるでしょうね。
いろいろ考えることはありますが、SPFは、案外普及していますから、設定しておくことをおすすめします。この設定をしていないとスパム扱いされることもありますからね。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :