En el panorama de la ciberseguridad, que está en constante evolución, es fundamental saber qué sucede dentro de la red. Imagine poder obtener información en tiempo real sobre cada acción: qué está permitido, qué está bloqueado y quién intenta entrar.

Esta guía le muestra el proceso de configuración de una potente solución de inteligencia de amenazas mediante el envío de registros desde pfSense (un firewall de código abierto) a Graylog (un analizador y agregador de registros de código abierto). Al finalizar este proyecto, no solo tendrá una configuración funcional, sino también una comprensión más profunda de la postura de seguridad de su red. Piense en ella como una herramienta de detección que le ayuda a monitorear, analizar y responder a las amenazas de la red de manera más efectiva, ¡todo mientras aprende y se divierte! Sumérjase en el mundo de la inteligencia de amenazas y tome el control de la seguridad de su red hoy mismo.

Elegí PFSense para el firewall de mi red doméstica porque es de código abierto y me lo recomendaron durante mi investigación sobre firewalls. Tenía algunos servidores que pude reutilizar en el trabajo, ya que suelen desechar equipos viejos y funcionales cuando reciben equipos nuevos.

Estas instrucciones describen un método para enviar datos desde pfSense y Suricata (probado en pfSense 2.7.2) a Graylog (probado en la versión 5.2.2). Además, se proporcionarán los pasos para procesar los registros de Suricata mediante syslog-ng.

Con un poco más de esfuerzo, confío en que el mismo enfoque que se analiza aquí se pueda aplicar a algo como OPNSense. (Estoy considerando hacer la transición a esto en algún momento para probar algo nuevo).

Me gustaría agradecer a Jake Stride por su serie PFSense y Graylog que me inspiró a configurar esto en mi laboratorio en casa y realizar actualizaciones a lo largo del camino.

1. Instalar Graylog

En lugar de duplicar guías de instalación bien mantenidas, debería poder seguir las instrucciones de Graylog para poner en funcionamiento una instalación básica. Recomiendo realizar una instalación de Ubuntu para mantenerme sincronizado con mi configuración.

Una vez instalado Graylog, continúe con el siguiente paso.

2. Configuración de Graylog

Cree una nueva entrada Syslog-UDP para pfSense. En la pestaña Sistema -> Entradas Seleccione Syslog-UDP como tipo de entrada y luego inicie una nueva entrada para proporcionar detalles adicionales.

Graylog Settings 1
Graylog Settings 2

La siguiente configuración nos permite recopilar registros de PFSense, así como cualquier otro mensaje de syslog de servidores que puedan reenviar syslog a esta interfaz. Puede utilizar cualquier puerto que prefiera, siempre que no entre en conflicto con otro servicio en su instancia de Graylog o con un rango de puertos inferior a 1000. Puede configurar la dirección Bind 0.0.0.0 para escuchar en todas las interfaces posibles o darle la IP estática/DHCP de su instancia de Graylog. Aumenté los subprocesos de trabajo a 6 ya que tengo otros servidores que llegan a esta interfaz para la administración central de registros.

Input Config 5

Asegúrese de que la casilla de verificación “¿Expandir datos estructurados?” esté habilitada/activada para ayudar con el análisis de mensajes. Input Config 6

3. Configuración de registro de PFSense

Una vez configurado el servidor Graylog, pasaremos a la configuración de registro de PFSense para reenviar todos los posibles contenidos/eventos de syslog a la nueva interfaz que hemos creado.

Desde el firewall de pfSense, visite Estado -> Registros del sistema -> Configuración. PFSense Settings 1

Desde aquí, envíe los registros a Graylog reemplazando el campo de entrada del servidor de registro remoto con el nombre de host o la dirección IP de su servidor Graylog y agregue: 5143 como puerto, a menos que decida desviarse de las instrucciones y usar un puerto diferente. Luego, presione Guardar. PFSense Settings 2

4. Surricata Logging Configuration

En mi caso, tengo Suricata ejecutándose en mi interfaz WAN con fines de aprendizaje. Sin embargo, si tuviera que implementar algo como esto en su entorno, lo ideal sería que se ejecutara y bloqueara activamente en la LAN, especialmente si busca una configuración de seguridad más estricta. Por lo general, no debería originarse tráfico malicioso desde la LAN a menos que haya patrones de tráfico inusuales, protocolos sospechosos o intentos de conexión a hosts maliciosos conocidos. Suricata proporciona a los cazadores de amenazas información valiosa sobre el origen del tráfico malicioso o el lugar al que intenta llegar si se activa un conjunto de reglas.

Al principio, pensé que la configuración de registro remoto de PFSense sería suficiente para enviar mensajes de Suricata a Graylog hasta que comencé a revisar los mensajes entrantes. Me di cuenta de que analizar los registros de Suricata requeriría un enfoque diferente, ya que después de varias ejecuciones de prueba, noté que las alertas de Suricata que esperaba no aparecían. Esto me llevó a descubrir que el demonio syslog de FreeBSD truncará automáticamente los mensajes exportados a un máximo de 480 bytes. Afortunadamente, podemos instalar syslog-ng para configurar un proceso syslog personalizado, lo que nos permite indicarle a PFSense que reenvíe los registros a nuestra instancia de Graylog para su posterior procesamiento.

Para instalar Syslog-ng vamos a: Sistema -> Paquete -> Administrador -> Paquetes disponibles y luego buscamos/descargamos syslog-ng. Con una instalación exitosa, Syslog-ng debería estar disponible como servicio en Servicios -> Syslog-ng. Syslog Install 1
Syslog Install 2
Syslog Install 3
PFSense Settings 2

Para la siguiente parte, querrás usar SSH si tienes el servicio habilitado/expuesto en tu host PFSense o usar la consola del hipervisor para acceder al host, que es el método que usaré ya que tengo PFSense alojado en mi servidor ESXi. PFSense Settings 3 Usaremos este acceso para ir a /var/log/suricata y verificar en qué directorio Suricata almacena alertas y archivos de registro. Solo analizaremos alertas de Suricata con esta configuración, pero esta configuración se puede modificar para reenviar otros registros como EVE o TLS y HTTP, ya que el script de origen a continuación usa un patrón de comodín para encontrar cualquier archivo en subdirectorios llamados alerts.log. Esto se puede cambiar a algo como eve.json, que tiene todo en un archivo, pero requiere cambios de configuración de análisis en los que no he trabajado, pero es posible que planee hacerlo en el futuro.

PFSense Settings 4
PFSense Settings 5

Con esta información, configuraremos y habilitaremos syslog-ng para que use la ruta anterior como directorio de registro predeterminado. Tengo mi servidor Graylog en LAN, por lo que solo necesito que syslog-ng escuche y funcione dentro de la LAN. PFSense Settings 6

La configuración más básica de syslog-ng tiene 3 componentes: una fuente, un destino y un tipo de objeto de registro que le indica a syslog-ng que envíe la fuente X al destino Y. La configuración de ajustes de registro específicos se realiza en la pestaña Avanzado. Haga clic en Agregar para comenzar a escribir una configuración. Los nombres de objeto con Suricata son lo que crearemos. Syslog config 1

La fuente wildcard-file() que aparece a continuación recopila mensajes de registro de varios archivos de texto sin formato y de varios directorios. La fuente wildcard-file() está disponible en la versión 3.10 y posteriores de OSE de syslog-ng. Establezca lo siguiente:

  • Object Type: Source
  • Object Name: Suricata
{
  wildcard-file(
    base-dir("/var/log/suricata/suricata_em056333")
    filename-pattern("alerts.log")
    recursive(yes)
    follow-freq(1)
    flags(no-parse)
  );
};

El tipo de objeto de registro conecta los distintos componentes básicos de Syslog-ng y, por lo tanto, define la ruta de los mensajes de registro entrantes. Puede contener orígenes, destinos, filtros, indicadores y otros objetos.

Añadir otro objeto:

  • Object Type: Log
  • Object Name: Suricata
{
    source(Suricata);
    destination(Suricata);
};

Añade el objeto final

  • Object Type: Destination
  • Object Name: Suricata
{
    udp("SERVER_IP" port(5143));
};

Desde su firewall pfSense, visite Servicios -> Suricata -> Interfaces. Suricata Settings 1
Haga clic en el icono de lápiz resaltado arriba para configurar los ajustes de registro. Las áreas resaltadas en rojo son a las que debe prestar atención, ya que, de manera predeterminada, el registro JSON de EVE está deshabilitado y lo tengo configurado para el registro detallado del tráfico que me interesa, pero puede refinarlo como desee. Asegúrese de deshabilitar "Enviar alertas al registro del sistema" para evitar el error que cometí cuando intenté configurar esto inicialmente.

Suricata Settings 2
Suricata Settings 3
Suricata Settings 4

5. Verificando la configuración

En la pestaña Sistema, navegue hasta Entradas dentro de Graylog. El rendimiento y las métricas de Syslog-UDP en el puerto 5143 deberían comenzar a aparecer. Al hacer clic en Mostrar mensajes recibidos, podrá ver las alertas del firewall de pfSense y los registros de eventos del sistema, así como los registros de Suricata. En la próxima entrega de esta serie, exploraremos cómo enrutar los mensajes entrantes en función de las fuentes de registro en transmisiones y luego mejoraremos los datos enriqueciéndolos con datos de geolocalización.

Verify Logs Received 1
Verify Logs Received 2