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 Security Operations テナントに届かない
考えられる原因 1: DNS の解決
次のコマンドを実行して、ホストがアドレスを解決できないか、または Google Security Operations にアクセスできないかを確認します。
nslookup malachiteingestion-pa.googleapis.com
コマンドが失敗した場合は、ネットワーク チームに解決を依頼してください。
考えられる原因 2: ファイアウォール
次のコマンドを実行して、ローカル ファイアウォールが Google Security Operations とフォワーダー間の通信をブロックしているかを確認します。
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 Security Operations サポートにお問い合わせください。
フォワーダーはログを受信していないがホストはログを受信している
ホストがログを受信していて、フォワーダーが受信していない場合は、フォワーダーが構成ファイルで指定されたポートでリッスンしていないことを示します。
この問題を解決するには、次の操作を行います。
システム上で 2 つのターミナル ウィンドウを開きます。1 つはフォワーダーの構成用で、もう 1 つはホストへのテスト メッセージの送信用です。
最初のターミナル(フォワーダー)で、次のコマンドを実行して、フォワーダーを起動せずに 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 に置き換えます。
2 番目のターミナル(ホスト)で、次のコマンドを実行して、ポートでテスト メッセージを送信します。
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 Security Operations サポートにお問い合わせください。
トークンは有効期間が短いトークンである必要がある
フォワーダー ログファイルに次のエラー メッセージが表示されます。
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 の専門家から回答を得る。