第 18 章 邮件传输与防护 管理:#pMtaFilters

Milter(Sendmail milter 协议)和 MTA 钩子(每个 SMTP 阶段一个 HTTP 调用)

现有过滤器可直接接入 SMTP 会话:milter 使用 Sendmail milter 协议第 6 版(通过其 milter 代理接入的 Rspamd、ClamAV-milter、OpenDKIM、DLP 产品);MTA 钩子是普通的 HTTP 服务,每个阶段(CONNECT、EHLO、MAIL FROM、RCPT TO、DATA)接收一个 JSON 文档并返回决策。两者均作用于入站邮件(端口 25),并可选作用于提交(465/587)。请在“Milter & MTA 钩子”(#pMtaFilters) 下进行配置,每个条目都带有测试按钮。

运维提示与架构说明

请慎重选择默认动作:"accept"(故障放行)在过滤器宕机时保持邮件流通,"tempfail"(类似 Postfix milter_default_action = tempfail)会让发件方稍后重试,直到过滤器恢复。对于病毒扫描程序,tempfail 更安全;对于评分服务,accept 更合适。隔离会将入站邮件放入垃圾邮件文件夹;在提交阶段,邮件会以 550 被拒绝。

MTA 钩子响应(兼容 Stalwart)

请求:上下文(stage、client、sasl、tls、server、queue、protocol)、信封(from、to),在 DATA 阶段还有邮件(headers、contents、size)。签名位于 X-Nextxch-Signature 标头中:sha256=对正文计算的 HMAC。

参考 / 配置
POST https://dlp.internal/hook   (X-Nextxch-Hook-Stage: data)

{
  "action": "accept",
  "modifications": [
    { "type": "addHeader", "name": "X-DLP-Status", "value": "clean" },
    { "type": "changeHeader", "index": 1, "name": "Subject", "value": "[external] Offer" },
    { "type": "deleteHeader", "index": 1, "name": "X-Internal-Route" }
  ]
}

{ "action": "reject", "response": { "status": 550, "enhancedStatus": "5.7.1", "message": "Confidential data detected" } }
{ "action": "tempfail", "response": { "status": 451, "message": "Please try again later" } }
{ "action": "quarantine" }      { "action": "discard" }

设置、默认值与最佳实践

设置 / 位置 说明 默认值 生产环境最佳实践
Milter-Adresse milter 的 TCP 或 Unix 套接字:inet:host:port、inet:port@host(Sendmail 写法)、host:port 或 unix:/path。 - Rspamd:inet:127.0.0.1:11332(proxy worker,milter = yes)。ClamAV-milter:unix:/run/clamav/clamav-milter.ctl 或 inet:127.0.0.1:7357。
Phasen und Aktionen (Milter) 选项协商 v6,宏(j、{client_addr}、i、{auth_authen}、{mail_addr}、{rcpt_addr}),connect、helo、mail、rcpt、data、header、eoh、body、eom。应答:accept、continue、reject、tempfail、discard、回复代码、quarantine。修改:添加、插入和更改邮件头,替换正文,添加/删除收件人,更改发件人。 alle angeboten milter 关闭的阶段 (SMFIP_NO*) 不会发送;无需回复的阶段 (SMFIP_NR_*) 不会等待。
Zeitlimits 连接、每条命令以及内容/邮件结束阶段分别设置;进度回复会延长内容超时。 5 s / 10 s / 60 s 对于处理大附件的病毒扫描程序,请将内容超时提高到 120 至 300 秒。
MTA-Hook Phasen und Sicherheit 每个钩子:connect、ehlo、mail、rcpt、data。可选认证头(例如 Authorization: Bearer ...)和 HMAC-SHA256 签名;两者均加密存储,且从不显示。 data 只启用您需要的阶段:每次调用都会把挂钩的响应时间加到 SMTP 对话中。挂钩应在一秒内应答。
Reihenfolge Milter 和钩子按其 order 字段顺序运行;第一个拒绝即终止链条。在 DATA 阶段,每个过滤器看到的邮件都包含之前过滤器所做的更改。 Milter 100, Hooks 200 将快速、低成本的检查(例如信誉)放在开销大的检查(病毒扫描)之前。