RFC 6409 规定邮件提交服务器(MSA)必须执行哪些强制动作?

1 RFC 6409 规定邮件提交服务器(MSA)必须执行哪些强制动作?
规范定位

RFC 6409 的核心主张是把「邮件提交」(submission)从「邮件中继」(relay)中拆分出来,使两类服务各自按自身的安全与策略规则运行。中继不受影响,继续使用 25 端口上的 SMTP;符合本规范的邮件提交则通常在 587 端口进行。这种功能分离带来的直接收益,是可以对提交通道单独施加特定的安全或策略要求,而不必牵动全网中继的互通性。

三项强制动作(MUST)
  • 通用提交拒绝码:除非有更精确的应答码适用,否则对含有不当内容的 MAIL、RCPT 或 DATA 命令,应使用 554 应答码拒绝。
  • 保证域名完全限定:MSA 必须确保 SMTP 信封中所有域名都是完全限定域名(FQDN);若 MSA 除添加追踪头字段外还检查或改写了信件正文,则必须确保地址类头字段中的域名也完全限定。含不当域名引用的命令同样以 554 拒绝。
  • 要求认证:若会话未通过 SMTP AUTH 认证,且未以其他方式(例如处于受保护子网内)独立建立认证或授权,MSA 默认必须对 MAIL 命令返回错误,应答码为 530
推荐与可选动作

推荐动作(SHOULD)包括:拒绝信封发件人或收件人地址语法非法的邮件(用 501;若在收下正文后才解析地址,则在数据结束后用 554 加相应增强状态码);记录邮件错误日志,尤其是客户端软件的疑似配置错误,同时须对日志量设限以防拒绝服务;采用比 RFC 5321 更短的超时——提交服务器应在 2 分钟内响应任何命令(含 DATA),因为提交客户端的超时通常只有 2 至 5 分钟。

可选动作(MAY)包括:校验 MAIL FROM 地址的提交权限、校验 RCPT 与用户权限的一致性(均用 550 配 5.7.1 一类增强状态码)、检查邮件数据、支持 postmaster 地址、调整字符编码。

消息改写与签名风险

站点可以改写提交的邮件以符合标准与本地策略,常见改写包括:在发件人身份已知且未体现在 From 中时添加或替换 Sender 字段(且必须确保写入的是有效邮件地址);缺失时补充 Date;缺失或语法无效时补充或替换 Message-ID(SHOULD,因为仍有不少客户端不生成该字段);按 MIME 施加传输编码;签名或加密邮件;解析别名;重写头字段。

规范同时给出重要告诫:改写应限于「问题明确、解法清晰」的场景,尤其涉及地址元素时——不加甄别地给缺域名的地址补上域名往往制造出更多坏地址,必须先验证未限定地址在该域中确为有效的本地部分。此外,任何改写都可能使已有的 DKIM、PGP 或 S/MIME 签名失效,进而影响下游依据签名有效性做判定的过滤引擎。

参考:IETF RFC 6409《Message Submission for Mail》(Standards Track,2011-11,取代 RFC 4409)