Soluciona problemas comunes del reenviador de Linux
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
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.
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:
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 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:
Habilita la compresión en el archivo de configuración del reenviador.
Para aumentar el tamaño del búfer, actualiza 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 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:
Ejecuta el siguiente comando para detener Docker:
docker stop cfps
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.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:
Abre dos ventanas de terminal en el sistema, una para configurar el reenviador y otra para enviar un mensaje de prueba al host.
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
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.
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.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.