Linux : enviar logs a Graylog con rsyslog
Table of Contents
I. Introducción
En este tutorial, aprenderemos a configurar una máquina Linux para que envíe sus registros a un servidor Graylog. Para ello, instalaremos y configuraremos Rsyslog en el sistema.
Para seguir este tutorial, necesitas un servidor Graylog y una máquina Linux (Debian, Ubuntu, Rocky Linux, etc.). Como recordatorio, en un artículo anterior, aprendimos a instalar Graylog en Debian :
La instalación de Graylog no será cubierta en este tutorial, pero veremos como configurar nuestro log sink para recibir logs de máquinas Linux. Por mi parte, la máquina que va a enviar sus registros a Graylog es una máquina llamada "srv-docker" corriendo Debian 12.
II. Configuración de Graylog para recibir logs de Linux
Empezaremos por configurar Graylog. Hay que seguir tres pasos:
- La creación de una entrada para crear un punto de entrada para las máquinas Linux para enviar registros Syslog a través de UDP.
- Creación de un nuevo índice para almacenar e indexar todos los registros de Linux.
- Creación de un flujo para dirigir los registros recibidos por Graylog al nuevo índice Linux.
A. Crear una entrada para Syslog
Conéctese a la interfaz Graylog, haga clic en "System" en el menú y luego en "Inputs". En la lista desplegable, seleccione "Syslog UDP" y, a continuación, haga clic en el botón "Launch new input". También es posible crear una entrada Syslog TCP, pero esto requiere el uso de un certificado TLS: esto es una ventaja para la seguridad, pero no será discutido en este artículo.

Aparecerá un asistente en la pantalla. Empieza dando un nombre a esta Entrada, por ejemplo "Graylog_UDP_Rsyslog_Linux", y elige un puerto. El puerto por defecto es "514" pero puedes personalizarlo. Aquí, el puerto "12514" está seleccionado.

También puede marcar la opción "Store full message" para almacenar el mensaje de registro completo en Graylog. Haga clic en "Launch Input".

La nueva Entrada ha sido creada y ya está activa. Graylog ya puede recibir registros Syslog en el puerto 12514/UDP, pero aún no hemos terminado de configurar la aplicación.

Nota : una sola entrada puede utilizarse para almacenar registros de varias máquinas Linux.
B. Crear un nuevo índice Linux
Necesitamos crear un Índice en Graylog para almacenar los logs de las máquinas Linux. Un índice en Graylog es una estructura de almacenamiento que contiene los registros recibidos, es decir, los mensajes recibidos. Graylog utiliza OpenSearch como motor de almacenamiento, y los mensajes se indexan para permitir búsquedas rápidas y eficientes.
Desde Graylog, haz clic en "System" en el menú y, a continuación, en "Indices". En la nueva página que aparece, haz clic en "Create index set".

Nombra este índice, por ejemplo "Linux Index", añade una descripción y un prefijo, antes de confirmar. Aquí, almacenaremos todos los registros de Linux en este índice. También es posible crear índices específicos para almacenar sólo determinados registros (registros SSH, registros de servicios web, etc.).

Ahora tenemos que crear un nuevo flujo para dirigir los mensajes a este índice.
C. Crear una corriente
Para crear un nuevo flujo, haz clic en "Stream" en el menú principal de Graylog. A continuación, haz clic en el botón "Create stream" de la derecha. En la ventana que aparece, asigne un nombre al flujo, por ejemplo "Linux Stream", y elija el "Linux Index" para el campo "Conjunto de índices". Confirme su elección.
Nota : los mensajes correspondientes a este flujo también se incluirán en el "Flujo por defecto", a menos que marque la opción "Eliminar coincidencias del 'Flujo por defecto'".

A continuación, en la configuración de vapor, haga clic en el botón "Add stream rule" para añadir una nueva regla de enrutamiento de mensajes. Si no encuentra esta ventana, haga clic en "Streams" en el menú, luego en la línea correspondiente a su stream, haga clic en "Plus" y luego en "Manage rules".
Elija el tipo de entrada "match input" y seleccione la entrada Rsyslog UDP creada anteriormente. Confirme con el botón "Create rule". Todos los mensajes a nuestra nueva entrada serán ahora enviados al Index para Linux.

Su nuevo Stream debería aparecer en la lista y estar en estado "Running". El ancho de banda del mensaje muestra "0 msg/s", ya que actualmente no estamos enviando ningún registro a la entrada Rsyslog UDP. Para ver los logs de un stream, simplemente haga clic en su nombre.

Todo está listo en el lado Graylog. El siguiente paso es configurar la máquina Linux.
III. Instalación y configuración de Rsyslog en Linux
Inicie sesión en la máquina Linux, ya sea de forma local o remota, y utilice una cuenta de usuario con permisos para elevar sus privilegios (a través de sudo). De lo contrario, utilice directamente la cuenta "root".
A. Instalación del paquete Rsyslog
Empiece actualizando la caché de paquetes e instalando el paquete "rsyslog ".
sudo apt-get update
sudo apt-get install rsyslog
A continuación, compruebe el estado del servicio. En la mayoría de los casos, ya está en marcha.
sudo systemctl status rsyslog
B. Configuración de Rsyslog
Rsyslog tiene un archivo de configuración principal ubicado aquí:
/etc/rsyslog.conf
Además, el directorio "/etc/rsyslog.d/" se utiliza para almacenar archivos de configuración adicionales para Rsyslog. En el archivo de configuración principal, hay una directiva Include para importar todos los archivos ".conf" ubicados en este directorio. Esto permite disponer de ficheros adicionales para configurar Rsyslog sin modificar el fichero principal.
En este directorio, debe utilizar números para definir el orden de carga, ya que los ficheros se cargan por orden alfabético. Añadir un prefijo numérico permite gestionar la prioridad entre varios ficheros de configuración. Aquí, sólo tenemos un archivo adicional, por lo que no es un problema.
En este directorio, crearemos un archivo llamado "10-graylog.conf" :
sudo nano /etc/rsyslog.d/10-graylog.conf
En este archivo, inserte esta línea :
*.* @192.168.10.220:12514;RSYSLOG_SyslogProtocol23Format
He aquí cómo interpretar esta línea:
- *.* : significa enviar todos los registros Syslog de la máquina Linux a Graylog.
- @: indica que el transporte se realiza en UDP. Para cambiar a TCP, especifique"@@".
- 192.168.10.220:12514: indica la dirección del servidor Graylog, así como el puerto por el que se envían los logs (correspondiente a Entrada).
- RSYSLOG_SyslogProtocol23Format: formato de los mensajes a enviar a Graylog.
Cuando haya terminado, guarde el archivo y reinicie Rsyslog.
sudo systemctl restart rsyslog.service
Tras esta acción, los primeros mensajes deberían llegar a tu servidor Graylog.
IV. Visualización de los registros de Linux en Graylog
Desde Graylog, puedes hacer clic en "Streams" y seleccionar tu nuevo stream para mostrar los mensajes asociados. Alternativamente, haz clic en "Search" y selecciona tu Steam e inicia una búsqueda.
He aquí algunos elementos clave de la interfaz:
1 - Seleccione el periodo durante el cual se mostrarán los mensajes. Por defecto, se muestran los mensajes de los últimos 5 minutos.
2 - Seleccione los flujos que desea visualizar.
3 - Activa la actualización automática de la lista de mensajes (cada 5 segundos, por ejemplo). De lo contrario, será estática y tendrás que actualizarla manualmente.
4 - Haga clic en la lupa para lanzar la búsqueda tras modificar el periodo, el flujo o el filtro.
5 - Barra de entrada para especificar los filtros de búsqueda. Aquí, especifico "source:srv-docker" para mostrar sólo los registros de la nueva máquina en la que acabo de configurar Rsyslog.
Los logs son enviados por la máquina Linux:

V. Identificación de un fallo de conexión SSH
La fuerza de Graylog reside en su capacidad para indexar logs y permitir realizar búsquedas según diversos criterios: máquina de origen, marca de tiempo, contenido del mensaje, etc... Podríamos estar buscando identificar conexiones SSH fallidas.
Desde una máquina remota (el servidor Graylog, por ejemplo), intente conectarse a su servidor Linux en el que acaba de configurar Rsyslog. Por ejemplo:
ssh flo@srv-docker.it-connect.local
A continuación, introduzca deliberadamente un nombre de usuario y una contraseña incorrectos, con el fin de generar errores de conexión. En el archivo "/var/log/auth.log", esto generará mensajes de registro similares a los siguientes:
Failed password for invalid user it-connect from 192.168.10.199 port 50352 ssh2
Deberías encontrar estos mensajes en Graylog.
En Graylog, utilice el siguiente filtro de búsqueda para mostrar sólo los mensajes coincidentes:
message:Failed password AND application_name:sshd
Si dispone de varios servidores y desea analizar los registros de un servidor concreto, especifique su nombre además de :
message:Failed password AND application_name:sshd AND source:srv-docker
He aquí un resumen del resultado en una máquina en la que generé varios errores de conexión, a diferentes horas del día:

Los intentos de conexión infructuosos se realizan desde la máquina con dirección IP "192.168.10.199". Si desea saber más sobre la actividad de este host, puede realizar una búsqueda en esta dirección IP. Graylog mostrará todos los registros en los que se haga referencia a esta dirección IP, en todos los hosts (para los que esté configurado el envío de registros).
En este caso, el filtro a utilizar puede ser :
message:"192.168.10.199"
Obtenemos resultados adicionales (no es sorprendente, ya que no filtramos en la aplicación SSH):

VI. Conclusión
Siguiendo este tutorial, deberías ser capaz de configurar una máquina Linux para que envíe sus logs a un servidor Graylog. De esta manera, ¡podrás centralizar los logs de tus hosts Linux en tu sumidero de logs!
Para ir aún más lejos, considere la posibilidad de crear cuadros de mando y alertas para recibir notificaciones cuando se detecte una anomalía.
