DNS MX 記錄和 SMTP 伺服器
我有一個 SMTP 伺服器。DKIM 已設置並正常工作,並且還設置了 SPF。
SMTP 主機是
smtp.domain.com
在 DNS 上,我有一個
smtp
指向 IPv4 的 A 記錄和一個smtp
指向 IPv6 的 AAAA 記錄。關於 MX 記錄,我有一個用於 IMAP 伺服器的 MX 記錄 target
smtp
一切都與 SPF 和 DKIM 完美配合
然後有一天,我認為
smtp
不需要帶有目標的 MX 記錄 - 所以我刪除了它。但後來我的 SPF 身份驗證停止工作SMTP 真的需要 MX 還是我做錯了什麼?
smtp IN A 192.0.2.2 smtp IN AAAA 2001:DB8::2 @ IN TXT "v=spf1 a mx -all" @ IN MX 10 mail @ IN MX 11 smtp <--- If this record is deleted SPF auth fails
您的 SPF 記錄指定了兩種機制,並且郵件的源 IP 必須至少匹配其中一種:
- 域的
A
記錄(在本例中為頂點,因為您在 之後沒有指定任何內容a
)和/或- 其中一條
MX
記錄必須解析為源 IP。假設
smtp
解析到不同的 IP 地址,刪除MX
記錄smtp
意味著它不再滿足mx
機制。
SPF 沒有繼承,這對您的設置意味著兩個不同的事情。
首先,SPF 記錄允許或拒絕 IP 地址和 CIDR 子網,因此除了
ip4
和ip6
機制(和all
)之外的所有內容實際上都是對其他 DNS 記錄的引用。
- 沒有and/or的
a
機制(RFC 7208, 5.3 )指的是目標的 IP 地址(和記錄)。:<domain>``/<prefix-length>``A``AAAA
- 沒有and/or的
mx
機制 ( RFC 7208, 5.4 )指的是記錄的 IP 地址,例如=> & 。:<domain>``/<prefix-length>``MX``MX 11 smtp.example.com.``A 192.0.2.2``AAAA 2001:DB8::2
對於兩者,
example.com
是example.com
,不是*.example.com
。這種繼承也是不可能的,因為它需要無限量的額外 DNS 查詢。應盡可能避免使用除ip4
/以外的任何ip6
機制以最小化 DNS 上的負載,因此,還有 10 個查詢的硬 DNS 查找限制,之後 SPF 實現必須返回permerror
(RFC 7208, 4.6.4)。**TL;DR:直接用相應的and替換所有
a
andmx``ip4``ip6
**機制,例如example.com. IN TXT "v=spf1 +ip4:192.0.2.2 +ip6:2001:DB8::2 -all"
此外,沒有從
example.com
to繼承sub.example.com
。這意味著 SPF 記錄example.com
不保護具有A
記錄的子域。因此,對於每條A
記錄,您都需要一個額外的 SPF 記錄,否則有人可以user@smtp.example.com
用作信封發件人。
- 如果您想將主機名本身用作信封發件人:
smtp.example.com. IN TXT "v=spf1 +ip4:192.0.2.2 +ip6:2001:DB8::2 -all"
- 或者,如果您不需要它:
smtp.example.com. IN TXT "v=spf1 -all"
讓我們擴展您的配置以獲得更好的範例,並刪除不必要的
MX
記錄,假設smtp.example.com
專用於出站郵件。在這裡,A
域頂點的 也指向 Web 伺服器:mail IN A 192.0.2.1 mail IN AAAA 2001:DB8::1 smtp IN A 192.0.2.2 smtp IN AAAA 2001:DB8::2 www IN A 192.0.2.3 www IN AAAA 2001:DB8::3 @ IN A 192.0.2.3 @ IN AAAA 2001:DB8::3 @ IN MX 10 mail.example.com.
讓我們添加 SPF 記錄,每個主機都可以在其中發送郵件
example.com
:@ IN TXT "v=spf1 +ip4:192.0.2.0/30 +ip6:2001:DB8::0/126 -all" mail IN TXT "v=spf1 +ip4:192.0.2.1 +ip6:2001:DB8::1 -all" smtp IN TXT "v=spf1 +ip4:192.0.2.2 +ip6:2001:DB8::2 -all" www IN TXT "v=spf1 +ip4:192.0.2.3 +ip6:2001:DB8::3 -all"