SPFレコードを設定しましょう、というお話です。
SPF解説(一般財団法人インターネット協会)
最近はDNS設定でSPFレコードを登録していないとエラーメールが戻ってきて思うように相手に送れないということが増えてきました。
送信元のドメイン名設定(DNS)でSPFレコードが未定義、もしくは不備がある場合が多いようです。
SPFレコードを設定もしくは見直しをすれば大抵の場合改善されます。
メールが送れない件の対応をしていて経験したSPFレコードの不具合はこんな感じでした。
- そもそもSPF設定がない
- メールを送信しているサーバの情報が含まれていない
- SPFレコードが複数存在する
- 項目の区切りが空白1文字ではなく複数入っていたり、コンマ区切りになっていたりする
- SPFレコードのルックアップ数制限に引っかかった
ひとつずつ見ていきましょう。
そもそもSPF設定がない
ないなら設定しましょう。
DNS設定のゾーン情報に以下のようなレコードを登録します。
(例)
example.com. IN TXT "v=spf1 +a:smtp.example.com +mx +ip4:192.0.2.1 ~all"
ポイントとしては「メールを送信する可能性があるサーバについて記述する」です。
+a:smtp.example.com でメールソフト等から送り込む送信サーバを指定します。
MXは主に受信サーバの設定ですがエラーメールを返したり、サーバ自身で動作するプログラムがレポートメール等を送信したりすることがあるので +mxを入れておきます。
他にもメールを送信する可能性があるサーバのIPアドレスを +ip4: で個別に指定します。
詳しいSPF解説(一般財団法人インターネット協会)
メールを送信しているサーバの情報が含まれていない
せっかくSPF設定していてもそこに記述されていないIPアドレスからメール送信して弾かれてしまうことがあります。
SPF設定する際は、「メールを送信することが正しいサーバ」のIPアドレスをすべて記述するようにします。
+ip4:192.0.2.0/24 といった範囲指定も可能です。
SPFレコードが複数存在する
メールマガジン配送サービスやショッピングサイトの通知設定で SPFレコードの追加を求められることがあります。
「"v=spf1 include:_spf.example.net ~all" を追加してください」と言われてこんな設定に……
example.com. IN TXT "v=spf1 +a:smtp.example.com +mx +ip4:192.0.2.1 ~all"
example.com. IN TXT "v=spf1 include:_spf.example.net ~all"
SPFレコードは複数行の設定は不可なので、次のように結合します。
example.com. IN TXT "v=spf1 +a:smtp.example.com +mx +ip4:192.0.2.1 include:_spf.example.net ~all"
項目の区切りが空白1文字ではなく複数入っていたり、コンマ区切りになっていたりする
v=spf1 から最後の -all や ~all までの間は各項目は1文字の空白を入れるようにします。
見やすいようにと複数文字の空白を入れるのは不可です。
SPFレコードのルックアップ数制限に引っかかった
これは少し面倒です。
こういうところで確認できます。
SPF Record Check - Lookup SPF Records
SPF Record Check
前者でドメイン名を入力して 「SPF Record Lookup」ボタンを押すとルックアップ数が10を超えた場合に以下のように表示されます。
SPF Included Lookups Too many included lookups (13)
+a: や +mx: の後ろにサーバ名がある場合、それをIPアドレスに変換して +ip4: で表現したり、
include: で示されるFQDNからSPFレコードを参照してそれを埋め直したりすることでルックアップ回数を減らすことができます。
例
include:_spf.google.com となっている場合、参照先 _spf.google.com を検索して、その結果を利用します。
たとえば windowsのコマンドプロンプトから
nslookup -type=txt _spf.google.com
と入力すると、以下のような回答が得られます。
"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
その中から必要な部分「include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com」を取り出して、元の include:_spf.google.com と置き換えます。
そうやって include: や +a、+mx で参照される名前を減らしていき、10を超えないようにします。
ただ、名前を IPアドレスに変換したり、include: の参照先を展開したりして対応した場合、その参照先がIPアドレスを変更したり、 include: に含まれる要素を変更したりしても追従できないため、随時確認する必要があります。
おすすめは利用する外部サービスごとにサブドメインを作成して、それごとに SPF設定することです。
例えば、
example.com 通常のメールのやりとりを行うドメイン
mag.example.com メールマガジン等の情報発信
shop.example.com ECサイトから送信するドメイン
というように、サブドメインに分け、それぞれに必要な SPFレコードを記述すると、無理に参照先を展開することもなく、素直に設定できるかと思います。
参考情報
SPF(Sender Policy Framework)
DKIM (Domainkeys Identified Mail)
迷惑メール相談センター
送信ドメイン認証
COBOL系SE,PG から NetNews(nntp)配送管理者(tnn.netnews.stats集計担当) を経て現職。
社内業務改善(「やりたくない」がモチベーション)でいろいろ社内ツールを作ってきました。
ネットワーク系の機器をいじることも多いので、それらの管理や制御に関するツールもちらほら。
perlで書くことが多いですね。(COBOLやFORTRAN、Pascal でもいいですけど……)
どれだけ読みやすく書けるか、10年後の自分に手紙でも書くような気持ちで。
最近はDNSを少しかじったりしてますが、いろいろ悩ましいことが多すぎます (>_<)
好きなポート番号は53、119、123です。
LINK
クラウドベリージャム:プロフィールページ