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. 按下「開始診斷」。畫面會顯示「正在讀取日誌」「正在分析」等進度,完成後會開啟結果。
唯讀
日誌檔案不會被修改。因權限不足而讀不到的日誌,不會被提升權限去讀,而是顯示為無法讀取。

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 版操作手冊 →