2016年03月09日
DNSのSPFレコードについてあらためて学習してみた
DNSのSPFレコードとは
SPFは、メール送信における送信元ドメインの偽装を防ぐための
技術(送信ドメイン認証)。迷惑メールは、送信元ドメインを偽装していることが
多く、偽装されたドメインとそれを所有する組織は、SPAMメールの送信に当たっては、
あてずっぽうなメールアドレス宛に大量に送信するといったことがよく行われ、
その場合には、大量のエラーメールがSPAMメールを送信したサーバではなく、
偽装されたドメイン側に返送されることになる。
このような事態を防止するために、SPFを利用して、送信元ドメインをの偽装を
防ぐ。これらは迷惑メール対策の一環ではあるが、ドメイン偽装メール対策というのが
より適切な見方で、受信側への気配りとしてもSPFを登録することが推奨される。
SPFは、メールの送信を許可(または禁止)しているサーバのリストをDNSで公開し、
受信サーバ側メールサーバでそのリストを確認して、正当なメールサーバからの
メールかどうか判断する仕組み。
偽装されたメールの場合
SPFを使うとできること
SPFレコードを理解する
SPFレコードはドメイン名をレコード名とするTXTレコードとして公開する。
ゾーンファイルの記述例。
example.com. IN TXT "v=spf1 +ip4:100.AAA.0.1 +ip4:200.BBB.0.1 ~all"
SPFレコードの各項目は、空白で区切られ、上記例では、次の4つに分けられる。
- v=spf1
- +ip4:100.AAA.0.1
- +ipv4:200.BBB.0.1
- ~all
最初の部分(v=spf1)は、どのバージョンのSPFを使っているかを相手に伝える。
それ以降の各部(+ipv4:100.AAA.0.1 +ipv4:200.BBB.0.1 ~all)で、サーバのIPアドレスと
そのサーバに対する許可、禁止を記述していく。この各部分を「ディレクティブ」と呼ぶ。
SPFレコードで記述できる内容の一部
クオリファイア(許可/禁止を示す)
表記 | 内容 |
---|---|
+ | 許可 |
- | 指定なし |
~ | 禁止(ソフトフェイル) |
- | 禁止(ハードフェイル「~よりも強い禁止」) |
メカニズム(対象IPアドレスを示す)
表記 | 内容 |
---|---|
100.AAA.0.1 | 100.AAA.0.1というIPアドレス |
200.BBB.0.1 | 200.BBB.0.1というIPアドレス |
all | すべてのIPアドレス |
ディレクティブの記述順序と意味
「~all」自体の意味は、「すべてのIPアドレスからのメール送信は、許可されていない」という意味。
受信側メールサーバはSPFレコードに基づいて、処理を行う際、左側に書かれているディレクティブほど優先
される。基本的には、許可されているものすべて書いた後、~allまたは、-allというディレクティブを右に記載する。
受信側メールサーバの処理
送信者のメールアドレスがuser@example.comだったとして、
- 送信者のメールアドレスからドメインを取り出す(@example.com)
- example.comという名前のTXTレコード(SPFレコード)を問い合わせ、結果を得る。レコードが存在しなければ、検証を打ち切りそのまま配送する。
- SPFレコードの内容とメール送信元IPアドレスを照合し、正当なメールサーバからかどうかを検証する。
- 判断に基づいて、判断結果を表すヘッダを付け加えて届ける、届けずに破棄する、などの処理を行う。
クオリファイア
この部分は、省略可能で、省略した場合は、「+」を指定したものとみなされる。「?」を指定した場合は、判断をせずにメールを届ける。これは、SPFレコードが存在しない場合と同じ。禁止については、主にallと組み合わせて「それ以外のものは禁止」を表すために使用する。2種類ある禁止の使い分けとしては、実施にメールアドレスに使われているドメインについては、「~」を指定し、絶対に使用されていないドメインについては、「-」を使用するとよい。
メカニズム
メカニズムは、すでにIPアドレスの直接指定(ip4)と、指定された以外のすべてのIPアドレス(all)以外に、Aレコード、MXレコード、PTRレコードなどが指定可能。
・Aレコードによる指定
送信者メールアドレスからドメイン名(@より後)を取り出し、そのドメインのAレコードの値(IPアドレス)得て、そのIPアドレスを送信者側IPアドレスと比較する。
・MXレコードによる指定
送信者メールアドレスからドメイン名(@より後)を取り出し、そのドメインのMXレコードの値を得て、そのホスト名のAレコードを引き、これによって得たIPアドレスを送信者側IPアドレスと比較する。
・PTRレコードによる指定
送信者メールアドレスを逆引きし、ホスト名を得て、そのホスト名と送信者側IPアドレスとを比較する。
レコードの例
表記 | 内容 |
---|---|
Aレコード | "v=spf1 +a ~all" |
mxレコード | "v=spf1 +mx~all" |
PTRレコード | "v=spf1 +ptr ~all" |
組み合わせ | "v=spf1 +a +mx +ipv:x.x.x.x ~all" |
ドメインの指定
a,mx,ptrの後ろに「:ドメイン」を付け加えると、送信者メールアドレスドメインの代わりにそのドメインが使用される。
ドメイン | 意味 |
---|---|
a | ドメイン名のAレコードの値(IPアドレス)を得て、そのIPアドレスを送信側IPアドレスと比較する。 |
mx | ドメイン名のMXレコードの値(IPアドレス)を得て、そのIPアドレスを送信側IPアドレスと比較する。 |
ptr | ドメイン名のPTRレコードの値(IPアドレス)を得て、そのIPアドレスを送信側IPアドレスと比較する。 |
・Aレコードとの組み合わせ
+a:example.com
・MXレコードとの組み合わせ
+mx:example.com
・PTRレコードとの組み合わせ
+ptr:example.com
ネットマスクの指定
・IPアドレス + ネットマスク(先頭30ビットと一致すれば許可
+ip4:100.AA.0.0/30
・送信元ドメイン名のAレコードのIPアドレスの先頭30ビットが送信元IPアドレスの先頭30ビットに一致すれば許可
+a/30
そのほかの設定例
・メールを一切送信しないドメインの場合
example.com. IN TXT "v=spf1 -all"
・送信専用のSMTPサーバ(MSA)と受信用SMTPサーバ(MX)からのエラーメールを許可する場合
example.com. IN TXT "v=spf1 +a:msa.example.com +mx ~all"
SPFレコードのテスト
$dig @DNSサーバのIPアドレス example.com TXT
参考文献
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/4822853
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック