灰名单(greylisting)为什么能让大部分垃圾邮件自动退散?原理和坑是什么?
1
灰名单(greylisting)为什么能让大部分垃圾邮件自动退散?原理和坑是什么?
▼
灰名单是什么
RFC 6647 把灰名单定义为一类对未知发件方返回 SMTP 临时失败(4xx)、邀请其稍后重试的机制。狭义上它指「生成 SMTP 临时失败以邀请稍后重试」(见 RFC 6647 第 1 节与第 2 节定义)。它利用的是合规 MTA 与垃圾发送软件在「是否重试」上的行为差异。
核心原理:合规 MTA 会重试,垃圾软件常常不
RFC 6647 指出,合规的 SMTP 客户端在收到临时失败后,会按 RFC 5321 的排队重试逻辑重投(文献引用 RFC 5321 的发送策略);而多数垃圾软件要么根本不重试,要么重试模式可被识别(见文献第 410、417 行附近)。于是合法邮件在第一次被临时拒绝后、稍后重试即成功投递,而大量垃圾在第一次被拒后便消失——无需内容扫描即可过滤。
用什么识别「同一次重试」
RFC 6647 第 3 节描述灰名单过程用「三元组(发送 IP、信封发件人、信封收件人)」来识别一次重试是否正确(文献第 303 行附近)。首次遇到某三元组时返回临时失败并记录;合法 MTA 按 RFC 5321 重试时三元组匹配,便放行并将其长期记住,后续不再拦截。记录老化过快会把本应放行的重试方重新灰名单(第 443 行附近)。
常见坑
RFC 6647 列出若干注意点:①合法 MTA 可能很久(一小时以上)都不重试,造成明显投递延迟(第 415、540 行附近);②不重试的客户端按 RFC 5321 不算完全 SMTP 能力(第 417-423 行附近),可能因此丢信;③记录老化策略要合理,否则误伤;④要避免可预测的重试模式被观察者利用(第 389 行附近)。实践中应把灰名单与 SPF/DKIM/DMARC、DNSBL 联动,并对已知良好发送方白名单,以缩短延迟。
参考:https://www.rfc-editor.org/rfc/rfc6647.txt
