Solucionar problemas habituales del reenviador de Linux
Este documento le ayudará a identificar y solucionar problemas habituales que pueden surgir al usar el reenviador de Linux de Google Security Operations.
El reenviador no se inicia
El reenviador 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
Causa posible 1: Asignación incorrecta en el archivo de configuración
Para solucionar este problema, asegúrate de que estás transfiriendo la ruta correcta al archivo de configuración y de que lo estás asignando a una carpeta externa.
Causa posible 2: SELinux está habilitado
Comprueba el archivo de configuración accediendo 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 llevará a un shell desde el contenedor.
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, sigue estos pasos:
Comprueba el estado de SELinux ejecutando el siguiente comando:
sestatus
Si el estado de SELinux es "enabled" (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
Comprueba si el host no puede resolver direcciones o acceder a Google SecOps ejecutando el siguiente comando:
nslookup malachiteingestion-pa.googleapis.com
Si el comando falla, ponte en contacto con tu equipo de redes para resolver el problema.
Causa posible 2: cortafuegos
Comprueba si el cortafuegos local está bloqueando la comunicación entre Google SecOps y el reenviador ejecutando el siguiente comando:
firewall-cmd --state
Si el cortafuegos está habilitado, inhabilítalo ejecutando el siguiente comando:
systemctl stop firewalld
Causa posible 3: tamaño del búfer
Comprueba si se trata de un problema de tamaño del búfer buscando el siguiente error en los registros:
Memory ceiling (1073741824) reached, freeing a batch from the backlog
Para solucionar este problema, sigue estos pasos:
Habilita la compresión en el archivo de configuración del reenviador.
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 en el disco.
El remitente y el host no reciben registros
Si el host y el reenviador no reciben registros, comprueba el estado del puerto ejecutando el siguiente comando para cada puerto:
netstat -a | grep PORT
Sustituye PORT
por el ID del puerto que quieras comprobar.
Si el comando no devuelve ningún resultado, significa que el host no está escuchando en ese puerto y debes ponerte en contacto con el administrador de tu red.
Si la salida del comando indica que el host está escuchando en un puerto y el reenviador sigue sin recibir registros, haz lo siguiente:
Detén Docker ejecutando el siguiente comando:
docker stop cfps
Ejecuta uno de los siguientes comandos en función de la configuración de tu red.
En el caso de TCP:
nc -l PORT
Para UDP:
nc -l -u PORT
Sustituye
PORT
por el ID del puerto que quieras solucionar.Reinicia el servicio externo y comprueba si se ha resuelto el problema. Si el problema persiste, [ponte en contacto con el equipo de Asistencia de Operaciones de Seguridad de Google.
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, sigue estos pasos:
Abre dos ventanas de terminal en tu sistema: una para configurar el reenviador y otra para enviar un mensaje de prueba al host.
En el primer 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 reenviador:
nc -l PORT
Sustituye
PORT
por el ID del puerto que quieras solucionar.
En el segundo terminal (host), envía el mensaje de prueba en el puerto ejecutando el siguiente comando:
echo "test message" | nc localhost PORT
Sustituye
PORT
por el ID del puerto que quieras solucionar.Vuelve a ejecutar el comando
docker
. Especifica la marca-p
con los puertos en los que debe escuchar el reenviador 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 habituales 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 producirse cuando se añade un tipo de registro no válido. Asegúrate de que solo se añadan tipos de registro válidos. En el mensaje de error de ejemplo, CISCO\_FIREWALL
no es un tipo de registro válido. Para ver una lista de los tipos de registro válidos, consulta Tipos de registro y analizadores predeterminados admitidos.
No se encuentra 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:
Ponte en contacto con tu equipo de redes para asegurarte de que la red funciona.
Firma 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 producirse cuando un archivo de configuración de un reenviador tiene detalles incorrectos de la clave secreta. Ponte en contacto con el equipo de Asistencia de Operaciones de Seguridad de Google para que te ayude a resolver este problema.
El token debe ser un token 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 producirse cuando los relojes del host y del sistema del servidor no están sincronizados. Ajusta la hora en el host o prueba a usar NTP para sincronizar los relojes.
No existe el archivo o el 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 producirse cuando el reenviador se inicia con una asignación de unidad incorrecta. Usa la ruta de directorio completa en el archivo de configuración (puedes obtener la ruta ejecutando el comando pwd
).
No se ha podido obtener 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 debe a una asignación incorrecta o a que el archivo de configuración no está en el directorio. Usa la ruta de directorio completa en el archivo de configuración (puedes obtener la ruta ejecutando el comando pwd
). Asegúrate de que se ejecute el comando docker run
correcto y de que el archivo de configuración se encuentre en la siguiente ubicación:
gcr.io/chronicle-container/cf_production_stable
En el siguiente código de ejemplo 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 obtener información adicional sobre la instalación de Docker con el siguiente comando:
docker info
El servicio Docker podría estar inhabilitado de forma predeterminada. Para comprobar si está inhabilitado, ejecuta el siguiente comando:
systemctl is-enabled docker
Para habilitar el servicio de Docker e iniciarlo inmediatamente, 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 de forma que se reinicie automáticamente:
sudo docker run --restart=always `IMAGE_NAME`
IMAGE_NAME
es el nombre de la imagen de reenvío.Para comprobar el estado y los detalles del servicio 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 la salida de este comando para ayudarte y depurar el problema.
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.