Greylisting 灰名单实战:RFC 6647 的 SMTP 延迟反垃圾机制

邮件安全运营 · 反垃圾 · RFC 6647

一、什么是灰名单

灰名单(Greylisting)是一种行为层反垃圾邮件技术,核心思想是:对陌生发件方的首次 SMTP 连接返回临时错误(4xx)而非拒绝,迫使其稍后重试;合法邮件服务器会按 RFC 5321 的退信重试规范重新投递,而绝大多数僵尸网络与群发源既不重试也不遵循标准,从而被自然过滤。该机制由 RFC 6647《Greylisting: An Applicability Statement for SMTP Delays》正式定义。

其判定依据是三元组(sender IP, envelope sender, envelope recipient):首次见到该三元组即延迟,记录时间戳;在配置的"灰期"内再次见到且来源一致,则放行并将三元组加入白名单,后续通信不再延迟。

二、工作机制与时间窗口

标准流程:

  1. 首次连接:策略服务返回 450 4.2.0 Greylisted, try again later(或 451),并记录三元组与首次时间。
  2. 合法 MTU 按 RFC 5321 §4.5.4.1 的建议重试(通常 1 小时内,部分实现延迟数分钟)。
  3. 重试命中白名单窗口:放行并将三元组加白(默认白名单有效期可达数十天)。
  4. 无重试的恶意源:邮件始终未进入,被静默丢弃。

关键参数:灰期(grey time)一般设 5–60 分钟,白名单有效期常设 30–60 天。窗口过短会放过部分慢速僵尸,过长则削弱防御效果。

三、Postfix 部署示例(postscreen)

Postfix 的 postscreen 内建灰名单能力,最小配置:

# main.cf
postscreen_grey_list_action = enforce
# 也可配合 dnsblog / dnswl 放行已知良好发送方
postscreen_dnsbl_sites = zen.spamhaus.org
# 白名单过期(天)
postscreen_grey_list_ttl = 60d

生产建议将灰名单与 DNSBL、反向 PTR 检查串联,先放行 DNSWL 中的高信誉发送方,再对陌生源启用灰名单,降低首次投递延迟的用户感知。

四、权衡与常见误区

维度说明
首次延迟合法邮件首投可能延迟数分钟,需向业务方说明
误杀风险部分无标准重试的事务型/批量发件方可能被挡,需加白名单
非内容过滤灰名单不分析内容,必须叠加 SPF/DKIM/DMARC 与内容层
绕过的演进高级垃圾源会模拟重试,故灰名单是"减速带"而非银弹

五、与身份层(DMARC)的关系

灰名单属于行为/连接层,DMARC/SPF/DKIM 属于身份层:前者挡"不守规矩的连接",后者验"发件域真伪"。两者叠加时,灰名单可显著削减需要进入内容检测的垃圾流量,降低网关负载;但任何一层都不能单独替代另一层。对信创邮件系统而言,postscreen 灰名单是开箱即用、零外部依赖的低成本第一道防线。