# 安全与隐私

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`               | 邮件摘要，发送给远程服务商时会移除个人数据                | 你指定的语言模型服务器（[隐私](https://spamscanner.net/zh/docs/llm/#privacy)） |
| `reputation.apiUrl` | 发件人的 IP 地址、域名和地址                     | 你指定的服务                            |
| `clamav`            | 附件                                   | 你的 clamd，通过其套接字                   |

没有遥测，没有更新检查，运行时也不下载任何内容。模型随软件包一起提供。


## 它保留什么

除非要求，否则什么都不保留。扫描不会被记录或存储。`learn()` 在内存中修改分类器；只有 `saveModel()`、`spamscanner learn` 或服务器的 `--out` 选项才会把它写入磁盘。模型文件保存的是经过哈希的特征计数，而不是词语或邮件文本。

语言模型的回答缓存在内存中，以所发送内容的哈希为键，因此同一封邮件的多个副本只会询问一次。DNS 回答在内存中缓存十分钟。


## 恶意输入

* 附件按字节识别，从不执行，也从不交给其他程序打开。ZIP 压缩包从其中央目录读取，并限制条目数量；嵌套的压缩包不会被解压。
* 正文最多读取 `maxLength`（100,000 个字符），服务器接受最大 25 MB 的邮件。
* 每项网络检查都有超时（`timeout`，默认 10 秒）。失败或超时的检查会被跳过，扫描在没有它的情况下完成。
* milter、内容过滤器和 `--headers` 会移除邮件中已有的 `X-Spam-*` 邮件头，因此发件人无法把自己的邮件标记为干净。
* 只有当邮件直接来自 Microsoft 的服务器时，才信任 Microsoft 的垃圾邮件判定邮件头；Received 邮件头从不用于判断邮件的来源。
* 针对 AI 过滤器的文字会按垃圾邮件计分，并且会告知语言模型邮件是数据而不是指令。[提示注入](https://spamscanner.net/zh/docs/llm/#prompt-injection)


## 服务器

milter、HTTP、TCP 和 spamd 服务器默认监听 127.0.0.1，除非 `--host` 另行指定。HTTP API 以恒定时间比较其令牌，没有令牌时拒绝 `/learn`。它们都不支持 TLS：要跨网络访问，请使用私有网络、SSH 隧道或带 TLS 的反向代理。

请以非特权用户运行它们。[Postfix 指南中的 systemd 单元](https://spamscanner.net/zh/docs/postfix/#1-run-the-milter)包含了常用的加固设置。


## 报告漏洞

请通过 [GitHub 的漏洞报告功能](https://github.com/spamscanner/spamscanner/security/advisories/new)私下报告安全问题，不要在公开的 issue 中报告。
