安全与隐私
Spam Scanner 读取的邮件是私密的,而发件人可能怀有敌意。本页列出它会向外发送哪些内容,以及它如何对待所读取的内容。
哪些内容会离开本机#
默认只有一项:邮件中链接的主机名会在 Cloudflare 的过滤解析器上查询,即 1.1.1.2 和 1.0.0.2(恶意软件和钓鱼),以及 1.1.1.3 和 1.0.0.3(另含成人内容)。这些是针对 example.com 之类名称的普通 DNS 查询;不会发送邮件或其地址的任何部分。用 phishing: {cloudflare: false} 或 --no-cloudflare 关闭它们,或者用 phishing: {adult: false} 只关闭成人内容检查。
其他所有检查在配置之前都处于关闭状态:
| 检查 | 发送内容 | 发送目标 |
|---|---|---|
authentication | 对发件人 SPF、DKIM、DMARC 和 ARC 记录的 DNS 查询 | 你的解析器,或 dnsServers |
dnsbl | 反转后的客户端 IP 地址和链接域名,以 DNS 查询的形式 | 黑名单的域名服务器,经由你的解析器或 dns.servers |
llm | 邮件摘要,发送给远程服务商时会移除个人数据 | 你指定的语言模型服务器(隐私) |
reputation.apiUrl | 发件人的 IP 地址、域名和地址 | 你指定的服务 |
clamav | 附件 | 你的 clamd,通过其套接字 |
没有遥测,没有更新检查,运行时也不下载任何内容。模型随软件包一起提供。
它保留什么#
除非要求,否则什么都不保留。扫描不会被记录或存储。learn() 在内存中修改分类器;只有 saveModel()、spamscanner learn 或服务器的 --out 选项才会把它写入磁盘。模型文件保存的是经过哈希的特征计数,而不是词语或邮件文本。
语言模型的回答缓存在内存中,以所发送内容的哈希为键,因此同一封邮件的多个副本只会询问一次。DNS 回答在内存中缓存十分钟。
恶意输入#
- 附件按字节识别,从不执行,也从不交给其他程序打开。ZIP 压缩包从其中央目录读取,并限制条目数量;嵌套的压缩包不会被解压。
- 正文最多读取
maxLength(100,000 个字符),服务器接受最大 25 MB 的邮件。 - 每项网络检查都有超时(
timeout,默认 10 秒)。失败或超时的检查会被跳过,扫描在没有它的情况下完成。 - milter邮件过滤器:源自 Sendmail 的协议,Postfix 也在使用,它让一个独立程序在 SMTP 会话期间检查每封邮件。、内容过滤器和
--headers会移除邮件中已有的X-Spam-*邮件头,因此发件人无法把自己的邮件标记为干净。 - 只有当邮件直接来自 Microsoft 的服务器时,才信任 Microsoft 的垃圾邮件判定邮件头;Received 邮件头从不用于判断邮件的来源。
- 针对 AI 过滤器的文字会按垃圾邮件计分,并且会告知语言模型邮件是数据而不是指令。提示注入
服务器#
milter、HTTP、TCP 和 spamdSpamAssassin 的守护进程。spamc、Exim、Haraka 和其他 SpamAssassin 客户端都使用它的协议。 服务器默认监听 127.0.0.1,除非 --host 另行指定。HTTP API 以恒定时间比较其令牌,没有令牌时拒绝 /learn。它们都不支持 TLS:要跨网络访问,请使用私有网络、SSH 隧道或带 TLS 的反向代理。
请以非特权用户运行它们。Postfix 指南中的 systemd 单元包含了常用的加固设置。
报告漏洞#
请通过 GitHub 的漏洞报告功能私下报告安全问题,不要在公开的 issue 中报告。