Soluciona problemas comunes del reenvío de Linux
En este documento, se te ayuda a reconocer y solucionar problemas comunes que puedes enfrentar cuando usas el agente de reenvío de Linux de Operaciones de seguridad de Google.
El reenvío no se inicia
El reenvío no se inicia y se encuentra 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
Para verificar el archivo de configuración, ingresa al contenedor sin iniciar el 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 colocará en una shell desde el interior del contenedor.
Ejecuta el siguiente comando:
ls -lrt /opt.chronicle/external/
Si recibes un error de permiso denegado, significa que el reenvío no puede abrir el archivo de configuración y, por lo tanto, no puede iniciarse.
Para solucionar este problema, haz lo siguiente:
Ejecuta el siguiente comando para verificar el estado de SELinux:
sestatus
Si el estado de SELinux está habilitado en el resultado, ejecuta el siguiente comando para inhabilitarlo:
setenforce 0
Los registros no llegan al arrendatario de Google SecOps
Causa posible 1: Resolución de DNS
Ejecuta el siguiente comando para verificar si el host no puede resolver direcciones o comunicarse con el equipo de Operaciones de seguridad de Google:
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 SecOps y el reenviador:
firewall-cmd --state
Si el firewall está habilitado, inhabilítalo ejecutando 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:
Habilita la compresión en el archivo de configuración del reenvío.
Aumenta el tamaño del búfer actualizando los parámetros
max_memory_buffer_bytes
ymax_file_buffer_bytes
en el archivo de configuración. Estos parámetros indican el búfer de lotes pendientes que se almacenan en la memoria o el disco.
El host y el reenvío no reciben registros
Si el host y el reenvío no reciben registros, verifica el estado del puerto ejecutando el siguiente comando para cada 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 reenvío aún no recibe registros, haz lo siguiente:
Detén Docker con el siguiente comando:
docker stop cfps
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 para el que deseas solucionar problemas.Reinicia tu servicio externo y verifica si se resolvió el problema. Si el problema persiste, [comunícate con el equipo de asistencia de Operaciones de seguridad de Google.
El retransmisor no recibe registros, pero el host sí
Si el host recibe registros, pero el retransmisor no, esto indica que el retransmisor no está escuchando en el puerto especificado en el archivo de configuración.
Para solucionar este problema, haz lo siguiente:
Abre dos ventanas de terminal en tu sistema, una para configurar el reenvío y otra para enviar un mensaje de prueba al host.
En la primera terminal (reenviador), inicia Docker sin iniciar el reenviador ejecutando el siguiente comando:
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
Especifica el puerto en el que debe escuchar el reenvío:
nc -l PORT
Reemplaza
PORT
por el ID del puerto para el que deseas solucionar problemas.
En la segunda terminal (host), envía el mensaje de prueba en el puerto ejecutando el siguiente comando:
echo "test message" | nc localhost PORT
Reemplaza
PORT
por el ID del puerto para el que deseas solucionar problemas.Vuelve a ejecutar el comando
docker
. Especifica la marca-p
con los puertos en los que el reenvío debe escuchar ejecutando el siguiente comando: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 reenvío
Para ver los registros del reenvío, ejecuta el siguiente comando:
sudo docker logs cfps
La solicitud contiene un argumento no válido
El archivo de registro del 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.
Resolución:
Este error puede ocurrir cuando se agrega un tipo de registro no válido. Asegúrate de agregar solo tipos de registros válidos. En el mensaje de error de ejemplo, 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 admitidos y analizadores predeterminados.
No se pudo encontrar el servidor
El archivo de registro del 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"}
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 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."}
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 SecOps de Google para resolver este problema.
El token debe ser de corta duración
El archivo de registro del 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)
Resolució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 del reenvío 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 el reenvío se inicia 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 ejecutando el comando pwd
).
No se pudo recuperar el ID de cliente del archivo de configuración
El archivo de registro del 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.'
Resolución:
Este error se debe a una asignación incorrecta o a que 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 ejecutando 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 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
Comandos de Docker útiles
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 reenvío, ejecuta el siguiente comando para configurar el reenvío para que se reinicie automáticamente:
sudo docker run --restart=always `IMAGE_NAME`
IMAGE_NAME
es el nombre de la imagen del reenvío.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 SecOps de Google 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.