SPF仕様の10-DNS-lookup制限は通常強制されますか?


24

私の理解では、SPF仕様では、送信者に許可されたすべてのIPを収集するために、10を超えるDNSルックアップを行う必要がない電子メール受信者が指定されているということです。したがって、SPFレコードにinclude:foo.com include:bar.com include:baz.com3つのドメインがあり、それぞれに3つのincludeエントリがあるSPFレコードがある場合、最大3 + 3 + 3 + 3 = 12 DNSルックアップになります。

  1. 上記の私の理解は正しいですか?

  2. 私は自分のドメインで2つまたは3つのサービスのみを使用しており、すでにこの制限をかなり超えています。この制限は、通常(またはこれまでに)メジャー/マイナーメールプロバイダーによって実施されていますか?


3
RFC4408 s10.1は、「SPF実装は、DNSルックアップを行うメカニズムと修飾子の数をSPFチェックごとに最大10に制限しなければならない」と述べていますが、これは、...ルックアップではなく、メカニズムと修飾子の数の制限です彼らが行うチェックの数。SPFレコードがその制限に反していると思う方法について、より明確なアイデアを教えてください。
MadHatterは

@MadHatterその情報をありがとう!質問を明確にしました。
ジョンバチル14年

インクルードが単なるIPアドレスではなくCNAMEまたはMXレコードを参照する場合、潜在的に12を超える可能性があります。@MadHatterが言及していることを誤解しない限り。
サイモンイースト

回答:


29

libspf2(C)とMail::SPF::Query(perl、sendmail-spf-milterで使用)の両方で、10のDNS発生メカニズムの制限が実装されますが、後者はMXまたはPTR制限を適用しません(AFAICT)。mxptrlibspf2それぞれ10に制限します。

Mail::SPF(perl)には、DNSを引き起こすメカニズムが10個、メカニズムごと、MXごと、PTRごとに10ルックアップの制限があります。(2つのperlパッケージは、デフォルトではありませんが、一般的にMIMEDefangで使用されます。)

pyspf「ルックアップ」、MX、PTR、CNAMEのすべてに10の制限があります。ただし、操作中にMAX_LOOKUPSを明示的に4倍します。「strict」モードでない限り、MAX_MXとMAX_PTRを4倍にします。

商用/専有の実装についてコメントすることはできませんが、上記(を除くpyspf)は10のDNSトリガーメカニズム(以下で詳細)の上限を明確に実装します。時間。

それが12含まれており、私は「PermErrorという」を返すために最もSPFソフトウェアを期待する10の限界を超えたということです、あなたが正しい、あなたの特定のケースでは、しかし、失敗は最終的に影響を与えますプロバイダ(複数可)「が含ま」カウント理由SPF メカニズムは左から右に評価され、チェックはパスで「早期に」行われるため、送信サーバーが表示される順序によって異なります。

これを回避する方法は、DNSルックアップをトリガーしないメカニズム(例:ip4ip6)を使用しmx、可能であれば最大10個の名前を取得し、それぞれが複数のIPを持つことができるようにすることです。

SPFは指数関数的なスケーリングの可能性がある任意のDNS要求をもたらすため、DOS /増幅攻撃に簡単に悪用される可能性があります。これを防ぐために、意図的に低い制限があります:必要な方法でスケーリングしません。


ただし DNSルックアップを引き起こす 10のメカニズム(厳密なメカニズム+「リダイレクト」修飾子)は、10のDNSルックアップとまったく同じではありません。「DNSルックアップ」でも解釈が可能です。必要な個別のルックアップの数が事前にわからず、再帰リゾルバーが実行する必要のある個別のルックアップの数もわかりません(以下を参照)。

RFC 4408§10.1

SPF実装では、DNSルックアップを行うメカニズムと修飾子の数を、SPFチェックごとに最大10に制限する必要があります。これには、「include」メカニズムまたは「redirect」修飾子の使用に起因するルックアップが含まれます。チェック中にこの数を超えると、PermErrorが返されなければなりません。「include」、「a」、「mx」、「ptr」、および「exists」メカニズム、および「redirect」修飾子は、この制限に対してカウントされます。「all」、「ip4」、および「ip6」メカニズムはDNSルックアップを必要としないため、この制限にカウントされません。

[...]

「mx」および「ptr」メカニズム、または%{p}マクロを評価する場合、検索およびチェックされるMXまたはPTR RRの上限は10以下でなければなりません。

したがって、DNSルックアップをトリガーする最大10のメカニズム/修飾子を使用できます。(ここでの表現は貧弱です:制限の上限のみを述べているようで、確認実装には2の制限があります。)

mxメカニズムの場合は5.4 、ptrメカニズムの場合は§5.5にはそれぞれ、その種類の名前の10回のルックアップの制限があり、そのメカニズムの処理にのみ適用されます。例:

サービス拒否(DoS)攻撃を防ぐために、「mx」メカニズムの評価中に10個を超えるMX名を検索してはなりません(セクション10を参照)。

つまり、最大10 MX名の10 mxメカニズムがあり、それぞれが20のDNS操作(それぞれ10 MX + 10 A DNSルックアップ)を合計200発生させる可能性があります。ptrまたは%{p}についても同様です。 10のルックアップすることができるPTRの 10×10 PTRSしたがって、メカニズムを、各PTRも再びAルックアップ、200の合計を必要とします。

これは、2009.10テストスイートがチェックするものです。「処理制限」テストを参照してください。

SPFチェックごとのクライアントDNSルックアップ操作の総数に明確に記載された上限はありません。暗黙的に210、ギブまたはテイクとして計算します。また、SPFチェックごとのDNSデータの量を制限する提案もありますが、実際の制限は提案されていません。SPFレコードは450バイトに制限されているため(おおよそ他のすべてのTXTレコードと共有されています)、大まかな見積もりを取得できますが、寛大な場合は合計が100kiBを超える可能性があります。どちらの値も増幅攻撃として悪用される可能性があることは明らかです。これはまさに、10.1で回避する必要があると言われていることです。

合計 10個のルックアップメカニズムがレコードに一般的に実装されていることが経験的に証明されています(microsoft.comのSPFを確認してください。必須のエラーコードは単に「PermError」であり、あらゆる種類の問題をカバーしているため、あまりにも多くのルックアップエラーの証拠を収集するのは困難です(DMARCレポートがそれを助けるかもしれません)。

OpenSPF FAQ は、より正確な「10 DNSがメカニズムまたはリダイレクトを引き起こす」のではなく、合計「10 DNSルックアップ」の制限永続化します。このFAQは、実際には次のように書かれているため、間違いです。

SPFレコードごとに10個のDNSルックアップの制限があるため、IPアドレスを指定する[...]

これは、「SPFチェック」操作に制限を課し、この方法でDNSルックアップ操作を制限せず、SPFレコードが単一のDNSテキストRR であることを明確に示すRFCと一致しません。FAQは、新しいSPFレコードである「include」を処理するときにカウントを再開することを意味します。なんて混乱だ。


DNSルックアップ

とにかく「DNSルックアップ」とは何ですか?ユーザーとして。「ping www.microsoft.com」は単一のDNS「ルックアップ」を含むと考えます。1つのIPに変換する予定の名前が1つあります。シンプル?悲しいことではありません。

管理者として、www.microsoft.comは単一のIPを持つ単純なAレコードではないかもしれないことを知っています。これは、CNAMEである可能性があります。デスクトップ上のリゾルバではなく。今日、私にとって、www.microsoft.comは3つのCNAMEのチェーンであり、最終的にakamaiedge.netのAレコードになります。これは(少なくとも)誰かのための4つのDNSクエリ操作です。SPFは「ptr」メカニズムでCNAMEを参照する場合がありますが、MXレコードはCNAMEであってはなりません。

最後に、DNS管理者として、(ほぼ)すべての質問に答えるには、多くの個別のDNS操作、個々の質問と回答トランザクション(UDPデータグラム)が関係することを知っています。ダウン:.com→はmicrosoft.comwww.microsoft.com必要に応じて、レコード(NS、Aなど)の特定の種類を求め、そしてのCNAMEを扱います。を使用するとdig +trace www.microsoft.com、これを実際に見ることができますが、おそらくジオロケーションのトリック(ここの例)のためにまったく同じ答えは得られません。(TXTレコードのSPFピギーバックとDNS回答の512バイトという古い制限により、TCPを介したクエリの再試行が行われる可能性があるため、この複雑さにはもう少し多くあります。)

では、SPFはルックアップとして何を考慮しますか?管理者の視点に最も近いので、各タイプのDNSクエリの詳細に注意する必要があります(ただし、個々のDNSデータグラムまたは接続を実際にカウントする必要がある点に注意する必要はありません)。


このツールを使用すると、10個を超えるルックアップがあるかどうかを確認できます。tools.bevhost.com
Gaia

投稿のELI5バージョンを教えてください。emailstuff.org/spfで10個未満のエントリはどこにあるべきですか?[DNS]タブで?「結果」タブでは、私は唯一のIPアドレスの多い5つのエントリ(それぞれを参照してください。
ガイア

2
役立つと思われるさらに2つのSPFツールを次に示します。dmarcian.com / spf - survey -SPFが10回のルックアップを超えると、真っ赤なエラーメッセージを表示します。emailstuff.org/spf-レポートを取得したら、[DNS]タブをクリックします(ただし、自分でカウントする必要があります)。
medmunds

私はまだ混乱しています。「ルックアップ」が「メカニズム」とどのように異なるかの例を提供していただけますか?それとも、それは本当に重要ではないという結論ですか?それでも、10回以内のルックアップを維持する必要がありますか?
サイモンイースト

1
@SimonEastは説明を追加し、SPFは実際にすべてのBeanをカウントせずにDNSの「コスト」の大まかな見積もりを取得できるように、各タイプのDNSレコードの意味を理解する必要があります。
ミスタースプラティック

11

RFC4408 s10.1は、既に述べたように、DNSアクティビティにいくつかの制限を設けています。具体的には:

SPF実装では、DNSルックアップを行うメカニズムと修飾子の数を、SPFチェックごとに最大10に制限する必要があります。これには、「include」メカニズムまたは「redirect」修飾子の使用に起因するルックアップが含まれます。チェック中にこの数を超えると、PermErrorが返されなければなりません。「include」、「a」、「mx」、「ptr」、および「exists」メカニズム、および「redirect」修飾子は、この制限に対してカウントされます。「all」、「ip4」、および「ip6」メカニズムはDNSルックアップを必要としないため、この制限にカウントされません。「exp」修飾子は、SPFレコードが評価された後に説明文字列をフェッチするDNSルックアップが発生するため、この制限に対してカウントされません。

そして更に

「mx」および「ptr」メカニズム、または%{p}マクロを評価する場合、検索およびチェックされるMXまたはPTR RRの上限は10以下でなければなりません。

前者は、実行されるルックアップの数ではなく、メカニズムの数の制限であることに注意してください。しかし、それはまだ制限です。

私が知る限り、はい、これらの制限はかなり厳しく強制されています。それらは、任意の複雑なSPFレコードを構築し、DNSルックアップの巨大なチェーンでそれらを停止することによってレコードをチェックするDoSサーバーにそれらを使用することを止めるように設計されているため、SPFチェッカーを実装するすべての人の利益にそれらを尊重します。

ネストされたインクルードはこれらの制限で最大の問題を引き起こす可能性が高いことに注意してください。それぞれがインクルードを頻繁に使用する複数のドメインをインクルードすることに決めた場合は、それらをかなりすばやく調べることができます。これが具体的な問題を生み出した人々の例を見つけることはそれほど難しくありません。

結論としては、一般に SPF いくつかの異なる企業の両方を使用して送信メールを処理しようとすると問題が発生するようです。あなたの質問から、あなたはそのカテゴリーに当てはまると思います。 SPFは、これを行うことを選択したユーザーにサービスを提供するようには設計されていないようです。あなたがこれを行うことを主張した場合、あなたはおそらく常に、すべてのSPFは、あなたが含まれるように望んでいるだろう記録し評価し、一連のとしてそれらを発現することをお使いのDNSサーバー上のcronジョブのいくつかの種類を持っている必要がありますip4:し、ip6:数の上(メカニズム制限はありません)、結果をSPFレコードとして再公開します。

で終了することを忘れないでください-all、または全体の練習は無意味でした。


あなたのツールは、ダウンしていると思われるJánSáreník@
サイモン東

@SimonEastモデレーターが投稿を削除したときにできることは何もありません。spf-toolsはgithubにあります(検索してみてくださいspf-tools github)。私は著者の1人です。これは、私が多くの人から得たコミュニティに還元することを目的としたフリーソフトウェアであり、他の人の助けになれば幸いです。セルフプロモーションと呼ばれます。そして、議論の余地はありません。

@JánSáreníkなんて奇妙なのか、今ではMadHatterと私のコメントは文脈からは意味をなさない。うーん。まぁ。
サイモンイースト

@SimonEast、コメントを削除してすみません。私はそれをやったが、それが他のコメントが文脈から外れるようになるとは知らなかった。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.