ACCESSSCOPE 0.3.7 · 最后更新 2026-10-17

AccessScope 操作手册

本手册介绍一款诊断工具的用法,它能从服务器的访问日志中找出攻击尝试,并附上作为依据的日志行。先说明在界面中诊断的步骤,用命令行的方法汇总在第 8 章。

1. 关于 AccessScope

AccessScope 是一款诊断工具,它读取 Web 服务器和 SSH 服务器本来就会留下的日志,查找其中的攻击尝试。找到的每一项都会附上作为依据的日志行。适合自己运营服务器、想确认日志里有没有可疑访问的用户。

它只读取日志。不会修改或删除日志,不会拦截通信,也不会提升权限。诊断本身既不使用 LLM,也不使用网络。

环境可使用的内容
Mac(macOS 12 或更高版本)界面应用和命令
Linux 客户端版界面应用和命令
Linux 的 Server Edition 软件包仅命令

Mac 版包含在 RoamSwitch 的 DMG 中,Linux 版包含在 RoamSwitch 的 deb / rpm / tarball 中。它是与 RoamSwitch 分开的工具,许可证为 Apache License 2.0。启动时,在 Mac 上选择应用图标,在 Linux 上选择应用列表中的「AccessScope」。

保存的文件

AccessScope 会自动保存的有设置、找到的日志列表、排除规则,以及与上次比较用的记录。它们都放在 ~/.config/accessscope/ 下,权限设为只有本人可以读写。

更新

在 Mac 上,只有在设置的「更新」中按下「检查更新」时才会连接 lafine.net。不会发送本机和日志的信息,下载的文件会先验证签名再安装。Linux 没有应用内更新,请通过软件包更新来升级。

2. 第一次诊断

  1. 选择日志。最简单的方法是「查找本机的日志」。它会自动查找 nginx、Apache、SSH 等日志,并列在「在本机找到的日志」中。知道日志位置时,可以用「选择文件」或「选择文件夹」来选择,也可以把文件或文件夹拖放到窗口上。
  2. 选择「时段」。默认是「最近 7 天」,也可以改成「最近 24 小时」「最近 30 天」或「全部」。时段是从现在往前数的,想诊断较早的日志时请选「全部」。
  3. 按下「开始诊断」。界面会显示「正在读取日志」「正在分析」的进度,结束后会打开结果。
只读
日志文件不会被修改。因权限不足而读不了的日志,AccessScope 不会提升权限去读取,只会显示没能读取。

3. 可读取的日志与查找位置

日志的类型会根据内容自动判别。用 gzip 压缩的已轮转日志也能直接读取。选择文件夹后,会一并读取其中看起来像日志的文件。

类型可读取的内容
Web 服务器Apache、nginx、Caddy、Traefik、HAProxy、AWS ALB 和 CloudFront(下载日志后用「选择文件」选择)
SSH 与认证sshd、sudo、su、PAM。Linux 除了 auth.log 和 secure 之外还能读 journald,Mac 能读 macOS 统一日志
其他fail2ban、邮件(Postfix、Dovecot)、数据库(MySQL、MariaDB、PostgreSQL)、Docker 容器的日志

「查找本机的日志」会检查标准位置,以及 Web 服务器配置文件所指向的日志位置。列出来的只有已确认可作为日志读取的文件。

Docker 容器

勾选「同时检查 Docker 容器」后,本机的 Docker 日志也会成为诊断对象。诊断前,确认界面会显示将执行的命令和目标容器,只有在按下「同意并诊断」后才会读取。它只读取,不会提升权限。

用 LLM 查找日志(可选)

找不到日志时,也可以用「也用 LLM 查找」让 LLM 去找位置。传给它的只有正在运行的服务器名称、/var/log 等位置里的文件名这类环境信息,不会传文件内容。建议的位置会在确认可以读取之后,以未勾选的状态给出。设置请看第 7 章。

4. 如何查看结果

诊断结束后,可以在 4 个标签页中查看结果。

标签页可以看到的内容
仪表盘综合风险(无、低、中、高)、按严重程度和分类统计的检测数量、随时间的变化,以及请求较多的 IP 和路径
检测结果找到的检测的列表。可以按严重程度筛选,也可以按标题搜索
输入日志读取了哪些日志、各读了多少行。以及没能读取的日志和原因
用 LLM 分析让 LLM 撰写报告文字(第 7 章)

如何看检测

检测会以「SQL 注入尝试」这样的名称显示,并带有严重程度(高、中、低)和可信度。可信度表示仅凭日志能说到什么程度。

展开「依据的日志行」,就能原样看到该检测所依据的日志行。平时是收起的,请先读名称和理由,只展开你在意的那些。

HTTP 200 并不表示攻击成功
暴露在互联网上的服务器整天都在被扫描,静态网站对看起来像攻击的请求也会返回 200。AccessScope 会把看起来像攻击的请求得到的 2xx 响应的大小,与同一路径的正常响应相比较。大小相同时,会显示「载荷很可能被忽略了」,并且不会提高严重程度。只有与正常响应不同的才会被当作「疑似有效果」,即便如此,可信度也只停留在「假设」。

综合风险(0 到 100)是按严重程度和可信度加权得出的参考值。它不会仅因数量多就变大,只要没有一条严重程度为高的检测,就不会变成「高」。它不是概率,请仅作为参考。

5. 减少需要查看的条数

排除规则

对于已知会出现的检测,比如本公司办公室的 IP、存活监控、本公司的漏洞扫描等,可以从报告中排除。被排除的检测不会被丢弃,而是连同理由一起保留数量。

  1. 在「检测结果」标签页中,按下检测 IP 旁边的「排除此 IP…」。
  2. 输入理由,按下「添加到排除规则」。理由会保留在报告中。
  3. 在确认对话框中核对内容并批准。从下次诊断起生效。

设置里的「排除规则」会列出当前有效的规则。这里只用于显示,不能编辑。条件较细的规则,请写在设置文件夹里的文件(suppress.toml)中,写法见第 8 章。严重程度为「高」的检测即使被排除也不会被去掉,仍会保留在报告中。

与上次的比较

对同一组日志连续诊断时,会与上次的记录比较,给新出现的检测加上「新增」标记。在「检测结果」标签页勾选「仅新增」,就只显示新增的。第一次诊断时,全部都按新增处理。记录里只包含检测的指纹(哈希)、类型、严重程度、数量和时间,不包含日志的文字。

6. 导出结果

用结果界面上方的按钮可以把结果带出来。

按钮功能
保存报告(Markdown)把诊断报告保存为 Markdown 文件
复制摘要把摘要复制到剪贴板
导出…导出屏蔽列表(IP 列表)或检测结果的列表

在「导出…」中,屏蔽列表的格式可以选择 fail2ban-ip、nftables、ipset、nginx-deny、apache-require 和 csv。检测结果的列表可以导出为 CSV、SARIF 或 JSON。

屏蔽列表的「纳入条件」可以从「默认」「较严格」「较宽松」中选择,要导出的 IP 数量会在保存前显示。官方爬虫的 IP 和排除规则所涵盖的 IP 始终不会被纳入。

只导出,不会应用任何内容
AccessScope 只会导出文件。不会更改防火墙设置,也不会拦截通信。IP 列表仅以日志为依据。在 NAT 或 CDN 之后,很多人会共用一个 IP,IP 也可能被伪造。应用之前,请务必确认内容。

7. 用 LLM 分析(可选)

这是让 LLM 把诊断结果整理成文字的功能。默认处于关闭状态。要使用时,在设置的「LLM 联动」中勾选「启用 LLM 分析」,选择「使用的 LLM」,再按下「保存」。可选的是 claude、opencode、codex、agy 中本机已安装命令的那些。

发送的内容

在「用 LLM 分析」标签页按下「显示将发送的完整内容」,就能看到要发送的全文。这个操作不会发送任何内容。按下「用 LLM 分析」时才会第一次发送。

不在「Zero Telemetry」的范围内
启用并执行分析后,摘要和作为依据的日志行会通过所选 LLM 的命令发送到外部服务。发送到哪里,由该命令自己的设置决定。RoamSwitch 的「Zero Telemetry」说明不包含这个功能。如果一直保持关闭,诊断时读取的日志内容就不会离开本机。

8. 用命令行使用

在 Server Edition 这样只有命令行的环境,或想用 cron 定期运行时,请使用 accessscope 命令。它与界面使用相同的引擎,所以找到的检测也相同。

accessscope discover
accessscope scan --auto --since 7d --report report.md
accessscope scan /var/log/nginx/access.log /var/log/auth.log
选项作用
--auto从标准位置等处查找日志并诊断。用 --since 7d 可以缩小时段
--report FILE生成 Markdown 报告
--format json|csv|sarif更改标准输出的格式
--export-blocklist FORMAT[:FILE]导出屏蔽列表
--fail-on high|medium|low只要有该严重程度及以上的检测,就以退出码 3 结束
--since-last、--new-only与上次比较,只显示新增的检测
--llm NAME、--show-prompt让 LLM 进行分析。--show-prompt 会显示将发送的全文然后结束(不会发送任何内容)

用 cron 每天运行

accessscope scan --auto --since 24h --since-last --new-only --fail-on medium

只显示上次运行时没有的检测,只有当新增的检测为中或更高时,才会以退出码 3 结束。不带 --llm 的诊断,以 root 身份也能运行。

suppress.toml 的写法

排除规则写在 ~/.config/accessscope/suppress.toml 中。只要有这个文件,就会自动读取。

[[rule]]
reason  = "office"
ip      = ["203.0.113.0/28"]
expires = 2027-03-31

[[rule]]
reason      = "uptime monitor"
ua_prefix   = ["Mozilla/5.0 (compatible; UptimeRobot"]
path_prefix = ["/healthz"]

9. 做不到的事

关于精度的数字
在我们自己的测试数据上实测,攻击的检出率约为 99%,正常通信中出现中或更高检测的比例约为 2%。测试数据并不是真实服务器通信的样本,因此这些数字不能保证在真实服务器上的精度。

10. 遇到问题时

出现在「当前无法读取的日志」中

这是权限不足时的显示。AccessScope 不会提升权限去读取。请用下列任一方法处理。

显示「在本机没有找到可以诊断的日志」

理由会以文字显示。例如会显示「没有 Web 服务器(Apache、nginx 等)的日志」。在 Mac 上,没有 SSH 记录时会显示「可能关闭了远程登录(SSH)」。可以用界面上显示的「选择文件」「用 LLM 查找」「指定其他位置」尝试下一步。查找了哪些地方,可以展开已收起的「详细的查找结果」来查看。

显示「无法读取 Docker 日志」

原因是下列之一,Docker 没有运行、找不到 Docker、没有权限,或者 Docker 返回了错误。没有权限时,请以能使用 Docker 的用户启动 AccessScope。AccessScope 不会提升权限重新读取,也不会要求或建议你加入 docker 组。因为 docker 组的权限等同于主机的 root。

显示「无法作为日志读取」

这是所选文件连一行都没能解析时的显示。该文件不会成为诊断对象,也不会被发送到任何地方。请确认它是否是支持的日志类型,然后重新选择。

无法按下「用 LLM 分析」

按钮附近会显示理由。显示「LLM 联动已关闭」时,请在设置中启用。显示「尚未选择 LLM」时,请在设置中选择。以 root 身份运行时,或者要使用的 LLM 命令没有安装在本机时,也无法使用。

访问来源全是代理的 IP

在反向代理或 CDN 之后的日志中,访问来源可能会变成代理的 IP。默认的「自动」只对记录的来源是内部地址(反向代理或 Docker 网关等)的行,从 X-Forwarded-For 确定客户端 IP。直接来自外部的行保持记录的来源不变。头部的值可以伪造,所以用这种方法确定的 IP 不会被当作已验证的爬虫。想关闭时,在设置的「分析」中选择「不使用」。也可以选择使用从右数起第一个不是可信中转的地址,或最左边的地址;这个值可以被客户端改写,所以请只在自己管理的可信中转之后使用。从下次诊断起生效。

← AccessScope 产品页面 前往 RoamSwitch Mac 版操作手册 →