みなさん、SPF(SenderPolicyFramework)レコード設定してますか?
SPFレコードとは、メール送信者の正当性を確認するために使用されるDNS設定です。
昨今のメールを取り巻く状況はより厳しさを増しており、設定していないことにより、本来届くはずのメールが正しく受信出来ないという問題が目立つようになりました。
詳しくはこちらがとてもわかりやすいです。
SaaSのメール配信サービスやメール周りの管理者の方なら、一度は耳にしたことや、設定したことはあるのではないでしょうか?
設定をする場合、自身の送信元ドメインのみをシンプルに登録するようなことが多いと思いますが、実は様々な記法があります。
今回は、普通に使っていると使わないだろうなと思われる記法を高度ということにして、10選形式でまとめてみました。
1. メカニズムと修飾子の組み合わせ
v=spf1 ip4:192.0.2.0/24 include:example.com ?all
このレコードは 192.0.2.0/24
のIP範囲と example.com
のSPFレコードを組み合わせ、?all
でニュートラルな結果を示します。
example.com
からのメールは許可され、他のドメインは各自のSPFレコードに基づいて処理されます。
2. CIDR表記を用いたIP範囲指定
v=spf1 ip6:2001:0db8::/32 -all
このレコードは 2001:0db8::/32
のIPv6アドレス範囲からのメール送信を許可し、それ以外を拒否します。
指定IPv6範囲からのメールは受け入れられ、他は拒否されます。
3. 複数のメカニズムの組み合わせ
v=spf1 ip4:192.0.2.0/24 include:example.com redirect=_spf.anotherdomain.com
192.0.2.0/24
のIP範囲とexample.comのSPFレコードにマッチするサーバーを許可し、他はanotherdomain.com
のSPFレコードにリダイレクトします。
指定IP範囲と example.com
は許可され、他は anotherdomain.com
のSPFレコードに従います。
4. 動的な条件に基づくメール送信を許可するexists
v=spf1 exists:%{i}.spf.example.com -all
exists修飾子で送信者のIPアドレス(%{i})に基づく動的なチェックを行い、特定のDNSレコードの存在で判断します。
SPFはDNSルックアップが10回までに制限されており、この制約を回避するために使われることもあります。
送信者のIPアドレスが 203.0.113.5
の場合、このレコードは 203.0.113.5.spf.example.com
というDNSレコードの存在を確認します。このDNSレコードが存在する場合、メールは許可されます。存在しない場合は、メールは拒否されます。
5. マクロの組み合わせ
v=spf1 +mx a:%{ir}.%{v}._spf.%{d} -all
SPFマクロを使用して特定のIPアドレスパターンやドメイン名に基づく条件付きルールを作成します。%{ir}
は逆順の送信者IPアドレス、%{v}
はIPバージョン(ipv4またはipv6)、%{d}
はドメイン名を表します。
送信者のIPアドレスが 203.0.113.5
で、ドメインが example.com
の場合、このレコードは5.113.0.203.ipv4._spf.example.com
というDNSレコードの存在を確認します。このDNSレコードが存在する場合、メールは許可されます。存在しない場合は、メールは拒否されます。
6. 送信者ドメインによる制限
v=spf1 include:%{l}.%{d} -all
%{l}
マクロはローカルパート(メールアドレスのユーザー名部分)、%{d}
はドメインを表します。この設定では、送信者のメールアドレスに基づいてドメインのSPFレコードを動的に参照します。
メールアドレスが user@example.com
の場合、user.example.com
のSPFレコードに従ってメールがチェックされます。
7. 特定の送信者を許可
v=spf1 a:mail.example.com -all
a
メカニズムを使用して、特定のドメイン(この例では mail.example.com
)からのメール送信のみを許可し、他のすべてを拒否します。
mail.example.comのIPアドレスからのメールのみが許可されます。
8. 多段階のincludeメカニズム
v=spf1 include:spf1.example.com include:spf2.example.com -all
複数の include
メカニズムを使用して、別のドメインのSPFレコードを連鎖的に参照します。
spf1.example.com
と spf2.example.com
のSPFレコードに定義されているIPアドレスからのメールが許可されます。
9. 特定の国からの送信を許可
v=spf1 ip4:203.0.113.0/24 geo:%{c}.spf.example.com -all
%{c}
マクロを使用して、送信者の国コードに基づいたジオロケーションベースのSPFレコードを設定します。geoメカニズムは、送信者のIPアドレスの国コードを取得し、対応する国のSPFレコードを参照します。
フランス(FR)からのメールが送信される場合、fr.spf.example.com
のSPFレコードに従ってメールがチェックされます。
10. カスタムマクロと複雑なロジック
v=spf1 %{s}.mail.%{d2} -all
%{s}
マクロは送信者のメールアドレス、%{d2}
は2レベル上のドメインを表します。この設定では、送信者のメールアドレスとドメインの組み合わせに基づいて特定のDNSレコードを参照します。
メールアドレスが user@sub.example.com
の場合、user.mail.example.com
のSPFレコードに従ってメールがチェックされます。
まとめ
これらの高度なSPF設定例は、メール認証プロセスを細かく制御するためのものです。
特に、送信者ドメインによる制限やカスタムマクロの使用などは、特殊なケースでの利用を想定しています。
メールをきちんと受信者に到達させるためには、他にもDKIMや配信速度、送信元の各種レピュテーションの維持など、実はとても大変であり、奥が深いんですよね。
各種メールプロバイダーも昨今のスパム問題への対応を強化していることもあり、今後もよりセキュアな状態でメールを配信しなければ届かないという状況は加速していくものと思います。
正しい設定と、適切な内容と配信量を心掛けて、送信側も受信側も無理や無駄のないメール配信を行なっていきましょう。
参考