Giới hạn tra cứu 10 DNS trong thông số SPF thường được thi hành?


24

Tôi hiểu rằng thông số SPF chỉ định người nhận email không cần phải thực hiện hơn 10 lần tra cứu DNS để thu thập tất cả các IP được phép cho người gửi. Vì vậy, nếu một bản ghi SPF có include:foo.com include:bar.com include:baz.comvà ba tên miền đó đều có bản ghi SPF cũng có 3 includemục nhập, thì bây giờ chúng tôi có tới 3 + 3 + 3 + 3 = 12 tra cứu DNS.

  1. sự hiểu biết của tôi ở trên có đúng không?

  2. Tôi chỉ sử dụng 2 hoặc 3 dịch vụ cho tên miền của mình và tôi đã vượt quá giới hạn này. Là giới hạn này thường (hoặc bao giờ) được thi hành bởi các nhà cung cấp email lớn / nhỏ?


3
RFC4408 s10.1 nói rằng "Việc triển khai SPF PHẢI giới hạn số lượng cơ chế và công cụ sửa đổi thực hiện tra cứu DNS tối đa 10 trên mỗi lần kiểm tra SPF ", nhưng đây là một hạn chế về số lượng cơ chế và công cụ sửa đổi làm ... tra cứu , không phải số lượng kiểm tra họ làm. Bạn có thể cho chúng tôi một ý tưởng rõ ràng hơn về cách bạn nghĩ rằng bản ghi SPF của bạn đang rơi vào giới hạn đó không?
MadHatter hỗ trợ Monica

@MadHatter cảm ơn bạn vì thông tin đó! tôi đã làm rõ câu hỏi của tôi.
John Bachir

Nó có khả năng thậm chí nhiều hơn 12 nếu bao gồm tham chiếu đến các bản ghi CNAME hoặc MX thay vì chỉ các địa chỉ IP. Trừ khi tôi hiểu nhầm những gì @ MadHatter đang đề cập đến.
Simon East

Câu trả lời:


29

Cả libspf2(C) và Mail::SPF::Query(perl, được sử dụng trong sendmail-spf-milter ) đều thực hiện giới hạn 10 cơ chế gây DNS , nhưng cơ chế sau không (AFAICT) áp dụng giới hạn MX hoặc PTR. libspf2giới hạn mỗi mxptr đến 10 cũng có.

Mail::SPF(perl) có giới hạn 10 cơ chế gây DNS và giới hạn 10 lần tra cứu trên mỗi cơ chế, trên mỗi MX và mỗi PTR. (Hai gói perl là phổ biến, mặc dù không theo mặc định, được sử dụng trong MIMEDefang .)

pyspfcó giới hạn 10 trên tất cả: "tra cứu", MX, PTR, CNAME; nhưng nó rõ ràng nhân MAX_LOOKUPS lên 4 trong khi hoạt động. Trừ khi ở chế độ "nghiêm ngặt", nó cũng nhân MAX_MX và MAX_PTR với 4.

Tôi không thể nhận xét về các triển khai thương mại / độc quyền, nhưng ở trên (ngoại trừ pyspf) rõ ràng thực hiện giới hạn trên của 10 cơ chế kích hoạt DNS (nhiều hơn ở bên dưới), cho hoặc nhận, mặc dù trong hầu hết các trường hợp, nó có thể bị ghi đè khi chạy thời gian.

Trong trường hợp cụ thể của bạn, bạn đã đúng, bao gồm 12 bao gồm và vượt quá giới hạn 10. Tôi hy vọng hầu hết các phần mềm SPF sẽ trả về "PermError", tuy nhiên , các lỗi sẽ chỉ ảnh hưởng đến (các) nhà cung cấp cuối cùng vì số lượng sẽ được tính dưới dạng tổng cộng đang chạy: Các cơ chế SPF được đánh giá từ trái sang phải và các kiểm tra sẽ "xuất hiện sớm" trên đường chuyền, do đó, nó phụ thuộc vào vị trí trong trình tự máy chủ gửi xuất hiện.

Các khoảng cách này là sử dụng cơ chế mà không làm kích hoạt tra cứu DNS, ví dụ ip4ip6, và sau đó sử dụng mxnếu có thể như đem đến cho bạn lên đến 10 tên hơn nữa, mỗi trong số đó có thể có nhiều hơn một IP.

Do SPF dẫn đến các yêu cầu DNS tùy ý với khả năng mở rộng theo cấp số nhân, nên nó có thể dễ dàng bị khai thác cho các cuộc tấn công khuếch đại / DOS. Nó đã cố tình giới hạn thấp để ngăn chặn điều này: nó không mở rộng quy mô theo cách bạn muốn.


10 cơ chế (cơ chế nghiêm ngặt + công cụ sửa đổi "chuyển hướng") gây ra tra cứu DNS không hoàn toàn giống với 10 tra cứu DNS. Ngay cả "tra cứu DNS" cũng được mở để giải thích, bạn không biết trước có bao nhiêu tra cứu rời rạc được yêu cầu và bạn không biết có bao nhiêu tra cứu rời rạc mà trình giải quyết đệ quy của bạn có thể cần thực hiện (xem bên dưới).

RFC 4408 §10.1 :

Việc triển khai SPF PHẢI giới hạn số lượng cơ chế và công cụ sửa đổi thực hiện tra cứu DNS tối đa 10 lần cho mỗi lần kiểm tra SPF, bao gồm mọi tra cứu do sử dụng cơ chế "bao gồm" hoặc công cụ sửa đổi "chuyển hướng". Nếu vượt quá số này trong khi kiểm tra, PermError PHẢI được trả lại. Các cơ chế "bao gồm", "a", "mx", "ptr" và "tồn tại" cũng như công cụ sửa đổi "chuyển hướng" được tính theo giới hạn này. Các cơ chế "tất cả", "ip4" và "ip6" không yêu cầu tra cứu DNS và do đó không được tính vào giới hạn này.

[...]

Khi đánh giá các cơ chế "mx" và "ptr" hoặc macro% {p}, PHẢI có giới hạn không quá 10 MX hoặc PTR RR được tra cứu và kiểm tra.

Vì vậy, bạn có thể sử dụng tối đa 10 cơ chế / công cụ sửa đổi để kích hoạt tra cứu DNS. (Từ ngữ ở đây rất kém: dường như chỉ nêu giới hạn trên của giới hạn, việc triển khai xác nhận có thể có giới hạn là 2.)

§5.4 cho cơ chế mx và §5.5 cho cơ chế ptr, mỗi cơ chế có giới hạn 10 lần tra cứu loại tên đó và chỉ áp dụng cho việc xử lý cơ chế đó, ví dụ:

Để ngăn chặn các cuộc tấn công từ chối dịch vụ (DoS), hơn 10 tên MX KHÔNG được tra cứu trong quá trình đánh giá cơ chế "mx" (xem Phần 10).

tức là bạn có thể có 10 cơ chế mx, với tối đa 10 tên MX, do đó, mỗi cơ chế có thể gây ra 20 hoạt động DNS (10 MX + 10 mỗi lần tra cứu DNS) với tổng số 200. Tương tự như ptr hoặc % {p} , bạn có thể tra cứu 10 cơ chế ptr , do đó các PTR 10 x 10, mỗi PTR cũng yêu cầu tra cứu A, tổng cộng là 200.

Đây chính xác là những gì bộ kiểm tra 2009.10 kiểm tra, xem các bài kiểm tra " Giới hạn xử lý ".

Không có giới hạn trên được nêu rõ ràng trên tổng số hoạt động tra cứu DNS của khách hàng trên mỗi lần kiểm tra SPF, tôi tính toán nó là ngầm định 210, cho hoặc nhận. Ngoài ra còn có một đề xuất để giới hạn khối lượng dữ liệu DNS trên mỗi lần kiểm tra SPF, mặc dù không có giới hạn thực tế nào được đề xuất. Bạn có thể có được ước tính sơ bộ vì các bản ghi SPF bị giới hạn ở 450 byte (được chia sẻ đáng buồn với tất cả các bản ghi TXT khác), nhưng tổng số có thể vượt quá 100kiB nếu bạn hào phóng. Cả hai giá trị này rõ ràng mở cho sự lạm dụng tiềm năng như một cuộc tấn công khuếch đại, đó chính xác là những gì §10.1 nói rằng bạn cần tránh.

Bằng chứng thực nghiệm cho thấy tổng cộng 10 cơ chế tra cứu thường được thực hiện trong hồ sơ (kiểm tra SPF cho microsoft.com, những người dường như đã đi đến một số độ dài để giữ cho chính xác đến 10). Thật khó để thu thập bằng chứng về sự thất bại của quá nhiều tra cứu vì mã lỗi được ủy quyền chỉ đơn giản là "PermError", bao gồm tất cả các vấn đề ( báo cáo DMARC có thể giúp giải quyết vấn đề đó).

Câu hỏi thường gặp về OpenSPF duy trì giới hạn của tổng số "10 lần tra cứu DNS", thay vì "10 cơ chế hoặc chuyển hướng gây ra DNS" chính xác hơn. Câu hỏi thường gặp này được cho là sai vì nó thực sự nói:

Vì có giới hạn 10 lần tra cứu DNS trên mỗi bản ghi SPF, chỉ định địa chỉ IP [...]

không đồng ý với RFC, áp đặt các giới hạn cho hoạt động "kiểm tra SPF", không giới hạn các hoạt động tra cứu DNS theo cách này và nêu rõ bản ghi SPF là một văn bản DNS RR duy nhất. Câu hỏi thường gặp sẽ ngụ ý rằng bạn khởi động lại số đếm khi bạn xử lý "bao gồm" vì đó là bản ghi SPF mới. Thật là một mớ hỗn độn.


Tra cứu DNS

"Tra cứu DNS" là gì? Là người dùng . Tôi sẽ xem xét " ping www.microsoft.com" liên quan đến một "tra cứu" DNS duy nhất: có một tên mà tôi dự kiến ​​sẽ biến thành một IP. Đơn giản? Đáng buồn là không.

Là một quản trị viên, tôi biết rằng www.microsoft.com có ​​thể không phải là một bản ghi đơn giản với một IP duy nhất, nó có thể là một CNAME mà đến lượt nó cần một tra cứu riêng biệt khác để có được một bản ghi A, mặc dù bộ giải quyết ngược dòng của tôi có thể sẽ thực hiện thay vì trình giải quyết trên máy tính để bàn của tôi. Hôm nay, đối với tôi, www.microsoft.com là một chuỗi gồm 3 CNAME cuối cùng kết thúc dưới dạng bản ghi A trên akamaiedge.net, đó là (ít nhất) 4 hoạt động truy vấn DNS cho ai đó. SPF có thể thấy CNAME với cơ chế "ptr", bản ghi MX không nên là CNAME.

Cuối cùng, với tư cách là người quản trị DNS, tôi biết rằng việc trả lời (gần như) bất kỳ câu hỏi nào liên quan đến nhiều hoạt động DNS riêng lẻ, câu hỏi riêng lẻ và giao dịch trả lời (datagram UDP) - giả sử bộ đệm trống, trình giải quyết đệ quy cần bắt đầu từ gốc DNS và hoạt động theo cách của nó xuống: .commicrosoft.comwww.microsoft.comyêu cầu các loại hồ sơ cụ thể (NS, A, v.v.) theo yêu cầu và xử lý các CNAME. Bạn có thể thấy điều này trong thực tế với dig +trace www.microsoft.com, mặc dù bạn có thể sẽ không nhận được câu trả lời chính xác tương tự do thủ thuật định vị địa lý (ví dụ ở đây ). .

Vì vậy, SPF coi như là một tra cứu? Nó thực sự gần nhất với quan điểm của quản trị viên , nó cần phải biết các chi tiết cụ thể của từng loại truy vấn DNS (nhưng không phải là điểm mà nó thực sự cần phải đếm các datagram hoặc kết nối DNS riêng lẻ).


Công cụ này cho bạn biết nếu bạn có hơn 10 lần tra cứu: tools.bevhost.com/spf
Gaia

bạn vui lòng cho tôi phiên bản ELI5 của bài viết của bạn chứ? Tôi nên có ít hơn 10 mục trong email ware.org/spf ? Trong tab DNS? Trong tab 'kết quả', tôi chỉ thấy 5 mục (mỗi mục có rất nhiều IP.
Gaia

2
Dưới đây là hai công cụ SPF khác có vẻ hữu ích: dmarcian.com/spf-survey - hiển thị thông báo lỗi màu đỏ sáng nếu SPF của bạn vượt quá 10 lần tra cứu. email ware.org/spf - nhấp vào tab DNS sau khi bạn nhận được báo cáo (nhưng bạn phải tự đếm chúng).
medmunds

Tôi vẫn còn bối rối. Bạn có thể cung cấp một ví dụ về cách "tra cứu" khác với "cơ chế" không? Hoặc là kết luận rằng nó không thực sự quan trọng - rằng bạn vẫn nên giữ trong vòng 10 lần tra cứu?
Simon East

1
@SimonEast đã thêm lời giải thích, SPF cần phải hiểu ý nghĩa của từng loại bản ghi DNS để có thể có được ước tính thô về "chi phí" DNS, mà không thực sự đếm tất cả các hạt.
mr.spuratic

11

RFC4408 s10.1 , như bạn đã lưu ý, đặt một số giới hạn cho hoạt động DNS. Đặc biệt:

Việc triển khai SPF PHẢI giới hạn số lượng cơ chế và công cụ sửa đổi thực hiện tra cứu DNS tối đa 10 lần cho mỗi lần kiểm tra SPF, bao gồm mọi tra cứu do sử dụng cơ chế "bao gồm" hoặc công cụ sửa đổi "chuyển hướng". Nếu vượt quá số này trong khi kiểm tra, PermError PHẢI được trả lại. Các cơ chế "bao gồm", "a", "mx", "ptr" và "tồn tại" cũng như công cụ sửa đổi "chuyển hướng" được tính theo giới hạn này. Các cơ chế "tất cả", "ip4" và "ip6" không yêu cầu tra cứu DNS và do đó không được tính vào giới hạn này. Công cụ sửa đổi "exp" không được tính vào giới hạn này vì việc tra cứu DNS để tìm nạp chuỗi giải thích xảy ra sau khi bản ghi SPF được đánh giá.

và hơn thế nữa

Khi đánh giá các cơ chế "mx" và "ptr" hoặc macro% {p}, PHẢI có giới hạn không quá 10 MX hoặc PTR RR được tra cứu và kiểm tra.

Lưu ý rằng trước đây là giới hạn về số lượng cơ chế , không phải số lần tra cứu được thực hiện; nhưng nó vẫn là một giới hạn

Theo như tôi có thể nói, vâng, những giới hạn này được thi hành khá khó khăn. Chúng được thiết kế để ngăn mọi người xây dựng các bản ghi SPF phức tạp tùy ý và sử dụng chúng cho các máy chủ DoS kiểm tra bản ghi của họ bằng cách tạm dừng chúng trong một chuỗi tìm kiếm DNS khổng lồ, vì vậy, đó là lợi ích tốt nhất của bất kỳ ai thực hiện trình kiểm tra SPF tôn vinh họ.

Bạn có quyền lưu ý rằng bao gồm lồng nhau có khả năng gây ra vấn đề lớn nhất với các giới hạn này và nếu bạn quyết định đưa vào một số tên miền, mỗi miền sử dụng bao gồm chính chúng, thì bạn có thể nhanh chóng vượt qua chúng. Không quá khó để tìm thấy những ví dụ về những người mà điều này đã tạo ra những vấn đề cụ thể .

Kết quả cuối cùng dường như là các vấn đề thường phát sinh khi mọi người quyết định sử dụng cả SPF một số công ty khác biệt và khác biệt để xử lý email gửi đi của họ. Tôi suy luận từ câu hỏi của bạn rằng bạn phù hợp với thể loại đó. SPF dường như không được thiết kế để phục vụ những người chọn làm điều này . Nếu bạn khăng khăng làm điều này, bạn có thể sẽ phải có một số loại công việc định kỳ trên máy chủ DNS của bạn liên tục đánh giá tất cả các bản ghi SPF mà bạn muốn đưa vào, biểu thị chúng như một chuỗi ip4:và các ip6:cơ chế (về số lượng không có giới hạn) và công bố lại kết quả dưới dạng bản ghi SPF của bạn.

Đừng quên kết thúc với một -allhoặc toàn bộ bài tập là vô nghĩa.


Công cụ của bạn bây giờ dường như không hoạt động, @ JánSáreník
Simon East

@SimonEast Tôi không thể làm gì khi người điều hành xóa bài đăng. spf-tools đã có trên github (cố gắng tìm kiếm spf-tools github), tôi là một trong những tác giả, nó là phần mềm miễn phí có nghĩa là trả lại cho cộng đồng mà tôi đã lấy rất nhiều và sẽ rất vui nếu nó giúp được ai khác. Tự quảng cáo họ gọi nó. Và không có không gian để thảo luận.

@ JánSáreník Ôi thật kỳ lạ, bây giờ MadHatter và những bình luận của tôi không có ý nghĩa gì ngoài bối cảnh. Hừm. À
Simon East

@SimonEast, xin lỗi vì đã xóa những bình luận đó. Tôi đã làm điều đó và không nhận ra nó sẽ làm cho các bình luận khác nhìn ra ngoài bối cảnh.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.