7. 安全考虑事项 (Security Considerations)
7.1. 邮件安全和伪造 (Mail Security and Spoofing)
SMTP 邮件本质上不安全, 原因包括:
- 缺少内建认证
- 发送者地址很容易伪造
- 基本协议没有加密
MAIL FROM 和 RCPT TO 地址很容易被伪造. SPF, DKIM, DMARC 等附加协议有助于缓解伪造, 但它们不属于核心 SMTP.
7.2. "Blind" 副本
BCC (Blind Carbon Copy) 接收者不得出现在消息头部中. 通常通过以下方式处理:
- 为 BCC 接收者创建单独 SMTP 事务
- 传输前移除 BCC 头部字段
7.3. VRFY, EXPN 和安全
VRFY (verify) 和 EXPN (expand) 命令可用于收集有效电子邮件地址. 服务器可以:
- 禁用这些命令
- 要求认证后才能使用
- 返回不确认地址有效性的通用响应
7.4. 基于 251 和 551 响应代码的邮件重路由
响应代码 251 (user not local, will forward) 和 551 (user not local) 可能被利用:
- 发现转发地址
- 收集地址
- 进行流量分析
服务器应谨慎处理自动转发以及这些响应中披露的信息.
7.5. 公告中的信息披露
服务器 greeting (220 响应) 和 EHLO 响应不应披露:
- 详细软件版本信息
- 内部系统架构
- 安全配置细节
攻击者可以利用这些信息针对已知漏洞.
7.6. Trace 字段中的信息披露
Received 头部字段包含:
- IP 地址
- 主机名
- 时间信息
- 内部网络拓扑
虽然这些信息对调试是必要的, 但也可用于:
- 网络映射
- 流量分析
- 识别安全基础设施
7.7. 消息转发中的信息披露
转发消息时, 服务器应:
- 避免披露内部地址
- 跨越信任边界时清理 trace 信息
- 考虑自动转发的隐私影响
7.8. 抗攻击能力 (Resistance to Attacks)
SMTP 服务器应实现防护以抵御:
拒绝服务 (DoS)
- 每来源连接限制
- 速率限制
- 资源消耗限制
- 超时强制
缓冲区溢出
- 严格输入验证
- 长度限制强制
- 安全字符串处理
命令注入
- 正确解析命令
- 验证参数
- 拒绝畸形输入
目录收集攻击
- 限制 RCPT TO 命令速率
- 延迟或通用响应
- 记录并阻止扫描行为
7.9. SMTP 服务器的操作范围 (Scope of Operation of SMTP Servers)
SMTP 服务器应:
-
明确定义其操作范围
-
实现适当访问控制
-
区分:
- 内部消息提交
- 外部消息中继
- 最终消息投递不得部署开放中继 (接受任何人发往任何地方并进行转发的服务器), 因为它们:
-
促成垃圾邮件分发
-
便利滥用
-
损害 Internet 邮件基础设施
推荐安全实践
- 使用 TLS/STARTTLS: 尽可能加密连接
- 实现认证: 对消息提交要求 SMTP AUTH
- 部署 SPF/DKIM/DMARC: 添加发送者认证
- 速率限制: 防止滥用和 DoS 攻击
- 访问控制: 适当限制中继访问
- 日志记录: 维护详细日志用于安全分析
- 定期更新: 及时应用安全补丁
- 监控: 检测并响应可疑活动