SPF メール送信なりすまし対策
SPF は Sender Policy Framework の略でメールの送信元ドメインの偽称を防ぎ、正当性を検証する技術です。DNS に SPF レコード追加することにより、送信ドメイン認証を行いなりすましメール送信することを防げます。メール送信時ドメイン認証技術は SPF DKIM DMARC 3種類ありますが、SPF が一番導入しやすいため、広く利用されています。jp ドメイン名全体の SPF と DMARC の最新 2020 年 5 月の調査結果では受信したメールに対して 65.1%の普及率に達しています。
SPF レコードの書き方
DNS に SPF レコードを TXT で追加します。
ドメイン. IN TXT”【SPF version】 【qualifier】【mechanism】:【値】”
”
”
で囲む文字列最大 255 文字 - mechanism は複数設定できるが、SPF レコードを複数指定するとエラー
SPF レコードの内容3つの部分
- SPF version
- qualifier
- mechanism:値
一般的な TXT 書き方例
v=spf1 +ip4:192.168.0.1 -all
SPF version
SPF version v=spf1
が基本的で、それ以外に spf2.0/pra,mfrom
もあります。
「v=spf1.0」と書くとエラーになります。
qualifier 限定子
読み方 kwɔ́ləfàiər
qualifier 限定子は +
-
~
?
4種類あります。
限定子 | 判定 | 備考 |
+ | Pass | 正当なメールとして処理 |
- | Fail | 不正メールとして処理し、配信拒否 |
~ | SoftFail | 不正メールとして処理するが、配信行う |
? | Neutral | SPF 指定のないその他のもの処理 |
※ サーバーによって SoftFail でも配信拒否されることがあります。
mechanism メカニズム
読み方 mékənìzm
mechanism と値で書いた判定ルールにマッチした場合に設定した qualifier の値を返します。
メカニズム | 値 | 機能 |
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 のマクロ機能とあわせての利用を想定している |
ip4 - IP アドレスを使用したメカニズム
ip4:192.168.0.1/16
「ip4」は指定した IP アドレスと送信元の IP アドレスが一致するかを確認します。上記のように"/16"とすることでマスク指定が可能です。
また、"ip4"ではなく"ip6"と記載することで IPv6 での指定も可能です。
mx - MX レコードを使用したメカニズム
mx:hapicode.com
「mx」は指定したドメインの MX レコードに設定されているドメインの IP アドレスと送信元の IP アドレスが一致するかを確認します。
a - A レコードを使用したメカニズム
a:hapicode.com
「a」は指定したドメインの A レコードに設定されている IP アドレスと送信元の IP アドレスが一致するかを確認します。
incluede - 他ドメインの SPF レコードを使用したメカニズム
include:hapicode2.com
「include」は指定したドメインの SPF レコードを確認します。
ptr - 逆引きで得たドメインを使用したメカニズム
ptr:hapicode.com
「ptr」は送信元の IP アドレスの逆引きによって取得したドメインと指定したドメインが一致するかを確認します。「ptr」は DNS サーバの不可が高くなるといった理由からあまり推奨されていないので、使う機会はほとんどないです。
all - 全てマッチとなるメカニズム
all
「all」は他のメカニズムとは違い必ずマッチするメカニズムです。
基本的に SPF レコードの最後に記載し、その他のメカニズムにマッチしなかった場合にどのクオリファイアを返すのかを指定します。
書き方例
example.jp. IN TXT "v=spf1 +ip4:192.168.0.0/24 -all"
example.jp. IN TXT "spf2.0/pra,mfrom +ip4:192.168.0.0/24 -all"
example.jp. IN TXT " v=spf1 include:_spf.example.jp -all"
example.jp. IN TXT " v=spf1 redirect=example.com"
example.jp. IN TXT "v=spf1 +ip4:192.168.0.0/24 +ip4:10.0.0.0/24 -all"
``
注意点
- バージョンの間違い
- 余分な空白文字
- 記号の間違い
- 末尾に「all」と記載