Soluciona problemas comunes del reenviador de Linux

Compatible con:

En este documento, se te ayuda a reconocer y solucionar problemas comunes que puedes encontrar cuando usas el reenviador de Linux de Google Security Operations.

El reenviador no se inicia

El reenviador no se inicia y está en un bucle de reinicio continuo con el siguiente error en los registros:

F0510 06:17:39.013603 202 main_linux.go:153] open /opt/chronicle/external/*.conf: no such file or directory

Posible causa 1: Asignación incorrecta en el archivo de configuración

Para resolver este problema, asegúrate de pasar la ruta de acceso correcta al archivo de configuración y asignarla a una carpeta externa.

Causa posible 2: SELinux está habilitado

  1. Para verificar el archivo de configuración, ingresa al contenedor sin iniciar el reenviador y ejecuta el siguiente comando:

    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_
    

    Este comando te colocará en una shell desde el contenedor.

  2. Ejecuta el siguiente comando:

    ls -lrt /opt.chronicle/external/
    

    Si recibes un error de permiso denegado, significa que el reenviador no puede abrir el archivo de configuración y, por lo tanto, no puede iniciarse.

Para solucionar este problema, haz lo siguiente:

  1. Ejecuta el siguiente comando para verificar el estado de SELinux:

      sestatus
    
  2. Si el estado de SELinux está habilitado en el resultado, ejecuta el siguiente comando para inhabilitarlo:

      setenforce 0
    

Los registros no llegan al inquilino de Google Security Operations

Posible causa 1: Resolución de DNS

Ejecuta el siguiente comando para verificar si el host no puede resolver direcciones ni comunicarse con Google Security Operations:

  nslookup malachiteingestion-pa.googleapis.com

Si el comando falla, comunícate con tu equipo de redes para resolver el problema.

Causa posible 2: Firewall

Ejecuta el siguiente comando para verificar si el firewall local bloquea la comunicación entre Google Security Operations y el reenviador:

  firewall-cmd --state

Si el firewall está habilitado, inhabilitalo mediante el siguiente comando:

  systemctl stop firewalld

Causa posible 3: Tamaño del búfer

Para verificar si se trata de un problema de tamaño del búfer, busca el siguiente error en los registros:

Memory ceiling (1073741824) reached, freeing a batch from the backlog

Para solucionar este problema, haz lo siguiente:

  1. Habilita la compresión en el archivo de configuración del reenviador.

  2. Para aumentar el tamaño del búfer, actualiza los parámetros max_memory_buffer_bytes y max_file_buffer_bytes en el archivo de configuración. Estos parámetros indican el búfer de lotes de tareas pendientes que se almacenan en la memoria o el disco.

El reenviador y el host no reciben registros

Si el host y el reenviador no reciben registros, ejecuta el siguiente comando para cada puerto para verificar el estado del puerto:

  netstat -a | grep PORT

Reemplaza PORT por el ID del puerto que deseas verificar.

Si el comando no muestra ningún resultado, significa que el host no está escuchando en ese puerto y debes consultar a tu administrador de red.

Si el resultado del comando indica que el host está escuchando en un puerto y el reenviador aún no recibe registros, haz lo siguiente:

  1. Ejecuta el siguiente comando para detener Docker:

    ​​docker stop cfps
    
    
  2. Ejecuta uno de los siguientes comandos según la configuración de red.

    Para TCP:

    nc -l PORT
    

    Para UDP:

    nc -l -u PORT
    

    Reemplaza PORT por el ID del puerto para el que deseas solucionar el problema.

  3. Reinicia el servicio externo y comprueba si se resolvió el problema. Si el problema persiste, [comunícate con el equipo de asistencia de Google Security Operations.

El reenviador no recibe registros, pero el host sí

Si el host recibe registros, pero el reenviador no, significa que el reenviador no está escuchando en el puerto especificado en el archivo de configuración.

Para solucionar este problema, haz lo siguiente:

  1. Abre dos ventanas de terminal en el sistema, una para configurar el reenviador y otra para enviar un mensaje de prueba al host.

    1. En la primera terminal (redireccionamiento), ejecuta el siguiente comando para iniciar Docker sin iniciar el redireccionamiento:

      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. Especifica el puerto en el que debe escuchar el reenviador:

      nc -l PORT
      

      Reemplaza PORT por el ID del puerto para el que deseas solucionar el problema.

  2. En la segunda terminal (host), ejecuta el siguiente comando para enviar el mensaje de prueba en el puerto:

    echo "test message" | nc localhost PORT
    

    Reemplaza PORT por el ID del puerto para el que deseas solucionar el problema.

  3. Vuelve a ejecutar el comando docker. Ejecuta el siguiente comando para especificar la marca -p con los puertos en los que el reenviador debe escuchar:

    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
    

Errores comunes en el archivo de registro del reenviador

Para ver los registros del reenviador, ejecuta el siguiente comando:

  sudo docker logs cfps

La solicitud contiene un argumento no válido

El archivo de registro del reenviador muestra el siguiente mensaje de error:

  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.

Resolución:

Este error puede ocurrir cuando se agrega un tipo de registro no válido. Asegúrate de que solo se agreguen tipos de registros válidos. En el mensaje de error de muestra, CISCO\_FIREWALL no es un tipo de registro válido. Para obtener una lista de los tipos de registros válidos, consulta Tipos de registros admitidos y analizadores predeterminados.

No se pudo encontrar el servidor

El archivo de registro del reenviador muestra el siguiente mensaje de error:

{"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"}

Resolución:

Comunícate con tu equipo de redes para asegurarte de que la red funcione.

Firma de JWT no válida

El archivo de registro del reenviador muestra el siguiente mensaje de error:

    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."}

Resolución:

Este error puede ocurrir cuando un archivo de configuración de reenvío tiene detalles incorrectos de la clave secreta. Comunícate con el equipo de asistencia de Google Security Operations para resolver este problema.

El token debe ser de corta duración

El archivo de registro del reenviador muestra el siguiente mensaje de error:

      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)

Resolución:

Este error puede ocurrir cuando los relojes del host y del sistema del servidor no están sincronizados. Ajusta la hora en el host o intenta usar NTP para sincronizar los relojes.

No existe el archivo o directorio

El archivo de registro del reenviador muestra el siguiente mensaje de error:

    ++ cat '/opt/chronicle/external/*.conf'
    cat: '/opt/chronicle/external/*.conf': No such file or directory

Resolución:

Este error puede ocurrir cuando se inicia el reenviador con la asignación de unidad incorrecta. Usa la ruta de acceso completa del directorio en el archivo de configuración (puedes obtener la ruta de acceso si ejecutas el comando pwd).

No se pudo recuperar el ID de cliente del archivo de configuración

El archivo de registro del reenviador muestra el siguiente mensaje de error:

    + 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.'

Resolución:

Este error se produce por una asignación incorrecta o si el archivo de configuración no está presente en el directorio. Usa la ruta de acceso completa del directorio en el archivo de configuración (puedes obtener la ruta de acceso si ejecutas el comando pwd). Asegúrate de que se ejecute el comando docker run correcto y de que el archivo de configuración exista en la siguiente ubicación:

    gcr.io/chronicle-container/cf_production_stable

En el siguiente ejemplo de código, se muestra el comando 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

Comandos útiles de Docker

  • Puedes recopilar información adicional sobre la instalación de Docker con el siguiente comando:

    docker info
    
  • Es posible que el servicio de Docker esté inhabilitado de forma predeterminada. Para verificar si está inhabilitado, ejecuta el siguiente comando:

    systemctl is-enabled docker
    
  • Para habilitar el servicio de Docker y, luego, iniciarlo de inmediato, ejecuta uno de los siguientes comandos:

    sudo systemctl enable --now docker
    
    sudo systemctl enable /usr/lib/systemd/system/docker.service
    

    Resultado:

    Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service
    
  • Cuando inicies un reenviador, ejecuta el siguiente comando para configurarlo para que se reinicie automáticamente:

    sudo docker run --restart=always `IMAGE_NAME`
    

    IMAGE_NAME es el nombre de la imagen del reenviador.

  • Para verificar el estado y los detalles del servicio de Docker, ejecuta el siguiente comando:

    sudo systemctl status docker
    

    Resultado:

     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
    

    Si tienes algún problema con Docker, el equipo de asistencia de Google SecOps puede solicitar el resultado de este comando para ayudarte a depurar el problema.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.