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