Tips: メールを送信する際のDNS設定 (SPFレコード)
今回はメールを送信するためのDNS設定(SPFレコード)を記載します。
DNSの委任
ドメインを取得したプロバイダーとDNSレコードを管理するプロバイダーを分ける場合は、ドメインを取得したプロバイダーにてDNSのネームサーバーを委任先のNSサーバに変更します。
メールを送信する際の設定
メールを送信する際設定する内容として、以下のようなものがあります。
- SPFレコード
- DKIMレコード
- DMARCレコード
今回はSPFレコードに絞って設定内容を見ていきます。
SPFレコード
送信先のメールサーバはDNSのSPFレコードを参照し、送信元がドメイン所有者により登録されたサーバに該当するかどうかをチェックすることが出来ます。
送信元をTXTレコードに登録します。
例えばIPアドレスが「xxx.xxx.xxx.xxx」から送信されたものは信頼し、それ以外は信頼しないとした場合は以下のように記載します。
v=spf1 ip4:xxx.xxx.xxx.xxx ~all
大きく3つの部分に分けて説明します。
- v=spf1: SPFのバージョン
- ip4:xxx.xxx.xxx.xxx: 送信元の定義
- ~all: その他送信元の定義
SPFのバージョン
v=spf1
はSPFのバージョンを表します。SPF1について記載します。
送信元の定義
メールを送信するIPアドレスまたは、ドメイン名等を記載することが可能です。
IPアドレスを指定して送信元を登録する場合は ip4
または ip6
を使用します。ip4
は IPv4で、ip6
はIPv6のアドレスを登録します。 (例: v=spf1 ip4:xxx.xxx.xx.xxx ~all)。アドレスの範囲を登録する場合はサブネットマスクを付けます。(例: v=spf1 ip4:xxx.xxx.xxx.xxx/24 ~all)
複数の送信先がある場合はスペースで区切って送信元を登録します。 (例: v=spf1 ip4:xxx.xxx.xx.xxx ip4 yyy.yyy.yyy.yyy ~all)
IPアドレスではなく、ドメイン名で登録したい場合は a
を使用します。 (例: v=spf1 a:smtp.example.com ip4 xxx.xxx.xxx.xxx ~all)
メールの送受信が同じサーバで行う場合、受信サーバが MXレコードに登録されています。mx
を使用する事でメールサーバを指定することも可能です。 (例: v=spf1 mx ip4 xxx.xxx.xxx.xxx ~all)
GmailやOffice365等のメールサービス・メールホスティングサービスを使っている場合やマーケティングなどでメールを一括配信する場合はサービス提供者がSPFレコードの登録方法を記載している場合があります。
他社のSPFレコードの登録方法または、自社のSPFレコードが長くなって分割する場合は別のSPFレコードを参照することで対応を行います。
別のSPFレコードを参照する場合は include
を使用します。(例: v=spf1 include:_spf.example.com ip4 xxx.xxx.xxx.xxx ~all)
GmailのSPFレコードは以下のような記載ありますが、注目してほしいのは include:_spf.google.com
部分になります。_spf.google.com
と言うレコードに送信元の定義があるのでそこを参照してほしいと言う意味になります。
つまりv=spf1 include:_spf.google.com ~all
と登録してほしいという意味ではないです。v=spf1 include:_spf.google.com ~all
をそのまま登録してしまうと自社のメールサーバ、配信システムを使用している場合、メールフォームを使用して送信しているケースなどでメールが届かないトラブルが発生しますのでご注意ください。
SPFレコードの限定子
SPFレコードの設定で v=spf1 ip4:xxx.xxx.xxx.xxx ~all
ではなく v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
と記載されているケースがあると思います。(ip4
ではなく頭に+
がついた+ip4
です。)
頭の+
は限定子と呼ばれています。
限定子の種類は以下の通りです。
- +: Passで送信元として定義するアドレスの前に付けることが出来ます。(デフォルトで省略可能です。)
- –: Fail で信頼できない送信元のアドレスの前につけることができます。この記号があるとメールサーバはメールをドロップします。
- ~: SoftFail で信頼できない送信元のアドレスの前に付けることが出来ます。FailとSoftFailの違いですが、Failはメールを受信拒否してほしい場合に指定しSoftFailは一応受信はしてほしいが不審なメールとして取り扱ってほしい場合に使用します。
- ?: Natural でSPFレコードが定義されていない状態として取り扱ってほしい場合に使用します。
FailとSoftFailについてどのように使い分けるかですが、昨今フィッシングメールやスパムメールが多くなってきておりますがインターネット黎明期からサーバの運用等を行っている企業と新しく起業する/ブランド名を変更しドメインを変更する場合の企業などで状況が異なります。
インターネット黎明期からサーバを運用していて送信元が管理しきれないような企業でしたらSoftFailを選択する方が無難です。
管理しているサーバからしか送信しないと言う事が分かっている場合や新しくドメインを取得する場合はFailを選択すると良いでしょう。
その他送信元の定義
送信元で定義した以外のアドレスについてその他の送信元として定義をします。
慣例的に一番最後に all
を使いSPFレコードの限定子で取扱を定義します。
- ~all: メール受信者は受信するが迷惑メールとして取り扱ってほしい場合に記載します。
- -all: メール受信者はメール受信を拒否してほしい場合に記載します。
注意点
- SPFレコードの最大文字数は255文字です。TXTレコードも最大512バイトに設定する必要がありますので送信元の定義がたくさんある場合は参照を使うようにして下さい。
- TXTレコードは1つしか登録出来ません。複数のTXTレコードを登録してしまうと受信したメールサーバが参照したTXTレコードにある送信元のみ信頼することになりトラブルの原因となりますのでご注意ください。
- 参照のステップ数は最大10回です。参照先でさらに参照をしているケースもあるかもしれないので注意してください。少なくとも自社を参照している場合は多段参照にならないようにして下さい。