垃圾邮件过滤器如何工作
每封电子邮件都要通过的过滤管道——从连接时检查到机器学习分类器——以及主要提供商如何决定什么内容到达收件箱。
过滤管道
垃圾邮件过滤不是单一检查。它是一个多阶段的管道,在SMTP事务的每个阶段和传送后对邮件进行评估。每个阶段都可以拒绝、延迟或标记邮件。阶段大致按以下顺序进行:
- 连接时检查 — IP信誉、黑名单、速率限制
- 信封检查 — 发件人验证、收件人验证
- 身份验证检查 — SPF、DKIM、DMARC评估
- 邮件头分析 — 结构验证、一致性检查
- 内容分析 — 正文扫描、URL检查、附件检查
- 信誉评分 — 发件人信誉与所有信号加权对比
- 机器学习分类 — 贝叶斯和神经网络模型
- 传送后信号 — 参与度、用户操作、投诉反馈
Gmail和Outlook等提供商的现代垃圾邮件过滤器并行运行其中大多数,生成复合得分以确定收件箱放置。但将它们理解为管道有助于解释每一层如何贡献。
阶段1:连接时检查
在发送任何电子邮件内容之前,接收服务器会评估连接的IP地址。
-
黑名单查询:服务器根据DNS黑名单(DNSBLs)检查IP地址,如Spamhaus SBL/XBL、Barracuda BRBL和SpamCop。Spamhaus上的列表可能会导致立即拒绝,返回
550响应。 - IP信誉缓存:大型提供商维护自己的内部信誉数据库。具有在该提供商发送垃圾邮件历史的IP可能被拒绝或限制,无论外部黑名单状态如何。
- 反向DNS(FCrDNS):服务器检查连接的IP是否具有有效的PTR记录,以及该PTR记录是否解析回同一IP(正向确认反向DNS)。没有有效rDNS的服务器通常被直接拒绝。
-
速率限制:来自IP的异常流量会触发限制。服务器响应
421(稍后重试)来减慢发件人的速度。
550 5.7.1 Service unavailable; client [198.51.100.42] blocked
using zen.spamhaus.org
连接时检查是最具成本效益的过滤器。在连接时拒绝可以避免服务器处理整个邮件。
阶段2:信封检查
在SMTP信封阶段(MAIL FROM和RCPT TO)中,会运行额外检查:
- 发件人存在:某些服务器执行回拨验证,连接到发件人的MX以检查MAIL FROM地址是否真的存在。这可以捕获伪造的退回地址。
-
收件人验证:不存在的收件人会立即被拒绝(
550 5.1.1 User unknown)。单个发件人的无效收件人高率会触发限制或阻止。 -
灰名单:服务器临时拒绝(
450)来自未知发件人/IP/收件人组合的第一次传送尝试。合法服务器会在几分钟后重试;许多垃圾邮件工具不会。
阶段3:身份验证检查
邮件内容到达后,服务器评估电子邮件身份验证:
身份验证结果记录在Authentication-Results邮件头中:
dkim=pass header.i=@example.com header.s=mtg;
spf=pass (google.com: 198.51.100.42 is permitted) smtp.mailfrom=example.com;
dmarc=pass (p=REJECT) header.from=example.com
身份验证是前提条件,不是保证。通过SPF、DKIM和DMARC并不意味着您的邮件到达收件箱。垃圾邮件发送者也可以设置有效的身份验证。但未能通过身份验证是一个很强的负面信号,几乎肯定会将您的邮件路由到垃圾邮件或拒绝。
阶段4:邮件头分析
垃圾邮件过滤器检查邮件头是否有异常:
- From:/Reply-To:不匹配:From:和Reply-To:中的不同域可能表示网络钓鱼。
-
缺失或格式错误的邮件头:缺失
Date:或Message-ID:邮件头表明邮件是由粗糙的垃圾邮件软件生成,而不是合法的邮件客户端。 - Received:链分析:Received:邮件头的序列应该讲述邮件如何传输的连贯故事。伪造的Received:邮件头或不可能的时间戳是红旗。
- 过多收件人:To:邮件头中有数百个地址,或Bcc-heavy发送模式,是大量未经请求邮件的特征。
- 邮件头注入:邮件头值中的换行符或异常字符可能表示试图进行邮件头注入攻击。
阶段5:内容分析
内容分析检查邮件正文、HTML结构和附件。
文本和HTML分析
- 关键词和短语评分:某些短语("立即行动"、"时间有限"、"点击此处")有助于提高垃圾邮件得分。没有单一短语触发过滤——这是多个信号的积累。
- HTML到文本比率:完全由图像组成且几乎没有文本的电子邮件是可疑的。可见文本很少、隐藏文本很大的邮件也是。
-
隐藏文本:白色背景上的白色文本、零像素字体或CSS
display:none内容是过滤器专门检测的经典垃圾邮件技术。 - 仅图像邮件:仅由一张大图像且无文本组成的邮件在历史上被用来规避基于文本的过滤器。现代过滤器标记此模式。
- 混淆:使用字符替换("fr33"、"v1agra")、Unicode外观相似的字符或Base64编码内容来隐藏垃圾邮件关键词。过滤器在分析前解码并规范化内容。
URL和链接分析
- URL黑名单:针对URIBL、SURBL、Google安全浏览和提供商特定数据库检查链接。单个指向已知不良域的链接可能导致整个邮件被标记。
- URL缩短器:缩短的URL(bit.ly、tinyurl)被解析到其最终目标并检查。过度使用URL缩短器本身是负面信号。
- 链接文本不匹配:说"www.bank.com"但链接到"evil.example.com"的锚标记是网络钓鱼信号。
- 链接太多:包含指向不同域的数十个链接的电子邮件表明是垃圾邮件或联盟营销消息。
- 新注册域名:指向过去几天内注册的域名的链接是可疑的。
附件分析
-
可执行文件:
.exe、.scr、.bat和类似的可执行附件几乎总是被阻止或隔离。 -
受密码保护的档案:带密码的
.zip文件会阻止扫描,被视为可疑。 -
启用宏的文档:
.docm、.xlsm文件是常见的恶意软件向量。 -
文件类型不匹配:扩展名为
.pdf但二进制标头中包含可执行内容的文件被标记。
阶段6:信誉评分
上述所有信号都输入到信誉模型中。这是IP和域信誉影响最大的地方。
信誉充当倍增器。具有优秀信誉的发件人获得怀疑的好处——边界线内容被传送到收件箱。信誉差的发件人得不到怀疑的好处——即使是干净内容也可能被过滤。这就是为什么信誉通常比内容更重要。
提供商对信号的权衡不同:
- Gmail强调域信誉和用户参与度。Google Postmaster Tools将域信誉分为四个级别:高、中、低和坏。
- Outlook.com大量权衡IP信誉,依赖来自投票者用户面板的发件人信誉数据(SRD),这些用户将邮件评为垃圾或非垃圾。
- Yahoo使用IP和域信誉的组合,对来自其反馈循环计划的投诉率给予重大权重。
阶段7:机器学习分类
现代垃圾邮件过滤器使用在数十亿条邮件上训练的机器学习模型。
贝叶斯过滤
基础技术。贝叶斯过滤器根据其单词(词元)在已知垃圾邮件与已知合法邮件语料库中的频率计算邮件是垃圾邮件的概率。如果单词"invoice"在80%的合法邮件和5%的垃圾邮件中出现,这是强的合法信号。如果"unsubscribe"与"恭喜!您赢了!"出现在一起,组合概率会向垃圾邮件转变。
贝叶斯过滤器是自适应的——它们从新邮件中学习。当用户将邮件标记为垃圾邮件时,过滤器会更新其概率表。这种单用户学习是为什么同一邮件对一个用户可能被过滤为垃圾邮件,而对另一个用户被传送到收件箱的原因。
神经网络模型
主要提供商现在使用远远超越单个词频率的深度学习模型。这些模型评估:
- 邮件的语义意义(不仅仅是关键词)
- HTML中的结构模式
- 时间模式(发送时间、频率、突发)
- 发件人和收件人之间的关系(他们之前交换过邮件吗?)
- 与已知垃圾邮件活动的相似性(聚类分析)
例如,Google的垃圾邮件过滤器在到达任何收件箱之前处理超过99.9%的垃圾邮件,同时保持误报率低于0.05%。这只有通过大规模机器学习才可能实现。
阶段8:传送后信号
过滤不会在邮件到达收件箱时停止。传送后信号持续细化放置:
- "报告垃圾邮件"点击:最直接的负面信号。如果许多收件人报告来自发件人的邮件是垃圾邮件,该发件人的未来邮件对所有收件人更有可能被过滤。
- "不是垃圾邮件"/从垃圾邮件中恢复:将邮件从垃圾邮件移动到收件箱是正面信号,告诉过滤器它犯了一个错误。
- 阅读/打开行为:始终打开和阅读的邮件表示价值。未阅读就删除的邮件表示相反。Gmail大量使用此功能。
- 回复行为:回复邮件是非常强的正面信号——您不会回复垃圾邮件。
- 联系人列表:如果发件人在收件人的通讯录中,邮件几乎总是被传送到收件箱。
- 停留时间:收件人花费多长时间阅读邮件然后继续。
基于参与度的过滤创建反馈循环:如果您向新订阅者发送的早期邮件未被打开,未来邮件更有可能被过滤。这就是为什么IP预热建议总是说从最受欢迎的收件人开始。
主要提供商如何不同
Gmail
Gmail的过滤是最复杂的,最受参与度驱动的。关键特征:
- 域信誉比IP信誉权重更大。
- 参与度信号(打开、回复、垃圾邮件报告)大量影响收件箱放置。
- Gmail将某些邮件分类到选项卡(主要、促销、社交、更新)中,这与垃圾邮件过滤分开,但影响可见性。
- 自2024年2月起,Gmail要求大量发件人(每天向Gmail发送5000+条邮件)使用SPF、DKIM和DMARC身份验证,提供一键退订,并保持垃圾邮件投诉率低于0.3%。
Outlook.com / Microsoft 365
- IP信誉被大量权衡。Microsoft维护大型内部IP信誉数据库。
- 发件人信誉数据(SRD)面板——投票邮件是否有需要的真实用户——直接反馈到过滤决定。
- Exchange Online保护(EOP)使用多层,包括连接过滤、策略过滤和内容过滤。
- Microsoft的SmartScreen过滤器将邮件特征与已知垃圾邮件和网络钓鱼模型进行分析。
Yahoo / AOL
- Yahoo反馈循环中的投诉率是主要信号。
- Yahoo是DMARC
p=reject的早期采用者,严格执行它。 - Yahoo在2024年加入Gmail,要求大量发件人身份验证和一键退订。
垃圾邮件过滤器测试和调试
当您的邮件进入垃圾邮件时,您需要系统的方法来诊断原因。
阅读过滤器邮件头
大多数垃圾邮件过滤器向邮件添加邮件头,揭示其判决。向自己发送测试邮件并检查原始邮件头:
X-Gm-Message-State: [internal state data]
X-Google-DKIM-Signature: [Google's own signature]
Authentication-Results: mx.google.com;
spf=pass ... dkim=pass ... dmarc=pass
# Microsoft添加:
X-Microsoft-Antispam: BCL:0;
X-MS-Exchange-Organization-SCL: 1
# SCL(垃圾邮件置信度):-1=安全、0-4=已传送、5-6=垃圾邮件、7-9=已阻止
# SpamAssassin(开源,广泛使用)添加:
X-Spam-Status: No, score=-1.2 required=5.0
tests=DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_PASS,
RCVD_IN_DNSWL_LOW autolearn=ham
这些邮件头告诉您应用了哪些测试及其结果。Authentication-Results邮件头是标准化的;垃圾邮件评分邮件头是过滤器特定的。
种子测试
将测试邮件发送到多个提供商的帐户(Gmail、Outlook、Yahoo、公司服务器),检查它们是否进入收件箱或垃圾邮件。在每个重大活动或基础设施更改之前执行此操作。几个第三方服务通过跨数十个提供商的测试地址面板自动化此操作。
隔离变量
如果邮件进入垃圾邮件,一次更改一个变量以识别触发因素:
- 从不同域发送相同内容——如果它传送,问题是信誉,而不是内容。
- 从同一域发送不同内容——如果它传送,问题是内容特定的。
- 从不同IP发送到同一提供商——如果它传送,问题是IP信誉或黑名单。
- 移除所有链接并再次发送——如果它传送,您的某个URL被黑名单。
可能出现的问题
合法电子邮件被过滤为垃圾邮件
您的事务性电子邮件(密码重置、订单确认)进入垃圾邮件是因为同一域上的营销电子邮件破坏了您的域信誉。解决方案:考虑将事务性和营销电子邮件分离到不同的子域中,以便营销信誉损害不会影响关键的事务性传送。
内容在合法内容上触发
您的发票电子邮件包含单词"payment"加上附件加上链接——都是合法的,但组合得分很高。解决方案:确保强身份验证和信誉,以便从受信任发件人的背景下评估内容信号。
参与度死亡螺旋
您向大量不活跃订阅者列表发送。很少有人打开您的电子邮件。低参与度率导致提供商将后续邮件移动到垃圾邮件。甚至更少的人看到它们。打开率进一步下降。更多邮件进入垃圾邮件。解决方案:定期清除不活跃订阅者,并在他们变得不活跃之前使用重新参与活动。
URL黑名单
您邮件中链接的域被黑名单(也许是您的跟踪域,或共享链接缩短器)。包含该链接的每封电子邮件现在都被标记。解决方案:为跟踪链接使用自己的域,监控链接信誉,避免在电子邮件中使用共享URL缩短器。
关键要点
- 垃圾邮件过滤是多层的。没有单一检查确定收件箱放置。这是连接、身份验证、内容、信誉和参与度信号的总和。
- 身份验证是必要的但不充分的。通过SPF/DKIM/DMARC不保证收件箱传送,但未能通过几乎保证垃圾邮件或拒绝。
- 信誉压倒内容。具有边界线内容的受信任发件人被传送。具有干净内容的不受信任发件人被过滤。
- 参与度是新边界。Gmail尤其使用打开、回复和垃圾邮件报告作为主要过滤信号。发送给想要您的电子邮件的人是最有效的可传送性策略。
- 每个提供商都不同。Gmail由参与度驱动,Outlook由IP驱动,Yahoo由投诉驱动。针对每个进行优化。
- 分离邮件流。为事务性和营销电子邮件使用不同的子域来隔离信誉。
- 监控并适应。垃圾邮件过滤不断发展。去年有效的可能今年不会有效。使用Postmaster工具和反馈循环保持知情。