Soluciona problemas comunes del servidor de reenvío de Linux

Esta página te ayuda a reconocer y solucionar problemas comunes que puedes encontrar cuando usas el servidor de reenvío de Linux de Google Security Operations.

El reenvío no se inicia

Forwarder 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

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 asignarlo a una carpeta externa.

Causa posible 2: SELinux está habilitado

  1. Para verificar el archivo de configuración, accede al contenedor sin iniciar el servidor de reenvío 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 pondrá en una shell desde el contenedor.

  2. Ejecuta el siguiente comando:

    ls -lrt /opt.chronicle/external/ 
    

    Si se muestra un error de denegación de permisos, 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. Verifica el estado de SELinux ejecutando el siguiente comando:

      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 usuario de Google Security Operations

Causa posible 1: resolución de DNS

Verifica si el host no puede resolver direcciones o comunicarse con Google Security Operations mediante la ejecución del siguiente comando:

  nslookup malachiteingestion-pa.googleapis.com

Si el comando falla, comunícate con tu equipo de redes para obtener una solución.

Causa posible 2: firewall

Ejecuta el siguiente comando para verificar si el firewall local está bloqueando la comunicación entre Google Security Operations y el servidor de reenvío:

  firewall-cmd --state

Si el firewall está habilitado, ejecuta el siguiente comando para inhabilitarlo:

  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 de reenvío.

  2. Aumenta el tamaño del búfer mediante la actualización de 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 los lotes de tareas pendientes que se almacenan en la memoria o en el disco.

El reenvío y el host no reciben registros

Si el host y el servidor de reenvío no reciben registros, verifica el estado del puerto mediante la ejecución del siguiente comando para cada puerto:

  netstat -a | grep PORT

Reemplaza PORT por el ID del puerto que deseas verificar.

Si el comando no genera 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 que el servidor de reenvío todavía no recibe registros, haz lo siguiente:

  1. Detén Docker ejecutando el siguiente comando:

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

    Para TCP:

    nc -l PORT
    

    Para UDP:

    nc -l -u PORT
    

    Reemplaza PORT por el ID del puerto del que deseas solucionar problemas.

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

El reenvío no recibe registros, pero el host sí los recibe

Si el host recibe registros, pero el servidor de reenvío no, significa que el reenvío 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 tu sistema, una para configurar el reenviador y otra para enviar un mensaje de prueba al host.

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

      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 el servidor de reenvío debe escuchar:

      nc -l PORT
      

      Reemplaza PORT por el ID del puerto del que deseas solucionar problemas.

  2. En la segunda terminal (host), envía el mensaje de prueba en el puerto mediante la ejecución del siguiente comando:

    echo "test message" | nc localhost PORT
    

    Reemplaza PORT por el ID del puerto del que deseas solucionar problemas.

  3. Vuelve a ejecutar el comando docker. Ejecuta el siguiente comando para especificar la marca -p con los puertos en los que el reenvío 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 de reenvío, ejecuta el siguiente comando:

  sudo docker logs cfps

La solicitud contiene un argumento no válido

El archivo de registro de reenvío 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.

Solución:

Este error puede ocurrir cuando se agrega un tipo de registro no válido. Asegúrate de que solo se agreguen tipos de registro 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, visita Tipos de registros compatibles y analizadores predeterminados.

No se pudo encontrar el servidor

El archivo de registro de reenvío 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"}

Solución:

Comunícate con el equipo de redes para asegurarte de que la red esté funcionando.

Firma de JWT no válida

El archivo de registro de reenvío 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."}

Solució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 ayudar a resolver este problema.

El token debe ser de corta duración

El archivo de registro de reenvío 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)

Solución:

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

El archivo o directorio no existe.

El archivo de registro de reenvío muestra el siguiente mensaje de error:

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

Solución:

Este error puede ocurrir cuando el servidor de reenvío se inicia con una asignación de unidad incorrecta. Usa la ruta de acceso completa del directorio en el archivo de configuración (para obtener la ruta, ejecuta el comando pwd).

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

El archivo de registro de reenvío 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.'

Solución:

Este error se debe a 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 mediante la ejecución del 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 la siguiente muestra 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