일반적인 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 지원팀에 문의하세요.
전달자가 로그를 수신하지 않지만 호스트는 로그를 수신함
호스트가 로그를 수신하지만 전달자는 수신하지 않으면 전달자가 구성 파일에 지정된 포트에서 리슨하지 않음을 나타냅니다.
이 문제를 해결하려면 다음 단계를 따르세요.
시스템에서 터미널 창 두 개를 엽니다. 하나는 전달자를 구성하고 다른 하나는 호스트로 테스트 메시지를 전송하는 데 사용됩니다.
첫 번째 터미널(전달자)에서 다음 명령어를 실행하여 전달자를 시작하지 않고 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 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