Técnico

Práctica Práctica con la Pila ELK

Geoff Burke avatarGB
Geoff Burke · 9 min para leer
Compartir:

SIEM & Serie de Blogs de Monitoreo: ELK Stack

En esta segunda entrega de nuestra mini-serie sobre ELK Stack dentro de la más amplia Serie de Blogs de SIEM & Monitoreo, pasamos de conceptos fundamentales a la implementación práctica. Esta publicación te guiará a través de la configuración de un entorno de prueba funcional de ELK utilizando Docker en una máquina virtual Ubuntu, dándote un espacio para explorar cómo Elasticsearch, Logstash y Kibana trabajan juntos para procesar y visualizar datos.

Ya seas un administrador de copias de seguridad o un profesional de TI, esta guía ofrece un laboratorio personalizable donde puedes experimentar con el análisis de mensajes Syslog de Veeam Backup & Replicación y reenviarlos a tu stack ELK. El objetivo es proporcionar un entorno seguro y flexible para aprender y probar, no para despliegue en producción.

Configuración de Docker

Requisitos: Necesitarás una VM de servidor Ubuntu.

1. Primero, instalaremos docker:

curl -fsSL https://get.docker.com | sh

sudo usermod -aG docker $USER

2. Cierra sesión y vuelve a iniciar sesión para verificar que Docker se instaló correctamente.

docker --version

docker compose version

Configuración de ELK  

1. Realice los siguientes comandos en su VM de Ubuntu: 

mkdir elk-stack 

cd elk-stack 

mkdir -p logstash/pipeline   

mkdir -p elasticsearch 

2. Cree el archivo de configuración de Elasticsearch: 

cat > elasticsearch/elasticsearch.yml << 'EOF' 

cluster.name: "docker-cluster" 

network.host: 0.0.0.0 

discovery.type: single-node 

xpack.security.enabled: false 

xpack.monitoring.collection.enabled: true 

EOF 

3. Cree archivos de configuración para Logstash. 

4. En la línea de comandos, pegue este comando para crear el archivo de configuración de Logstash: 

cat > logstash/pipeline/logstash.conf << 'EOF' 

input { 

  tcp {      port => 5000      codec => json_lines      tags => ["tcp"]   }    syslog {      port => 5514      tags => ["syslog"]    }  } 

filter {    if "syslog" in [tags] {      if [program] =~ /Veeam/ {        mutate {          add_field => { "source_type" => "veeam" }          add_field => { "category" => "backup" } 

        add_field => { "vendor" => "veeam" }        }                if [message] =~ /Job \[/ {         grok {            match => { "message" => "Job \[%{DATA:job_name}\]" }          }        }                if [message] =~ /Success/ {          mutate { add_field => { "backup_status" => "success" } }        } else if [message] =~ /Warning/ {          mutate { add_field => { "backup_status" => "warning" } }        } else if [message] =~ /Error|Failed/ {          mutate { add_field => { "backup_status" => "error" } }        }      }    }     

  mutate {      add_field => { "processed_by" => "logstash" }    } } 

output {    if [source_type] == "veeam" {      elasticsearch {       hosts => ["http://elasticsearch:9200"]        index => "veeam-logs-%{+YYYY.MM.dd}"      }    } else {      elasticsearch {        hosts => ["http://elasticsearch:9200"]        index => "logs-%{+YYYY.MM.dd}"      }    }  }  EOF 

 

5. Aquí crearemos nuestro archivo docker-compose.yml que tendrá todos los componentes necesarios para la configuración de nuestro laboratorio de pruebas. 

cat > docker-compose.yml << 'EOF' 

 

services: 

  elasticsearch: 

    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 

    container_name: elasticsearch 

    environment: 

      - discovery.type=single-node 

      - xpack.security.enabled=false 

      - cluster.name=docker-cluster 

      - network.host=0.0.0.0 

      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 

    ports: 

      - "9200:9200" 

    volumes: 

      - elasticsearch_data:/usr/share/elasticsearch/data 

    redes: 

      - elk 

 

  logstash: 

    imagen: docker.elastic.co/logstash/logstash:7.17.0 

    nombre_del_contenedor: logstash 

    puertos: 

      - "5044:5044" 

      - "5000:5000/tcp" 

      - "5514:5514/udp" 

      - "9600:9600" 

    volúmenes: 

      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro 

    entorno: 

      - "LS_JAVA_OPTS=-Xmx256m -Xms256m" 

      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 

    depende_de: 

      - elasticsearch 

    redes: 

      - elk 

 

  kibana: 

    imagen: docker.elastic.co/kibana/kibana:7.17.0 

    nombre_del_contenedor: kibana 

    puertos: 

      - "5601:5601" 

    entorno: 

      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 

      - SERVER_HOST=0.0.0.0 

    depends_on: 

      - elasticsearch 

    networks: 

      - elk 

 

volumes: 

  elasticsearch_data: 

 

networks: 

  elk: 

    driver: bridge 

EOF 

 

6. Ahora levante los contenedores: 

  1. docker compose up -d  
  2. Accediendo a Kibana en su Navegador 

Ahora que todo está configurado, puede abrir Kibana en su navegador. Por defecto, Kibana se ejecuta en el puerto 5601, por lo que necesitará navegar a la URL apropiada según donde esté alojado su entorno Docker. 

Por ejemplo, si su configuración de Docker se está ejecutando en una VM llamada docker01, iría a: 

http://docker01:5601 

Si su VM tiene un nombre DNS personalizado como geoffsvm, entonces la URL sería: http://geoffsvm:5601 

Alternativamente, si no tiene un nombre DNS configurado, puede usar la dirección IP de la VM en su lugar: 

http://[su-ip-vm]:5601

En última instancia, solo asegúrese de que está apuntando al host correcto y utilizando el puerto 5601, que es el predeterminado para Kibana. 

Nota: Si en algún momento desea comenzar de nuevo, realice los siguientes pasos para borrar la configuración: 

Para eliminar todos los contenedores, redes y volúmenes, ejecute los siguientes comandos: 

docker compose down --volumes --remove-orphans 

docker system prune -a --volumes -f  

Configurando Veeam VBR para Enviar Datos de Syslog a ELK 

Para ingerir registros en nuestra configuración y ver cómo está funcionando, configuraremos Veeam VBR para reenviar sus mensajes de syslog a ELK: 

1. Vaya al menú desplegable en la esquina superior izquierda y haga clic en “Opciones.” 

2. Luego haga clic en la “Pestaña de Reenvío de Eventos.” 

3. Aquí, agregaremos el servidor syslog que creamos en Docker. 

Haga clic en “Agregar” y escriba los detalles.  

Luego, haga clic en cualquiera de: 

  • “Aplicar” para guardar y cerrar la ventana.
  • “Aceptar” para guardar y mantener la ventana abierta.

 

Una vez que presione aplicar o aceptar, Veeam enviará su primer mensaje de prueba de syslog a Elasticsearch. 

VERIFICAR el descubrimiento de registros en Kibana 

4. Navegue de regreso a la interfaz de Kibana. 

5. En el menú desplegable superior izquierdo, haga clic en “Descubrir.” Allí se le presentará una invitación para crear una nueva vista de datos, incluyendo una vista de los datos de syslog por campo: 

6. Haga clic en “Crear vista de datos.” 

Puede ver que nuestro servidor de Elasticsearch ya ha recibido algunos mensajes de syslog de Veeam. Cuando configura los ajustes del servidor syslog en Veeam, automáticamente envía un mensaje de prueba. Esto le permite verificar que su sistema de monitoreo o SIEM está recibiendo los registros correctamente.

Nombramos nuestra vista de datos Veeam_Logs y utilizamos un patrón de índice que coincide con los registros ya ingeridos.

7. Haga clic en “Guardar vista de datos en Kibana.”

8. Presione "Descubrir" en el menú del lado izquierdo de la página para ver los mensajes de registro de VBR.

Conclusión

Con su laboratorio ELK en funcionamiento, ha dado un gran paso hacia la construcción de un entorno SIEM funcional. En esta publicación, recorrimos la configuración de contenedores Docker para Elasticsearch, Logstash y Kibana, configuramos un pipeline de Logstash para los mensajes de syslog de Veeam, y exploramos esos registros en Kibana. Ahora tiene una base sólida para ingerir y visualizar datos de registro en un entorno de prueba controlado.

En la publicación final de esta mini-serie el próximo mes, construiremos sobre esta base profundizando en ElasticSecurity y explorando cómo mejora la detección de amenazas y la alerta dentro del ecosistema ELK. También presentaremos Fluentd como una alternativa a Logstash, comparando las dos herramientas y mostrando cómo configurar Fluentd para reenviar registros a Elasticsearch. Si está interesado en casos de uso de monitoreo de seguridad, creación de paneles y optimización de su pipeline de registros, no querrá perderse lo que viene a continuación.

Mantente al día

Al enviar este formulario, confirmo que he leído y acepto la Política de Privacidad.

Puede darse de baja en cualquier momento.