SPFレコードの書き方簡易版| プロサバメモ

WEBプログラミングやサーバ設定などのメモ場

SPFレコードの書き方簡易版

2022.03.23

自サーバからメール配信する場合の、SPFレコードの書き方簡単まとめ。

目次

自分(自社)のサーバなどを構築して、そのサーバからメールを配信する必要がある場合、DNSにSPFレコードを適切に記述しておかないと、 配信したメールが届かなかったり、迷惑メールとして取り扱われてしまいます。

以下は、自サーバからの配信メールが配送先で正規メールとして扱われるための簡単なSPF記述方法です。

なお、DNSの設定のため設定反映には時間を要します。(数日は見ておく必要あり)

1. 記述フォーマット

対象ドメイン. IN TXT "v=spf1 rule"

ruleの部分に、認証の取り扱いと認証対象(IPやドメイン)を組み合わせて記述する。以下参照。

2. ルールの記述

2-1. 認証の取り扱いの記号

認証の取り扱いは、次の記号で記述する

記述 意味
+ 正規のメールとして扱われる。
- 非正規メールとして扱われる。(配信されない可能性大)
~ 非正規メールとして扱われるが配信される。(要する配信されるが、迷惑メールに振り分けられる)

2-2. 認証対象

認証対象は、ip(IPv4,IPv6いずれも可能)または、ドメインまたは、allを指定する。

記述 意味
ipv4 IPv4で指定時
ipv6 IPv6で指定時
a ドメインで指定時
all 全てが対象

3. 具体的な記述例

sym.me. IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx -all"

IP(ipv4)xxx.xxx.xxx.xxxからの配信は正規メールとして処理、その他は全て非正規として処理される(配信しれない可能性大)。

sym.me. IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx ~all"

IP(ipv4)xxx.xxx.xxx.xxxからの配信は正規メールとして処理、その他は全て非正規として処理されるが配送は試みられる(要するに迷惑メールとして配信される。)。

sym.me. IN TXT "v=spf1 +a:sym.me ~all"

ドメイン(a)sym.meからの配信は正規メールとして処理、その他は全て非正規として処理されるが配送は試みられる(要するに迷惑メールとして配信される。)。

※IPで指定可能ならIPでした方がDNS問い合わせを減らすことができる。

4. 複数のルールを指定する場合

SPFレコードは、1ドメインにつき1レコードしか記述することができない。

以下の様に1つのドメインにつき3つのレコードを記述した場合、エラーにはならないが、内1つしか有効にならない。

ダメな例

sym.me. IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx -all"
sym.me. IN TXT "v=spf1 +ip4:yyy.yyy.yyy.yyy -all"
sym.me. IN TXT "v=spf1 +ip4:zzz.zzz.zzz.zzz -all"

複数のルールを指定する場合は、1行に記述していく。

sym.me. IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx +ip4:yyy.yyy.yyy.yyy +ip4:zzz.zzz.zzz.zzz -all"

ただし、1レコード255文字までで記述する必要があるので注意。

5. SPFの反映確認

もし、nslookup等のコマンドが使えれば、

コマンド

nslookup -type=TXT sym.me

などでDNSの応答を確認します。ただDNSの反映そのもに時間がかかるため、数日待つ必要があるかもしれません。

また、設定対象のサーバから自分宛にメールを送信して、そのメールのヘッダからも確認できます。
(メーラーでメールソースを確認)

Received-SPF: pass

メールヘッダ内のspf関連の認証結果コードがpassとなっていたら成功です。

pass以外の認証結果コードの場合は、まだDNSの反映がされていないか、設定になにか問題があるか確認が必要です。

5-1. 認証結果一覧

コード 意味
pass 成功:正規メールとして取り扱われた
fail 失敗:非正規メールとして取り扱われた
softfail 失敗:非正規メールの可能性がある
neutral 判定不能
temperror 判定不能:一時的な障害の発生
permerror 判定不能:公開されているSPFレコードの解釈ができない
none 判定不能:SPFレコードが公開されていない

noneの場合は、DNSの反映がまだの可能性大。

その他は、SPFレコードの記述を見直した方がよさそうです。

6. まとめ

SPFレコードの記述そのものは、DNSのTXTレコードに、設定対象とその取扱いを記述するだけなので比較的簡単かと思います。
※DNSがらみなので、テストがちょっと面倒ですが。。。

  • 設定対象とその取扱いの組み合わせで記述。
  • 1ドメインにつき1レコードしか記述できない。
  • 1ドメインに複数のルールを設定する場合は、1レコード内でスペース区切りでルールを記述する。
  • 1レコードは255文字までで記述する。
  • メールヘッダー内のspf関連がpassになっていることを確認する。

以上、SPFの簡単な設定でした。

関連記事

TOP