如何为 ZoneMTA 集成 Rspamd 与 ClamAV:反垃圾防护双重检测完整教程
【免费下载链接】zone-mta📤 Modern outbound MTA cross platform and extendable server application项目地址: https://gitcode.com/gh_mirrors/zo/zone-mta
ZoneMTA 是一款基于 Node.js 与 MongoDB 构建的现代出站 MTA(邮件传输代理),以高性能、跨平台和可扩展插件机制著称。对于邮件服务器管理员而言,反垃圾防护与病毒检测是运维的重中之重。本教程将带你一步步为 ZoneMTA 集成Rspamd 垃圾邮件过滤与ClamAV 病毒扫描,构建双保险的邮件安全防线,即使你是新手也能轻松完成配置。
为什么 ZoneMTA 需要反垃圾防护双重检测?
ZoneMTA 虽然是出站 MTA,但它同样承担收信与中继任务。如果不对入站邮件做检测,垃圾邮件与带毒邮件就可能通过你的服务器被转发出去,轻则影响 IP 信誉,重则导致域名被拉黑。Rspamd 与 ClamAV 的分工十分明确:
- Rspamd:基于贝叶斯、规则与实时黑名单的垃圾评分引擎,可识别垃圾邮件、钓鱼邮件,并返回评分与处置动作。
- ClamAV:老牌开源杀毒引擎,通过 clamd 守护进程对邮件附件进行病毒特征扫描。
两者一"智"一"杀",配合使用即可覆盖绝大多数邮件威胁。
第一步:认识 ZoneMTA 反垃圾防护插件结构
ZoneMTA 的安全检测能力全部以插件形式提供,源码位于 plugins/core/rspamd/index.js 与 plugins/core/clamav/index.js。这两个插件通过addAnalyzerHook在收信阶段对流式邮件内容做实时检测,检测结果会挂载到envelope.spam与envelope.virus对象上,随后在message:queue钩子中决定放行、拒绝或静默丢弃。
插件默认未启用,你需要在 config/default.js 中手动开启,下面我们分别讲解。
第二步:快速安装并启用 Rspamd 垃圾评分插件
安装 Rspamd 服务
Rspamd 需要独立部署,以 Debian/Ubuntu 为例:
sudo apt install rspamd sudo systemctl enable --now rspamd启动后,Rspamd 默认在11333端口提供 HTTP 检测接口。
ZoneMTA 中开启 Rspamd 集成
编辑你的应用配置文件(覆盖默认配置即可),加入以下内容:
'core/rspamd': { enabled: ['receiver', 'sender'], url: 'http://localhost:11333/check', interfaces: ['feeder'], maxSize: 5 * 1024 * 1024, dropSpam: false, rewriteSubject: false }各配置项含义如下:
| 配置项 | 作用 |
|---|---|
enabled | 指定加载上下文,receiver负责检测,sender负责在投递前添加 Spam 头 |
url | Rspamd 检测接口地址,默认http://localhost:11333/check |
interfaces | 只检测来自哪些接口的邮件,['*']表示全部扫描 |
maxSize | 超过 5MB 的大邮件跳过评分,避免性能损耗 |
dropSpam | 为true时静默丢弃垃圾邮件,否则返回 550 拒绝 |
rewriteSubject | 为true时自动给垃圾邮件主题加[***SPAM(分数)***]前缀 |
💡 提示:如果希望 Rspamd 能看到发件人的真实来源 IP,可追加
ip: true配置项。
Rspamd 检测结果如何生效?
插件在收到 Rspamd 响应后,会依据action字段执行不同策略(见 plugins/core/rspamd/index.js):
- reject:返回
550 This message was classified as SPAM拒绝收信 - add header / rewrite subject / soft reject:按配置重写主题或放行
- 投递时还会在邮件头追加
X-Zone-Spam-Status与X-Zone-Spam-Resolution,便于追踪判定结果
第三步:快速配置 ClamAV 病毒扫描
安装并启动 clamd
ClamAV 通过 clamd 守护进程通信,安装命令:
sudo apt install clamav clamav-daemon sudo freshclam sudo systemctl enable --now clamav-daemonclamd 默认监听3310端口,ZoneMTA 正是通过该端口以zINSTREAM协议流式发送邮件内容进行扫描。
在 ZoneMTA 中启用 ClamAV 插件
配置代码如下:
'core/clamav': { enabled: 'receiver', port: 3310, host: '127.0.0.1', interfaces: ['feeder'], ignoreOrigins: [] }关键参数说明:
port/host:clamd 服务地址,默认127.0.0.1:3310interfaces:需要扫描的邮件来源接口ignoreOrigins:忽略来源 IP 列表,常用于放行自家可信中继
当检测到病毒时,插件会在 plugins/core/clamav/index.js 的message:queue钩子中直接拒绝邮件,返回550 This message contains a virus and may not be delivered。
第四步:双重检测联动与最佳实践
Rspamd 与 ClamAV 插件可以同时启用,ZoneMTA 会按配置顺序依次流过两个分析器,互不干扰。建议采用以下安全组合策略:
- 入口全扫描:将
interfaces设为['*'],对 SMTP 收信与 HTTP API 投递的邮件一律检测。 - 垃圾邮件静默丢弃:将 Rspamd 的
dropSpam设为true,避免攻击者通过退信确认地址有效。 - 病毒邮件硬拒绝:ClamAV 检出病毒必须拒绝,杜绝带毒邮件进入投递队列。
- 结合日志排查:插件会输出
SPAMCHECK与VIRUSCHECK日志,配合 docs/LOGGING_GELF_CODES.md 可远程记录检测详情。
第五步:验证集成是否成功
重启 ZoneMTA 后,发送一封测试邮件到你的服务器,然后观察日志:
- 出现
Rspamd RESULTS score=... action=...说明垃圾评分生效; - 出现
Clamav RESULTS clean=yes说明病毒扫描正常; - 若收到 550 拒绝响应,说明对应检测已正确拦截。
结语
通过本文的配置,你的 ZoneMTA 已具备 Rspamd 垃圾评分与 ClamAV 病毒扫描的双重反垃圾防护能力。这套组合不仅提升邮件投递质量,更能保护服务器 IP 信誉。若想深入定制,不妨阅读插件源码 rspamd-client.js 与 clamav-client.js,理解流式检测的底层实现,按需扩展自己的安全插件。
【免费下载链接】zone-mta📤 Modern outbound MTA cross platform and extendable server application项目地址: https://gitcode.com/gh_mirrors/zo/zone-mta
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考