Analizar Registros en Graylog

NmapBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a utilizar Graylog, una potente plataforma de gestión de registros de código abierto, para recopilar y analizar datos de registros. El registro centralizado es un componente crítico de la ciberseguridad, ya que le permite monitorizar eventos del sistema, detectar anomalías e investigar incidentes de seguridad desde una única interfaz.

Comenzará desplegando toda la pila de Graylog, que incluye MongoDB y OpenSearch (el reemplazo moderno de Elasticsearch), utilizando Docker Compose. Luego configurará Graylog para recibir datos de registros, le enviará registros de ejemplo, realizará consultas de búsqueda para filtrar información y, finalmente, creará un panel visual para monitorizar métricas clave. Al final de este laboratorio, tendrá experiencia práctica con el flujo de trabajo fundamental del análisis de registros en Graylog.

Desplegar Graylog con Docker Compose

En este primer paso, desplegará la plataforma de registro Graylog. Utilizaremos Docker Compose v2, una herramienta para definir y ejecutar aplicaciones multi-contenedor de Docker. Este enfoque simplifica el proceso de configuración al gestionar todos los componentes necesarios —Graylog, OpenSearch y MongoDB— con un único archivo de configuración.

Primero, preparemos el entorno y lancemos los servicios.

  1. El script de configuración ya ha instalado Docker Compose v2 por usted. Puede verificar la instalación comprobando su versión.

    docker compose version

    Debería ver una salida que indique la versión de Docker Compose, similar a esta:

    Docker Compose version v2.29.7
  2. Navegue al directorio dedicado para su configuración de Graylog. Esto ayuda a mantener su proyecto organizado.

    cd /home/labex/project/graylog
  3. A continuación, cree el archivo de configuración docker-compose.yml utilizando el editor de texto nano. Este archivo indica a Docker Compose qué contenedores ejecutar y cómo configurarlos.

    nano docker-compose.yml
  4. Copie y pegue la siguiente configuración YAML en el editor nano. Esta configuración define tres servicios:

    • mongodb: Almacena los datos de configuración de Graylog.
    • opensearch: Indexa y almacena los mensajes de registro para búsquedas rápidas. Tenga en cuenta que OpenSearch 2.12+ requiere una contraseña de administrador inicial.
    • graylog: La aplicación principal, que proporciona la interfaz web y el motor de procesamiento de registros.
    services:
      mongodb:
        image: mongo:6.0
        container_name: graylog_mongodb
        volumes:
          - mongo_data:/data/db
        networks:
          - graylog_network
        healthcheck:
          test: ["CMD", "mongosh", "--eval", "db.runCommand('ping').ok"]
          interval: 30s
          timeout: 10s
          retries: 3
      opensearch:
        image: opensearchproject/opensearch:2.13.0
        container_name: graylog_opensearch
        environment:
          - discovery.type=single-node
          - plugins.security.disabled=true
          - bootstrap.memory_lock=true
          - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
          - "OPENSEARCH_INITIAL_ADMIN_PASSWORD=StrongPassword123!"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - opensearch_data:/usr/share/opensearch/data
        networks:
          - graylog_network
        healthcheck:
          test:
            [
              "CMD-SHELL",
              "curl -f http://localhost:9200/_cluster/health || exit 1"
            ]
          interval: 30s
          timeout: 10s
          retries: 3
      graylog:
        image: graylog/graylog:6.1
        container_name: graylog_server
        volumes:
          - graylog_data:/usr/share/graylog/data
        environment:
          - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
          - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
          - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
          - GRAYLOG_ELASTICSEARCH_HOSTS=http://opensearch:9200
          - GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
        depends_on:
          mongodb:
            condition: service_healthy
          opensearch:
            condition: service_healthy
        ports:
          - "9000:9000"
          - "1514:1514"
          - "1514:1514/udp"
          - "12201:12201"
          - "12201:12201/udp"
        networks:
          - graylog_network
    volumes:
      mongo_data:
      opensearch_data:
      graylog_data:
    networks:
      graylog_network:
        driver: bridge

    Presione Ctrl+O, luego Enter para guardar el archivo, y Ctrl+X para salir de nano.

  5. Ahora, inicie todos los servicios en segundo plano utilizando la bandera -d (detached).

    docker compose up -d
  6. Puede tardar uno o dos minutos en inicializarse todos los servicios. Puede comprobar el estado de sus contenedores para asegurarse de que se están ejecutando correctamente.

    docker compose ps

    Debería ver los tres servicios (graylog_server, graylog_opensearch, graylog_mongodb) con un State de Up.

    NAME                 IMAGE                                 COMMAND                  SERVICE      CREATED              STATUS                        PORTS
    graylog_mongodb      mongo:6.0                             "docker-entrypoint.s…"   mongodb      About a minute ago   Up About a minute (healthy)   27017/tcp
    graylog_opensearch   opensearchproject/opensearch:2.13.0   "./opensearch-docker…"   opensearch   About a minute ago   Up About a minute (healthy)   9200/tcp, 9300/tcp, 9600/tcp, 9650/tcp
    graylog_server       graylog/graylog:6.1                   "tini -- /docker-ent…"   graylog      About a minute ago   Up 34 seconds (healthy)       0.0.0.0:1514->1514/tcp, :::1514->1514/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:1514->1514/udp, :::9000->9000/tcp, :::1514->1514/udp, 0.0.0.0:12201->12201/tcp, 0.0.0.0:12201->12201/udp, :::12201->12201/tcp, :::12201->12201/udp

La interfaz web de Graylog ya es accesible. Ha desplegado con éxito la pila de Graylog y está listo para configurarla.

Configurar una Entrada Syslog

Con Graylog en funcionamiento, el siguiente paso es configurar una "Entrada" (Input). Una entrada es un componente que le indica a Graylog cómo aceptar mensajes de registro. Para este laboratorio, creará una entrada Syslog UDP, que es un estándar común para recopilar registros de dispositivos de red y servidores Linux/Unix.

  1. Abra la interfaz web de Graylog en su navegador. Puede hacerlo haciendo clic en la pestaña "Web Terminal" y seleccionando "Desktop" para abrir el navegador, o utilizando el icono del navegador dedicado en el entorno del laboratorio. Navegue a la siguiente URL:

    http://127.0.0.1:9000

    Interfaz web de Graylog
  2. Inicie sesión con las credenciales predeterminadas:

    • Nombre de usuario: admin
    • Contraseña: admin
  3. Una vez que haya iniciado sesión, creará la nueva entrada. En la barra de navegación superior, haga clic en System (Sistema) y luego seleccione Inputs (Entradas) en el menú desplegable.

  4. En la página de Entradas, busque el tipo de entrada "Syslog UDP" en la lista desplegable "Select input" (Seleccionar entrada) y haga clic en el botón Launch new input (Lanzar nueva entrada) que se encuentra junto a ella.

  5. Aparecerá una ventana modal. Rellene el formulario con los siguientes detalles para configurar la entrada:

    • Node (Nodo): Seleccione el único nodo disponible en el menú desplegable (será su servidor Graylog).
    • Title (Título): Syslog UDP Input (Este es un nombre descriptivo para su entrada).
    • Bind address (Dirección de enlace): 0.0.0.0 (Esto indica a Graylog que escuche los registros en todas las interfaces de red del contenedor).
    • Port (Puerto): 1514 (Este es el puerto en el que Graylog escuchará los mensajes syslog entrantes).

    Deje todas las demás configuraciones como están por defecto y haga clic en Save (Guardar).

  6. Después de guardar, volverá a la página de Entradas. Su nueva "Syslog UDP Input" debería aparecer en la lista con un estado verde "Running" (En ejecución), lo que indica que está activa y lista para recibir datos.

  7. Para probar la entrada, regrese a su terminal y envíe un mensaje de registro de ejemplo utilizando la utilidad netcat (nc). Este comando construye un mensaje syslog básico y lo envía al puerto UDP 1514 en su máquina local.

    echo "<14>$(date +'%b %d %H:%M:%S') localhost labex: Test syslog message" | nc -w1 -u 127.0.0.1 1514

Ahora ha configurado Graylog con éxito para recibir registros. En el siguiente paso, enviará registros más estructurados y aprenderá a verlos en la interfaz de Graylog.

Enviar y Ver Registros de Muestra

Ahora que su entrada Syslog está lista, es hora de generar y enviar un lote de registros de muestra. Esto poblará Graylog con datos, permitiéndole practicar la búsqueda y el análisis. Creará un script simple de shell para simular mensajes de registro de una aplicación.

  1. Primero, navegue de regreso al directorio raíz de su proyecto en la terminal.

    cd /home/labex/project
  2. Cree un nuevo script de shell llamado generate_logs.sh utilizando el editor nano.

    nano generate_logs.sh
  3. Copie y pegue el siguiente script en el editor. Este script genera 10 mensajes de registro en un bucle. Cada mensaje tiene un nivel de severidad aleatorio, una marca de tiempo y un cuerpo de mensaje simple. Luego utiliza nc para enviar cada registro a la entrada de Graylog que configuró.

    #!/bin/bash
    for i in {1..10}; do
      severity=$(((RANDOM % 8)))
      timestamp=$(date +'%b %d %H:%M:%S')
      echo "<$((severity + 8))>$timestamp localhost sample_app[$i]: Sample log message $i with severity $severity" | nc -w1 -u 127.0.0.1 1514
      echo "Sent log message $i"
      sleep 1
    done

    Presione Ctrl+O, Enter, y Ctrl+X para guardar y salir.

  4. Haga que el script sea ejecutable utilizando el comando chmod.

    chmod +x generate_logs.sh
  5. Ejecute el script para enviar los registros a Graylog.

    ./generate_logs.sh

    Verá la salida en su terminal a medida que se envía cada registro.

    Sent log message 1
    Sent log message 2
    ...
    Sent log message 10
  6. Ahora, veamos estos registros en Graylog. Vuelva a la interfaz web de Graylog en su navegador (http://127.0.0.1:9000).

  7. Haga clic en la pestaña Search (Búsqueda) en la barra de navegación superior. Debería ver los mensajes de registro que acaba de enviar aparecer en la lista "Messages" (Mensajes). Puede tardar unos segundos en indexarse y mostrarse.

    Puede ver cómo Graylog analiza automáticamente los mensajes, dividiéndolos en campos como timestamp (marca de tiempo), source (fuente), application_name (nombre de la aplicación) y severity (severidad). Estos datos estructurados son clave para un análisis de registros eficaz.

Consultar y Analizar Datos de Logs

Con los registros fluyendo hacia Graylog, ahora puede aprender a buscarlos y filtrarlos. La funcionalidad de búsqueda de Graylog es potente y le permite identificar rápidamente eventos específicos. Esto es esencial para solucionar problemas o investigar incidentes de seguridad.

  1. Vaya a la página Search (Búsqueda) en la interfaz web de Graylog. La barra de búsqueda se encuentra en la parte superior de la página.

  2. Comencemos con una consulta simple. Para encontrar todos los registros de su aplicación simulada, escriba lo siguiente en la barra de búsqueda y presione Enter:

    application_name:sample_app

    Esto filtra los resultados para mostrar solo los registros donde el campo application_name es exactamente sample_app.

  3. Ahora, pruebe algunas otras consultas para explorar diferentes capacidades de filtrado:

    • Encontrar registros con un nivel de severidad específico (por ejemplo, nivel 4):
      severity:4
    • Encontrar registros con un nivel de severidad mayor que 5 (advertencias, errores, etc.):
      severity:>5
    • Buscar una frase dentro del mensaje de registro:
      message:"log message 5"
    • Combinar filtros usando AND:
      application_name:sample_app AND severity:<3
  4. También puede controlar el marco de tiempo de su búsqueda. Por defecto, Graylog muestra los registros de los "Últimos 5 minutos". Haga clic en el selector de rango de tiempo a la izquierda de la barra de búsqueda y cámbielo a Last 30 minutes (Últimos 30 minutos) para asegurarse de que todos los registros generados se incluyan en los resultados de la búsqueda.

  5. Para que una consulta utilizada con frecuencia sea fácilmente accesible, puede guardarla. Guardemos una búsqueda de eventos de alta severidad.

    • Ejecute la consulta: severity:>4
    • A la derecha de la barra de búsqueda, haga clic en el icono del disquete (Save Search - Guardar Búsqueda).
    • En el diálogo "Save Search", introduzca un Title (Título), por ejemplo, High Severity Events (Eventos de Alta Severidad).
    • Haga clic en Save (Guardar).

    Ahora puede acceder a esta búsqueda guardada en cualquier momento desde la lista "Saved Searches" (Búsquedas Guardadas) en la barra lateral izquierda, lo que le permite verificar rápidamente eventos críticos.

Crear un Panel de Monitoreo

Mientras que la página de búsqueda es excelente para la investigación activa, los paneles (dashboards) proporcionan una visión general de sus datos de registro de un vistazo. En este último paso, creará un panel con varios widgets para visualizar métricas clave de sus registros.

  1. En la interfaz web de Graylog, navegue a la sección Dashboards (Paneles) desde el menú superior.

  2. Haga clic en el botón Create dashboard (Crear panel).

    • Introduzca un Title (Título): Application Health Dashboard (Panel de Salud de la Aplicación)
    • Introduzca una Description (Descripción): Monitors the health and activity of sample_app. (Monitorea la salud y actividad de sample_app.)
    • Haga clic en Create (Crear).
  3. Ahora tiene un panel vacío. Añadamos algunos widgets. Haga clic en el botón Unlock / Edit (Desbloquear / Editar) para entrar en modo de edición.

  4. Añadir un Widget "Log Count" (Conteo de Registros): Este widget mostrará el número total de mensajes de registro a lo largo del tiempo.

    • Haga clic en Create Widget for Dashboard (Crear Widget para Panel).
    • Seleccione Aggregation (Agregación) como tipo de widget.
    • En la ventana de configuración:
      • Title (Título): Total Log Volume (Volumen Total de Registros)
      • En "Rows" (Filas), seleccione timestamp (marca de tiempo) como campo.
      • Elija Bar Chart (Gráfico de Barras) como tipo de visualización.
    • Haga clic en Create (Crear).
  5. Añadir un Widget "Severity Distribution" (Distribución de Severidad): Este widget mostrará el desglose de los registros por nivel de severidad.

    • Haga clic en Create Widget for Dashboard (Crear Widget para Panel) de nuevo.
    • Seleccione Aggregation (Agregación) como tipo de widget.
    • En la ventana de configuración:
      • Title (Título): Log Severity Distribution (Distribución de Severidad de Registros)
      • En "Rows" (Filas), seleccione severity (severidad) como campo.
      • Elija Pie Chart (Gráfico Circular) como tipo de visualización.
    • Haga clic en Create (Crear).
  6. Añadir un Widget "Recent Messages" (Mensajes Recientes): Este widget mostrará una lista de los mensajes de registro más recientes.

    • Haga clic en Create Widget for Dashboard (Crear Widget para Panel).
    • Seleccione Messages (Mensajes) como tipo de widget.
    • En la ventana de configuración:
      • Title (Título): Recent Log Messages (Mensajes de Registro Recientes)
      • En el campo "Streams" (Flujos), asegúrese de que esté seleccionado All messages (Todos los mensajes).
    • Haga clic en Create (Crear).
  7. Una vez que haya añadido los widgets, puede arrastrarlos y soltarlos para organizar el diseño. También puede cambiar su tamaño arrastrando sus esquinas. Organícelos de una manera que sea fácil de leer.

  8. Cuando esté satisfecho con el diseño, haga clic en el botón Lock / Save (Bloquear / Guardar) en la esquina superior derecha para guardar su panel.

Ahora ha creado un panel de monitoreo básico. En un escenario del mundo real, paneles como este son invaluables para vigilar la salud del sistema y la postura de seguridad.

Resumen

En este laboratorio, adquirió experiencia práctica con las funcionalidades principales de Graylog para la gestión y el análisis de registros. Comenzó desplegando un entorno Graylog completo utilizando Docker Compose, que incluía el servidor Graylog, OpenSearch y MongoDB.

Luego configuró una entrada Syslog para habilitar la recopilación de registros y utilizó un script para enviar datos de registro de muestra, simulando registros de aplicaciones del mundo real. Aprendió a utilizar el potente lenguaje de búsqueda y consulta de Graylog para filtrar y encontrar información específica dentro de sus registros. Finalmente, unió todo construyendo un panel personalizado con varios widgets para visualizar métricas de registro, proporcionando una vista rápida de la actividad del sistema. Estas habilidades forman una base sólida para utilizar Graylog en el monitoreo de ciberseguridad y la inteligencia operativa.