17 个版本
0.5.0 | 2024 年 3 月 13 日 |
---|---|
0.4.0 | 2023 年 1 月 29 日 |
0.3.2 | 2022 年 8 月 31 日 |
0.3.1 | 2022 年 3 月 14 日 |
0.1.0 | 2020 年 2 月 23 日 |
#23 在 电子邮件
每月 25 次下载
92KB
2K SLoC
SpamAssassin Milter
SpamAssassin Milter 是一个 Milter 应用程序,它通过 spamc 客户端使用 SpamAssassin 服务器过滤电子邮件。它是一个轻量级组件,用于将 Apache SpamAssassin 与具有 milter 功能的 MTA(邮件服务器)如 Postfix 集成。因此,其任务是帮助在电子邮件网站上打击垃圾邮件。
SpamAssassin Milter 作为 MTA 的 SMTP 协议处理程序的 milter 操作。它将传入的消息传递给 SpamAssassin 进行分析,然后解释 SpamAssassin 的响应并应用对消息的建议更改。
默认情况下,将进行以下修改
- 始终:向消息添加 SpamAssassin 标头(以
X-Spam-
开头的标头) - 垃圾邮件仅:如果请求,重写
Subject
From
To
标头 - 垃圾邮件仅:如果请求,替换消息正文(并重写相关标头
MIME-Version
Content-Type
)
或者,标记为垃圾邮件的消息可以在 SMTP 层被拒绝,并返回 SMTP 错误回复。
SpamAssassin 和 SpamAssassin Milter 都提供了各种配置选项来更改默认行为。以下将讨论几种配置和集成方法。
该应用程序可以用作 spamass-milter 的替代品;它具有较少的功能集,但对于常见的邮件服务器设置应该足够。SpamAssassin Milter 已在 Ubuntu 服务器上与 Postfix 一起使用,并为 LMTP 和 Sieve 插件 与 Dovecot 一起使用。
安装
SpamAssassin Milter 是一个 Rust 项目。它可以使用 Cargo 正常安装。例如,使用以下命令安装在 crates.io 上发布的最新版本:
cargo install --locked spamassassin-milter
SpamAssassin Milter 使用 spamc
程序与 SpamAssassin 服务器进行通信。默认情况下,使用 /usr/bin/spamc
作为可执行文件。如果要覆盖此设置,请在构建应用程序时将环境变量 SPAMASSASSIN_MILTER_SPAMC
设置为所需的路径。
最低支持的 Rust 版本为 1.65.0。
用法
安装完成后,SpamAssassin Milter 可以通过 spamassassin-milter
调用。 spamassassin-milter
需要一个必选参数,即 milter 的监听套接字(MTA 将连接到的套接字)。套接字规范应采用以下格式之一:inet:host:port
或 unix:path
,分别用于 TCP 或 UNIX 域套接字。
例如,以下调用在端口 3000 上启动 SpamAssassin Milter
spamassassin-milter inet:localhost:3000
通过传递 -h
标志可以查看可用的选项
spamassassin-milter -h
更详细的信息可以在提供的手册页中找到:spamassassin-milter(8)。(您可以通过将文件路径传递给 man
来在不安装的情况下查看手册页:man ./spamassassin-milter.8
)
通过使用提供的 systemd 服务文件,最简单的方法是将 SpamAssassin Milter 设置为系统服务:使用所需的端口编辑 spamassassin-milter.service
,将其安装在 /etc/systemd/system
中,然后启用并启动服务。如果需要,用户、组和 umask 也可以在此文件中自定义。
配置
SpamAssassin Milter 被设计为一个轻量级的“胶水”应用程序,只有几个配置开关;这是故意的,因为 SpamAssassin 组件本身已经高度可配置。
SpamAssassin Milter 通过设置命令行选项进行配置。所有选项都使用合理的默认值,这些默认值与 SpamAssassin 服务器(spamd
)和客户端(spamc
)的库存安装配合良好。您只需选择一个套接字,一切应该就会正常工作。后续部分讨论了某些集成选项。
新用户可能希望在正式上线之前,使用 --dry-run
选项运行 SpamAssassin Milter。结合 --verbose
,这将准确了解 SpamAssassin Milter 将应用的变化。
spamassassin-milter --dry-run --verbose inet:localhost:3000
与 SpamAssassin 集成
SpamAssassin Milter 必须与两个 SpamAssassin 组件集成:SpamAssassin 服务器本身,称为 spamd
,它执行实际工作,以及 SpamAssassin 客户端 spamc
,它作为 milter 和服务器之间的通信通道。
SpamAssassin 配置
主 SpamAssassin 配置文件是 /etc/spamassassin/local.conf
。有关详细信息,请参阅 perldoc Mail::SpamAssassin::Conf
。
文档中多次出现的“标记为垃圾邮件”的短语是指 SpamAssassin 是否通过添加标题 X-Spam-Flag: YES
来标记邮件为垃圾邮件。邮件是垃圾邮件还是正常邮件(非垃圾邮件)是二元属性。可以通过以下方式设置 required_score
来调整分类阈值
required_score 9.0
在SpamAssassin Milter中,--reject-spam
选项会导致标记为垃圾邮件的消息在SMTP对话期间被拒绝。以这种方式拒绝垃圾邮件时,接受(未拒绝)的消息将不会有X-Spam-Flag: YES
头部;如果您需要进一步决定传入的消息,请查看X-Spam-Level
头部。
默认情况下,SpamAssassin为它识别为垃圾邮件的消息创建“报告”。这些报告替换了消息正文,也就是说,消息正文被重写以显示报告而不是原始消息,原始消息被降级为MIME附件。SpamAssassin Milter默认应用报告。
报告由report_safe
配置参数控制。以下是如何禁用报告:
report_safe 0
此外,还可以使用--preserve-body
选项在SpamAssassin Milter侧抑制正文重写。
SpamAssassin还可能重写主题和其他头部,例如,通过添加前缀“***Spam***”。这不是默认操作,但可以通过以下设置启用:
rewrite_header Subject ***SPAM***
SpamAssassin Milter默认应用头部重写。可以使用--preserve-headers
选项在SpamAssassin Milter侧抑制头部重写。
spamc
配置
可以通过传递命令行选项来配置客户端程序spamc
,或者最好是在配置文件/etc/spamassassin/spamc.conf
中设置命令行选项。
默认情况下,spamc
将尝试连接到专用端口783上的SpamAssassin服务器,因此SpamAssassin的库存安装应该与SpamAssassin Milter一起工作,无需进一步配置。
如果SpamAssassin服务器监听不同的端口或UNIX域套接字,请在spamc.conf
中设置适当的--port
或--socket
选项。
--socket=/run/spamassassin/spamd.sock
当禁用SpamAssassin报告时,建议使用--headers
选项
--headers
此选项只是一个快捷方式,它会导致spamd
不将消息正文传回spamc
。(显然,此选项仅在报告被禁用时才有意义,并且应该只在报告被禁用时使用。)
最后,spamc
的一个陷阱值得强调:spamc
默认会尝试尽可能多地抵抗失败,以至于即使在无法连接到SpamAssassin服务器的情况下(除了记录到syslog的警告外),它也不会指示失败!如果它无法连接到服务器,它将简单地回显它接收到的,从而掩盖错误条件。这种行为被标记为“安全回退”,也许在系统设置好之后最好禁用。以下是如何禁用安全回退:
--no-safe-fallback
与Postfix集成
要集成Postfix,请确认SpamAssassin Milter服务正在运行,然后在/etc/postfix/main.cf
中配置其侦听套接字,如下所示:
smtpd_milters = inet:localhost:3000
non_smtpd_milters = $smtpd_milters
重新加载Postfix配置后,邮件将通过SpamAssassin Milter进行处理。
默认情况下,SpamAssassin Milter将接受,也就是说,不会检查来自本地连接的消息(例如,使用sendmail
从命令行发送的邮件),以及来自经过身份验证的发送者的消息(例如,通过SASL身份验证通道提交的邮件)。
与邮件投递集成
SpamAssassin Milter可能还有另一个有用的组件,那就是Sieve邮件投递服务。例如,Sieve脚本可以查看收件中的SpamAssassin的X-Spam-
头部,并根据这些头部信息采取行动。
例如,如果Dovecot使用LMTP进行邮件投递,请启用LMTP协议的Sieve插件,然后设置一个全局Sieve脚本,将标记为垃圾邮件的消息存档到“垃圾箱”文件夹。也就是说,测试头部X-Spam-Flag: YES
require "fileinto";
if header "X-Spam-Flag" "YES" {
fileinto "Junk";
stop;
}
或者,可以使用X-Spam-Level
头部的值。在上面的例子中,测试header :contains "X-Spam-Level" "*****"
会将评分为5.0或以上的邮件存档到“垃圾箱”。
许可证
版权所有 © 2020–2024 David Bürgin
本程序是自由软件:您可以按照自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它,许可证版本为3,或(根据您的选择)许可证的任何后续版本。
本程序的分发是希望它会有所用途,但没有任何保证;甚至不保证其可销售性或适用于特定用途。有关详细信息,请参阅GNU通用公共许可证。
您应该已经随本程序收到了GNU通用公共许可证的一个副本。如果没有,请参阅https://www.gnu.org/licenses/。
依赖关系
~5–15MB
~164K SLoC