일반적인 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가 사용 설정됨

  1. 전달자를 시작하지 않고 컨테이너로 이동하여 구성 파일을 확인하고 다음 명령어를 실행합니다.

    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_
    

    이 명령어를 사용하면 컨테이너 내부에서 셸로 이동할 수 있습니다.

  2. 다음 명령어를 실행합니다.

    ls -lrt /opt.chronicle/external/
    

    권한 거부 오류가 발생하면 전달자가 구성 파일을 열 수 없으므로 시작할 수 없음을 나타냅니다.

이 문제를 해결하려면 다음 단계를 따르세요.

  1. 다음 명령어를 실행하여 SELinux 상태를 확인합니다.

      sestatus
    
  2. 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

이 문제를 해결하려면 다음 단계를 따르세요.

  1. 전달자 구성 파일에서 압축을 사용 설정합니다.

  2. 구성 파일에서 max_memory_buffer_bytesmax_file_buffer_bytes 매개변수를 업데이트하여 버퍼 크기를 늘립니다. 이 매개변수는 메모리 또는 디스크에 저장된 백로그 일괄 처리의 버퍼를 나타냅니다.

전달자와 호스트가 로그를 수신하지 않음

호스트와 전달자가 로그를 수신하지 않는 경우 각 포트에 대해 다음 명령어를 실행하여 포트 상태를 확인합니다.

  netstat -a | grep PORT

PORT를 확인하려는 포트 ID로 바꿉니다.

명령어에 출력이 없으면 호스트가 해당 포트에서 수신 대기 중이 아님을 나타내므로 네트워크 관리자에게 문의해야 합니다.

명령어의 출력에 호스트가 포트에서 수신 대기 중이고 전달자가 여전히 로그를 수신하지 않는다고 표시되면 다음을 수행하세요.

  1. 다음 명령어를 실행하여 Docker를 중지합니다.

    ​​docker stop cfps
    
    
  2. 네트워크 설정에 따라 다음 명령어 중 하나를 실행합니다.

    TCP의 경우:

    nc -l PORT
    

    UDP의 경우:

    nc -l -u PORT
    

    PORT를 문제 해결하려는 포트 ID로 바꿉니다.

  3. 외부 서비스를 다시 시작하고 문제가 해결됐는지 확인합니다. 문제가 지속되면 [Google Security Operations 지원팀에 문의하세요.

전달자가 로그를 수신하지 않지만 호스트는 로그를 수신함

호스트는 로그를 수신하지만 전달자는 수신하지 않는 경우 전달자가 구성 파일에 지정된 포트에서 수신 대기하고 있지 않다는 의미입니다.

이 문제를 해결하려면 다음 단계를 따르세요.

  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
      
    2. 전달자가 리슨해야 하는 포트를 지정합니다.

      nc -l PORT
      

      PORT를 문제 해결하려는 포트 ID로 바꿉니다.

  2. 두 번째 터미널(호스트)에서 다음 명령어를 실행하여 포트로 테스트 메시지를 전송합니다.

    echo "test message" | nc localhost PORT
    

    PORT를 문제 해결하려는 포트 ID로 바꿉니다.

  3. 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 지원팀에서 문제를 해결하고 디버깅하기 위해 이 명령어의 출력을 요청할 수 있습니다.