Skip to main content

Envio de logs a SIEM ELK

El sistema PiHole registra las consultas de las últimas 24h en su base de datos local, y va generando logs de dichas consultas en la carpeta /var/log/pihole/pihole.log (dentro del docker). Pero desde la web de administración de PiHole no hay una opción para enviar los logs a un syslog, por lo que para poder enviarlo se ha necesitado realizar la siguiente tarea.

Mapear carpeta /var/log/pihole del docker en el host

En el fichero docker-compose.yml de PiHole, asegurarse que en la sección volumes se mapea la carpeta

volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
      - './var-log-pihole:/var/log/pihole'

Levantar de nuevo PiHole y comprobar que desde el equipo host podemos llegar a leer los logs con

tail -f /docker/pihole/var-log-pihole/pihole.log

Crear una Policy en ELK

En el apartado Fleet del sistema ELK, cree una policy nueva. Añada la integración Elastic Agent Custom Logs.

Introduzcale un nombre e indique la ruta del fichero de logs de PiHole.

Instalar Elastic Agent en el host si no está instalado

Si el equipo que contiene el docker no tiene el endpoint de Elastic, instalelo pulsando en Actions y Add Agent. Siga el proceso tal y como le explica el propio sistema ELK.

En caso de ya disponer de ELK instalado en ese host, deberá mover al host a la nueva política.

Comprobar recepción de logs

Pasado unos segundos y con el docker de PiHole funcionando, el Elastic Agent funcionando, debería poder visualizar la recepción de logs en el apartado Discover del ELK. Como filtro introduzca

data_stream.dataset : "pihole" 

Abra un documento y muevase a la segunda pantalla, en el campo message podrá visualizar el contenido del log

Modificar la PipeLine para separar los campos del mensaje

Acceda a la política y pulse en la integración de PiHole

En la parte inferior. en Ingest Pipelines encontrará un link para crear una nueva Pipeline, pulse y le llevará a la pantalla de definición de la Pipeline. En la sección de Processors pulse en Add a processor, seleccione del tipo GROK y añada el siguiente contenido.

En el field introduzca el campo del cual vamos a recuperar los datos, en este caso es el campo message.

En el campo patterns introduzca el siguiente codigo

%{SYSLOGTIMESTAMP:time}%{GREEDYDATA}query\[%{WORD:dns.question.type}\]%{SPACE}%{GREEDYDATA:dns.question.name} from%{SPACE}%{IP:source.ip} 

Guarde la Pipeline, confirme que se aplicará a las N máquinas. Espere a que se actualicen los equipos con el Elastic Agent y confirme en el apartado discover que en los logs ya aparecen los campos nuevos

  • time
  • dns.question.type
  • dns.question.name
  • source.ip
col1 col2
campo1 campo2

Ejemplo de Dashboard