SPFレコードのルックアップ回数をなんとかする
会社のドメインのDNSレコードを弄る機会があり、ついでに正常性をチェックしてみたらSPFレコードのルックアップ回数が多すぎると怒られたので、整理してエラーを取り除きました。
DNSはたまーに触る機会があるくらいで、しかもこれまではSPFレコードで引っかかった事がなかったので、またやるときに備えてメモしておきます。
SPFレコード周りで怒られる
Google Admin Toolbox Check MXで自社ドメインをチェックしたところ、SPFレコードの部分でエラーが表示されていました。
内容を確認してみると、設定されているSPFレコードのルックアップの回数数が多すぎるとのこと。なるほど。
SPFレコードの仕様について確認する
そもそも何故ルックアップ回数が多いと怒られるのか、まずそれが分からないので少し調べてみることにしました。調べた中だとこちらのサイトがわかりやすく書いてあって、下記のような仕様があるとのこと。
ルックアップの回数というのは平たく言うと上記の制限対象である「a」「mx」「include」「redirect」の合計出現回数ということになるでしょうか。
またincludeは更にinclude内包している場合があり、内包している分も含めて一つのSPFレコードで11個以上include等が出現したらアウト、ということのようです。
削除して大丈夫なのか?
でも必要だからSPFレコードに書いているわけで、これらを整理するのは無理なのでは?と思ったのですが、どうやらincludeの中身が別のレコードの中身と重複する事があるらしく、重複している内容は取り除いてもいいらしいです。
であれば、重複が無いか確認してなんとか整理できないか。SPFレコードの状態をDMARCLYで確認しながら検討します。
SPFレコードを整理する
設定状況を確認する中でまず見つけたのが「include:_spf.firebasemail.com」というincludeで、
include:_spf.firebasemail.com
include:sendgrid.net
include:_spf.google.com
という形でネストになっていたのですが、内包している2つのincludeは別途記述があったので、「include:_spf.firebasemail.com」の記述自体を削除しました。
この状態で再度チェックをしてみると、ルックアップの回数を20→13まで一気に減らすことに成功。でも最高で10個までなので、エラーを取り除くにはあと3つ減らす必要があります。
もう消せるものがない
ただ、もう重複しているincludeが存在しないため、これ以上は減らせなさそうです。使っていない物があればそれを消して終わりというのもできますが、恐らく全部使っているので削除もできません。確認も面倒くさいし。
ここで、もう一つのアプローチとして、includeの平坦化を検討することにしました。要はincludeの中身を取り出すこと。includeが内包しているIPを、includeを使わずに直でSPFレコードに書いてしまえ、という話です。
ただこれには一つ問題があって、includeでドメイン指定をすることで間接的に内包するIPを指定しているようなので、これをIPベタ書きに変更した場合、今後サービスのIPが変更になったらそれに合わせてSPFレコードを書き換えなければならないというデメリットがあります。たぶん。
トップレベルをのincludeだけ削除する
それはちょっと勇気いるなあと思いながら、なんとかならないかとSPFレコードを眺めていてふと気づいたのが、トップレベルのincludeの直下にIPは含まずincludeだけになっているものを、トップレベルのincludeから取り出して書いてやれば良いのではないかということ。
例えばXサーバーのSPFレコード「include:spf.sender.xserver.jp」は下記のような構成になっています。
この構成であれば、トップレベルの「include:spf.sender.xserver.jp」自体は削除してしまって、内包する2つのincludeを直書きしてしまっても良いはずです。
ただこれも「include:spf.sender.xserver.jp」に何らかの変更が加わった場合に影響が出る可能性があります。が、IPを取り出すよりは遥かに安全のはずです。
とりあえずエラーは取り除いた
とりあえず、この対処方法でルックアップの回数をなんとか10まで減らすことに成功しました。が、これ以上増やせないしいつか不具合でないとも限らないので、メールを送る要件が出てきたら次からはサブドメイン作ってそっちで運用してもらうようにしたいと思います。
この記事が気に入ったらサポートをしてみませんか?