![使用 SPF 和 DMARC 记录来对抗无效的电子邮件子域名](https://linux22.com/image/752863/%E4%BD%BF%E7%94%A8%20SPF%20%E5%92%8C%20DMARC%20%E8%AE%B0%E5%BD%95%E6%9D%A5%E5%AF%B9%E6%8A%97%E6%97%A0%E6%95%88%E7%9A%84%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%AD%90%E5%9F%9F%E5%90%8D.png)
我已经能够确认恶意行为者正在从我公司主域中不存在的子域发送电子邮件。
假设我的主域名是 foo.com。电子邮件从我自己的邮件系统从该基本域名发送。由于与帮助台提供商、电子商务(店面)公司和 CX/NPS 提供商建立了合作关系,我还拥有三个有效的唯一子域名,每个子域名的电子邮件都来自这些子域名(shop.foo.com、support.foo.com 和 feedback.foo.com)。
我为所有 4 个子域都配备了带 DKIM 的完整 DMARC。在 DMARCian(DMARC 报告聚合和报告服务)的大力协助下,我确认有多个来自其他子域的重复电子邮件来源 - 这些子域并不存在。例如,VN 中一些未经授权的未知实体正在从 news.foo.com 和 enews.foo.com 发送电子邮件。另一个来源是从 sales.foo.com 发送电子邮件。最后一个尤其令人担忧,因为我们转发的来自这个坏人的几封电子邮件的内容对我的公司造成了相当大的损害(我们认为它背后是我们激烈的利基市场的外国竞争对手)。
不幸的是,我当前的 DMARC 策略要么是监控,要么是隔离;我不能使用拒绝策略(那是另一场战斗。)
我正在考虑为这些不存在的子域创建 SFP 和 DMARC 记录,并且不允许发件人并采用拒绝策略。
不过,我不确定这会有多有效。我也想不出有什么缺点,除了当坏人开始使用不同的虚假子域名时,需要额外做一些工作来设置和维护它。我们总是比坏人落后一步,不是吗?
那么...我考虑做的事情是否有我之前没有想到的缺点?你认为这值得付出努力吗?或者有更好的方法来处理这些虚假子域名?
答案1
这里的主要问题是,打击电子邮件伪造是发件人和收件人的共同责任。如果收件人接受来自不存在的主机名的邮件,他们很可能也不会检查 SPF、DKIM 或 DMARC。此外,如果需要,添加这些记录的路径将是无穷无尽的。
DMARC
你声称你有完整 DMARC,但p=none
甚至p=quarantine
没有完全执行 DMARC 策略。如果您无法为您的域应用严格的策略,但可以对子域应用,则标签sp
(RFC 7489, 6.3)可能会对你有帮助。
sp
:请求所有子域的邮件接收方策略(纯文本;可选)。表示接收方应域所有者的请求制定的策略。它仅适用于查询域的子域,而不适用于域本身。其语法与p
上面定义的标签相同。如果不存在,则必须将标签指定的策略p
应用于子域。请注意,sp
由于 DMARC 策略发现机制的影响,组织域子域上发布的 DMARC 记录将被忽略第 6.6.3 节。
正如你所说,你已为所有发送邮件的子域设置了 DKIM,你的策略可以是
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; sp=reject;"
如果您有一些用于发送邮件的子域,但不能使用reject
,则可以使用sp=reject
针对子域的明确不太严格的策略覆盖:
_dmarc.no-dkim.example.com. IN TXT "v=DMARC1; p=quarantine;"
防晒指数
假设收件人不会接受来自不存在的主机名的电子邮件,这是理所当然的。由于 SPF 不像 DMARC 那样具有继承性,因此您需要TXT
为每条现有A
记录设置相应的 SPF 记录。如果您根本不打算发送邮件sub.example.com
,则应:
sub.example.com. IN TXT "v=spf1 -all"
或者,如果主机本身可以从以下位置发送邮件@sub.example.com
:
sub.example.com. IN TXT "v=spf1 +a -all"
答案2
你可以设置 SPF-全部和 DMARC拒绝针对已识别的虚假子域名制定策略,以防止欺骗性电子邮件到达那些检查 SPF/DMARC 的 ESP 邮箱。但这不是一个长期的解决方案。
如果可能的话,将整个域移至拒绝状态是有意义的。我完全理解这一挑战,因为我自己在 DMARC 领域已经工作了 4 年多。我能以某种方式提供帮助吗?
顺便说一句,这里有一个很好的工具,可以帮助你检查不同的 ESP 如何处理来自受 DMARC 保护的域的欺骗电子邮件拒绝->https://dmarc-tester.com。
例如,微软将欺骗性的电子邮件放入垃圾邮件中,而 Yandex 不支持 DMARC,因此将它们放入收件箱中
答案3
您可以p=quarantine;sp=reject
为付费域名(DMARC 称之为组织域),然后p=quarantine
为您想要发送邮件的子域创建单独的记录。
sp=reject
表示s子域名页政策拒绝邮件对齐SPF 或 DKIM。它会被精确子域 FQDN 的任何 DMARC 记录覆盖,因此需要上面提到的单独记录。
正如您所建议的,您也可以p=reject
为 DMARC 报告中列出的每个观察到的无效域创建 DMARC 记录,尽管这可能感觉像打地鼠如果这些虚假主机名定期更改。
附注:SPF 授权(或 DKIM 验证)仅用于启用某些功能经过DMARC。如果您只想拒绝所有内容,则不需要 SPF 或 DKIM:
没有 SPF 或 DKIM 的域名将始终触发其 DMARC 策略。
答案4
在更普遍的情况下,如果您有任意子域需要发送 DMARC 有效的邮件,尽管有其他任意子域的滥用(无论它们是否存在),您可以使用SMTP 智能主机DKIM 签名发送的邮件。使用轻松DMARC结盟From
,带有使用相关域(或任何子域)的标头的邮件将被 DMARC 阻止,除非它由此智能主机或其他 DKIM 或 SPF 设置签名。
您的目标是拥有如下 DMARC 记录*:
v=DMARC1;p=reject;sp=reject;adkim=r;[email protected];
* 请注意,您不能从reject
策略开始!您必须从p=none;sp=none
或开始p=quarantine;sp=quarantine
,并查看发送到该地址的报告rua=
,以确保您没有阻止合法邮件。
sp=reject
(这是暗示的,p=reject
但我们为了清晰起见明确说明)确保s子域名页reject
除非该子域名具有自己的 DMARC 记录,否则policy 默认为。
adkim=r
(这是默认设置,但为了清晰起见,这里再次明确提出)确保匹配A为…对齐密钥管理信息系统可r宽松(按付费级别域名匹配就足够了;请参阅上面的链接了解宽松的对齐方式)。
建立一个专用的邮件中继,所有子域邮件都必须通过该中继。该邮件中继必须验证其用户的身份,以避免开放中继问题。它还提供了在不同的DKIM 选择器基于每个帐户,您可以控制具有适当隔离的多个付费级别域名。
由于所有有效子域都独立地传递 DMARC 或通过对齐的 DKIM 签名智能主机发送邮件,因此您可以安全地升级到p=reject;sp=reject
,但在进行更改之前,您必须观察 DMARC 报告一段时间。