排解常見的 Linux 轉送器問題
本文可協助您辨識及排解使用 Google Security Operations Linux 轉送器時可能遇到的常見問題。
轉送器未啟動
轉送器無法啟動,且持續處於重新啟動循環,記錄中會顯示下列錯誤:
F0510 06:17:39.013603 202 main_linux.go:153] open /opt/chronicle/external/*.conf: no such file or directory
可能原因 1:設定檔中的對應不正確
如要解決這個問題,請確認您將正確路徑傳遞至設定檔,並將其對應至外部資料夾。
可能原因 2:已啟用 SELinux
進入容器 (不啟動轉送器),然後執行下列指令,檢查設定檔:
docker run --name cfps --log-opt max-size=100m --log-opt max-file=10 --net=host -v ~/configuration:/opt/chronicle/external --entrypoint=/bin/bash \ -it gcr.io/chronicle-container/cf_production_
這個指令會將您置於容器內的殼層。
執行下列指令:
ls -lrt /opt.chronicle/external/
如果收到權限遭拒錯誤訊息,表示轉送器無法開啟設定檔,因此無法啟動。
如要解決這個問題,請按照下列步驟操作:
執行下列指令,檢查 SELinux 狀態:
sestatus
如果輸出內容顯示 SELinux 狀態為啟用,請執行下列指令停用:
setenforce 0
記錄未傳送至 Google SecOps 租戶
可能原因 1:DNS 解析
執行下列指令,檢查主機是否無法解析地址或連線至 Google SecOps:
nslookup malachiteingestion-pa.googleapis.com
如果指令失敗,請與網路團隊聯絡以解決問題。
可能原因 2:防火牆
執行下列指令,檢查本機防火牆是否封鎖 Google SecOps 與轉送程式之間的通訊:
firewall-cmd --state
如果防火牆已啟用,請執行下列指令停用:
systemctl stop firewalld
可能原因 3:緩衝區大小
在記錄中尋找下列錯誤,確認是否為緩衝區大小問題:
Memory ceiling (1073741824) reached, freeing a batch from the backlog
如要解決這個問題,請按照下列步驟操作:
在轉送器設定檔中啟用壓縮功能。
增加緩衝區大小 更新設定檔中的
max_memory_buffer_bytes
和max_file_buffer_bytes
參數。 這些參數表示儲存在記憶體或磁碟中的待處理批次緩衝區。
轉寄器和主機未收到記錄
如果主機和轉送器未收到記錄,請針對每個通訊埠執行下列指令,檢查通訊埠狀態:
netstat -a | grep PORT
將 PORT
替換為要檢查的連接埠 ID。
如果指令未產生任何輸出內容,表示主機未監聽該連接埠,請諮詢網路管理員。
如果指令輸出內容指出主機正在接聽某個連接埠,但轉送器仍未收到記錄,請按照下列步驟操作:
執行下列指令,停止 Docker:
docker stop cfps
根據網路設定執行下列其中一個指令。
TCP:
nc -l PORT
UDP:
nc -l -u PORT
將
PORT
替換為要排解問題的連接埠 ID。重新啟動外部服務,確認問題是否解決。如果問題仍未解決,請 [與 Google SecOps 支援團隊聯絡。
轉寄者未收到記錄,但主機收到記錄
如果主機收到記錄,但轉送器沒有,表示轉送器未監聽設定檔中指定的連接埠。
如要解決這個問題,請按照下列步驟操作:
在系統上開啟兩個終端機視窗,一個用於設定轉送器,另一個用於傳送測試訊息給主機。
在第一個終端機 (轉送器) 上,執行下列指令啟動 Docker,但不啟動轉送器:
docker run \ --name cfps \ --log-opt max-size=100m \ --log-opt max-file=10 \ --net=host \ -v ~/config:/opt/chronicle/external \ --entrypoint=/bin/bash \ -it gcr.io/chronicle-container/cf_production_stable
指定轉送器應監聽的通訊埠:
nc -l PORT
將
PORT
替換為要排解問題的連接埠 ID。
在第二個終端機 (主機) 上,執行下列指令,透過通訊埠傳送測試訊息:
echo "test message" | nc localhost PORT
將
PORT
替換為要排解問題的連接埠 ID。重新執行
docker
指令。執行下列指令,指定-p
標記和轉送器應監聽的連接埠:docker run \ --detach \ –name cfps \ --restart=always \ --log-opt max-size=100m \ --log-opt max-file=10 --net=host \ —v /root/config:/opt/chronicle/external \ -p 11500:11800 \ gcr.io/chronicle-container/cf_production_stable
轉送程式記錄檔中的常見錯誤
如要查看轉送器記錄,請執行下列指令:
sudo docker logs cfps
要求含有無效引數
轉送器記錄檔會顯示下列錯誤訊息:
I0912 18:04:15.187321 333 uploader.go:181] Sent batch error: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
E0912 18:04:15.410572 333 batcher.go:345] [2_syslog_CISCO_FIREWALL-tid-0] Error exporting batch: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
I0912 18:04:15.964923 333 uploader.go:181] Sent batch error: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
解決方法:
如果新增的記錄類型無效,就可能發生這個錯誤。請確認只新增有效的記錄類型。在錯誤訊息範例中,CISCO\_FIREWALL
不是有效的記錄類型。如需有效記錄檔類型清單,請參閱「支援的記錄檔類型和預設剖析器」。
找不到伺服器
轉送器記錄檔會顯示下列錯誤訊息:
{"log":"Failure: Unable to find the server at accounts.google.com.\n","stream":"stderr","time":"2019-06-12T18:26:53.858804303Z"}`
{"log":"+ [[ 1 -ne 0 ]]\n","stream":"stderr","time":"2019-06-12T18:26:53.919837669Z"}
{"log":"+ err 'ERROR: Problem accessing the Chronicle bundle.'\n","stream":"stderr","time":"2019-06-12T18:26:53.919877852Z"}
解決方法:
請與網路團隊聯絡,確認網路運作正常。
JWT 簽章無效
轉送器記錄檔會顯示下列錯誤訊息:
E0330 17:05:28.728021 162 stats_manager.go:85] send(): rpc error: code = Unauthenticated desc = transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
E0404 17:05:28.729012 474 memory.go:483] [1_syslog_FORTINET_FIREWAL-tid-0] Error exporting batch: rpc error: code = Unauthenticated desc = transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
解決方法:
如果轉送器設定檔的密鑰詳細資料有誤,就可能發生這項錯誤。與 Google SecOps 支援團隊聯絡,協助解決這個問題。
權杖必須是短期權杖
轉送器記錄檔會顯示下列錯誤訊息:
token: 400 Bad Request Response:
{"error":"invalid_grant","error_description":"Invalid JWT: Token must be a
short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values in the JWT claim."} I0412 05:14:16.539060 480
malachite.go:212] Sent batch error: rpc error: code = Unauthenticated desc =
transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response:
{"error":"invalid_grant","error_description":"Invalid JWT: Token must be a
short-lived token (60 minutes)
解決方法:
如果主機和伺服器系統時鐘未同步,就可能發生這個錯誤。調整主機上的時間,或嘗試使用 NTP 同步處理時鐘。
找不到你所指定的檔案或目錄
轉送器記錄檔會顯示下列錯誤訊息:
++ cat '/opt/chronicle/external/*.conf'
cat: '/opt/chronicle/external/*.conf': No such file or directory
解決方法:
如果轉送器啟動時的磁碟機對應錯誤,就可能發生這項錯誤。在設定檔中使用完整目錄路徑 (您可以執行 pwd
指令取得路徑)。
無法從設定檔擷取客戶 ID
轉送器記錄檔會顯示下列錯誤訊息:
+ err 'ERROR: Failed to retrieve customer ID from configuration file.'
++ date +%Y-%m-%dT%H:%M:%S%z
+ echo '[2023-06-28T09:53:21+0000]: ERROR: Failed to retrieve customer ID from configuration file.'
[2023-06-28T09:53:21+0000]: ERROR: Failed to retrieve customer ID from configuration file.
+ err '==> Please contact the Chronicle support team.'
解決方法:
如果對應不正確,或目錄中沒有設定檔,就會發生這項錯誤。在設定檔中使用完整目錄路徑 (您可以執行 pwd
指令取得路徑)。請確認已執行正確的 docker run
指令,且設定檔位於下列位置:
gcr.io/chronicle-container/cf_production_stable
下列程式碼範例顯示 docker run
指令:
docker run \
--detach \
--name cfps \
--restart=always \
--log-opt max-size=100m \
--log-opt max-file=10 \
--net=host \
-v /opt/chronicle/config:/opt/chronicle/external \
gcr.io/chronicle-container/cf_production_stable
實用的 Docker 指令
您可以使用下列指令,收集 Docker 安裝作業的額外資訊:
docker info
Docker 服務預設可能為停用。如要檢查是否已停用,請執行下列指令:
systemctl is-enabled docker
如要啟用 Docker 服務並立即啟動,請執行下列其中一個指令:
sudo systemctl enable --now docker
sudo systemctl enable /usr/lib/systemd/system/docker.service
輸出:
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service
啟動轉送器時,請執行下列指令,將轉送器設為自動重新啟動:
sudo docker run --restart=always `IMAGE_NAME`
IMAGE_NAME
是轉送器映像檔名稱。如要檢查 Docker 服務的狀態和詳細資料,請執行下列指令:
sudo systemctl status docker
輸出:
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-07-18 11:14:05 UTC; 15s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 263 (dockerd) Tasks: 20 Memory: 100.4M CGroup: /system.slice/docker.service └─263 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Jul 18 11:14:05 swarm-kraken dockerd[263]: time="2020-07-18T11:14:05.713787002Z" level=info msg="API listen on /run/docker.sock" Jul 18 11:14:05 swarm-kraken systemd[1]: Started Docker Application Container Engine
如果 Docker 發生任何問題,Google SecOps 支援團隊可能會要求您提供這項指令的輸出內容,以協助排解問題。
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。