Parseando Logs de Suricata con Graylog y Mostrándolos en Grafana 3ra Parte

En este artículo vamos a parsear los registros de log generados por el IDS suricata. Ya tenemos funcionando nuestro servidor graylog y empezaremos a preparar el terreno para capturar dichos registros de logs.

Indices

El procedimiento es similar al que hicimos para zimbra o squid. Creamos ahora el indice de Suricata en System/Indices

Al igual que zimbra y squid, Index shard 4 y Index replicas 0, la rotación del indice del tipo Index time y la retención puede ser de borrado, clausura de un indice de acuerdo al numero máximo de indices o no hacer nada. En mi caso lo puse a rotar mensual y que elimine los indices pasados los 12 meses. En fin existen muchas formas de establecer la rotación. Este indice se crea de manera inmediata.

y con cerebro podemos comprobarlo

Content Pack

Como veremos mas adelante en el IDS Suricata lo haremos registrar sus logs en formato JSON lo cual hizo mucho más sencillo la contrucción de los extractors en el Graylog por lo fácil y amigable que es este formato. El content pack incluye Input de tipo beats, extractores, Tablas lookup, Data adapters para Tablas lockup y Cache para Tablas lookup. Abrimos una entrada en el marketplace de graylog de tipo content pack llamada Suricata Content Pack con un git para estos ficheros de configuración.  Para descargar estos ficheros instalamos git para clonar el repositorio.

y seguidamente lo clonamos

Ubicaremos los datos CSV de las tablas lookup para convertir mas adelante los número de puertos a nombre de servicios. Del propio git que acabos de clonar seleccionamos el fichero service-names-port-numbers.csv y lo copiamos en /etc/graylog/server.

Importamos ahora el fichero de la carpeta Content Pack y para ellos seleccionamos en  System / Content Packs la opción Import content packs para subir el archivo.

Como vemos lo agrega a la lista

Ahora seleccionamos el content pack IDS.

Y lo aplicamos

Streams

Editamos el stream de Suricata en Stream para asociarle el indice que creamos inicialmente. Marcamos que elimine las coincidencias para el stream por defecto All message para que solamente lo almacene en el índice de Suricata.

Creamos una regla para que se almacenen los registros de logs en el indice asociado

Cerebro

Como ya explicabamos anteriormente por  defecto graylog por cada indice que se crea generá su propia plantilla y la aplica cada vez que el indice rota. Si queremos nuestras propias plantillas debemos crearlas en el mismo elasticsearch. Agregaremos el campo real_timestamp que nos será util a la hora de usar grafana y también convertimos a tipo geoip dest_ip_geolocation y src_ip_geolocation a tipo geo_point para poder usarlos en los paneles de World Map ya que graylog no usa este formato.

Y

En el git que clonamos ya esta esta plantilla personalizada de la que hablamos y que vamos a importar a elasticsearch a través de cerebro. Vamos a more /index template

Creamos un template nuevo

En el nombre lo rellenamos con suricata-custom y abrimos del git el archivo que tiene el template y pegamos su contenido aquí.

Y seguidamente presionamos el botón create.

Ahora pararemos el servicio graylog para proceder a eliminar el índice mediante cerebro.

En cerebro nos paramos encima del indice y desplegamos las opciones y seleccionamos delete index.

Arrancamos nuevamente el servicio de graylog y este creará el indice con dicha plantilla.

Pfsense

Nuestro IDS Suricata esta corriendo como un servicio en el firewall Pfsense y ya esta configurado.

Preparando el terreno en el servidor pfsense.

Determinar el paquete de Filebeat para FreeBSD:
Los paquetes dependen de la versión de freeBSD en ejecución, y esto depende de la versión de pfSense. pfSense 2.3.x se basa en un freeBSD 10. pfSense 2.4.x se basa en freeBSD 11.1
Si está utilizando pfSense 2.3.4 la lista de paquetes nativos actuales está disponible aquí: http://pkg.freebsd.org/freebsd:10:x86:64/latest/All/
Si está utilizando pfSense 2.4 (publicado en octubre de 2017) la lista de paquetes nativos actuales está disponible aquí: http://pkg.freebsd.org/FreeBSD:11:amd64/latest/All/

Busque en la lista para determinar el paquete Filebeats disponible. Al momento de escribir, la versión disponible del paquete Filebeats es 6.2.2 y el archivo del paquete se llama beats-6.2.2.txz

Instalando el paquete:
Utilice su programa de terminal de elección para SSH para acceder a PFSense como usuario administrador y elija la opción 8 para ingresar al shell de freeBSD
Instale el paquete usando el siguiente comando:

El paquete debe instalarse en /usr/local

Ejecutable en: /usr/local/sbin/filebeat

Archivo de configuración en: /usr/local/etc/filebeat.yml

Configurando Suricata para que se registre los logs en formato en JSON.

El formato JSON (JavaScript Object Notation) es un formato de datos que es legible para los humanos y fácil de analizar. Utiliza pares de nombre/valor para describir campos, objetos y matrices de datos, lo que lo hace ideal para transmitir datos, como archivos de registro, donde el formato de los datos y los campos relevantes probablemente serán diferentes entre servicios y sistemas. Al usar registros de formato JSON, significa que no tendremos que gastar mucho esfuerzo configurando Graylog para analizar cadenas y campos que probablemente necesitaríamos hacer si estuviéramos utilizando un CSV u otro formato para los datos de registro.
Es posible configurar el registro en el nivel de cada interfaz dentro de Suricata. Dentro de la pantalla de interfaces de Suricata, haga clic para editar la interfaz relevante(En mi caso WAN) para la que desea recopilar datos de registros de logs y desplácese hacia abajo a la sección ‘Logging Settings’ que se muestra aquí (pfSense Versión 2.4.2):

La configuración relevante es:

  • EVE JSON Log: Marcar
  • EVE Output Type: Seleccione ‘FILE’
  • EVE Log Alerts: Marcar
  • EVE Log Alert Payload
  • EVE Log Alert details: Marque como se muestra en la imagen anterior.

Las otras configuraciones no son relevantes. Una vez que haya configurado las configuraciones anteriores, no olvide hacer clic en el botón ‘Save’ en la parte inferior de la pantalla.

Los registros se pueden encontrar en un subdirectorio relevante para su interfaz dentro de /var/logs/suricata/. El archivo eve.json es el archivo que nos interesa.

Confirme que está recibiendo datos usando cat o tail en el archivo. Si el archivo no se está completando, es posible que deba reiniciar el servicio Suricata desde el panel de control de servicios de pfSense.

Configurar Filebeat para enviar registros

Lo primero que debe hacer es crear un directorio para que Filebeat coloque sus propios registros de loga. El archivo de configuración que crearemos garantizará que Filebeat se registre en esta ubicación para proporcionarnos algunos datos útiles para la depuración:

A continuación, cree un archivo de configuración filebeat.yml que contenga lo siguiente en: /usr/local/etc/filebeat.yml. Asegúrese de utilizar espacios, en lugar de caracteres de tabulación.

La sintaxis del archivo de configuración real está disponible en el sitio web de Elastic pero este archivo de configuración hace lo siguiente:

  • Procese todos los archivos en subdirectorios en /var/log/suricata/ que coincidan con la especificación de archivo: eve.json*
  • Los archivos serán archivos de log
  • Para cada entrada de log, agregue el campo tipo (type) en el nivel raíz con el valor de ‘suricataIDPS’; esto se usará para determinar el procesamiento dentro de Graylog una vez que el archivo llegue a nuestro servidor de destino.
  • Para cada entrada de registro, agregue las etiquetas ‘SuricataIDPS’ y ‘JSON’. Estas son etiquetas arbitrarias agregadas a los registros para su uso en consultas en en Graylog.
  • Envía los eventos al Graylog en 192.168.1.123:5044
  • Los ficheros de registro de logs en /var/log/filebeat/filebeat.log y no guarde más de 7 archivos de los mismos.

Prueba la configuración:

Esto debería indicar si hay algún problema con el archivo de configuración. Tenga en cuenta que el archivo de configuración es sensible a las tabulaciones en la sangría, por lo que si ha utilizado estos en lugar de espacios, se puede generar un error y no será evidente cuál es el problema.

Prueba de funcionamiento:

Esto ejecutará filebeat y procesará los registros de Suricata. la opción -N evita que los eventos se envíen al servidor de destino.

Para ver qué está pasando.

Configure pfSense para iniciar Filebeat al inicio

El instalador del paquete de beats fue lo suficientemente bueno como para crear algunos scripts de inicio de rc.d para Filebeat en:

Debido a que esto es pfSense y, por lo tanto, las secuencias de comandos de implementación de FreeBSD personalizadas en este directorio deben tener la extensión de archivo .sh para ejecutarse. Copie el script filebeat:

Si echa un vistazo a la secuencia de comandos, indica que algunas configuraciones se configuren en /etc/rc.conf

De nuevo, debido a la personalización de pfSense, este archivo se sobrescribe en el arranque y no debe editarse. Sin embargo, la creación de un archivo /etc/rc.conf.local se encargará de nosotros. Establezca filebeat para arrancar al inicio y especifique el archivo de configuración de la siguiente manera:

Esto hará que Filebeat arranque al inicio. Reinicie su firewall pfSense y verifique con PS:

Monitoreo Filebeat

Esto es tan simple como, desde un shell SSH, emitir el siguiente comando. Se mostrará un resultado similar al siguiente.

Reenviar registros de logs

Una de las ventajas de Filebeat es que realiza un seguimiento de qué archivos y eventos ha procesado y cuáles han sido enviados y confirmados por el destino en este gaso Graylog. Este seguimiento se almacena en un fichero de registro llamado registry. Esto es excelente en producción, pero es probable que deba volver a enviar los mismos registros varias veces durante la configuración de la solución o también en casos de caidas de tensión y se apague abruptamente el pfsense que causa error el filebeat al arrancar por estar el archivo registry corrupto. Para hacer esto, necesita eliminar el registro de Filebeat y reiniciar el proceso. Para lograr esto, realice lo siguiente:

Detenemos el servicio de filebeat

Eliminar el archivo de registry:

Arrancamos filebeat

Nuevamente se volverán a enviar los registros de log al destino que en este caso es nuestro Graylog.

Ahora en graylog seleccionamos el stream de Susricata  y ya veremos las como va parseando los mensajes de logs creando los campos.

Grafana

Los dashboards de graylog no ofrecen las posibilidades a mi modo de ver que las que tiene grafana por eso nuestro dashboard lo haremos en grafana

Creamos el datasource en grafana el cual nombraremos Suricata-graylog

Comparto con ustedes un dashboard prediseñado en el  sitio de oficial grafana el cual podra importar.

 

Seleccionamos Import dashboard

Subimos el fichero descargado Upload .json file y lo asociamos al datasource creado para el.

Ya podemos ver el dashboard en acción.

(Visited 45 times, 1 visits today)

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*