Greylisting 灰名单实战:RFC 6647 的 SMTP 延迟反垃圾机制
一、什么是灰名单
灰名单(Greylisting)是一种行为层反垃圾邮件技术,核心思想是:对陌生发件方的首次 SMTP 连接返回临时错误(4xx)而非拒绝,迫使其稍后重试;合法邮件服务器会按 RFC 5321 的退信重试规范重新投递,而绝大多数僵尸网络与群发源既不重试也不遵循标准,从而被自然过滤。该机制由 RFC 6647《Greylisting: An Applicability Statement for SMTP Delays》正式定义。
其判定依据是三元组(sender IP, envelope sender, envelope recipient):首次见到该三元组即延迟,记录时间戳;在配置的"灰期"内再次见到且来源一致,则放行并将三元组加入白名单,后续通信不再延迟。
二、工作机制与时间窗口
标准流程:
- 首次连接:策略服务返回
450 4.2.0 Greylisted, try again later(或 451),并记录三元组与首次时间。 - 合法 MTU 按 RFC 5321 §4.5.4.1 的建议重试(通常 1 小时内,部分实现延迟数分钟)。
- 重试命中白名单窗口:放行并将三元组加白(默认白名单有效期可达数十天)。
- 无重试的恶意源:邮件始终未进入,被静默丢弃。
关键参数:灰期(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 灰名单是开箱即用、零外部依赖的低成本第一道防线。
