GhostAcademy logo GhostAcademy
Práctica de Laboratorio

Snort 3

Sistema de Detección y Prevención de Intrusiones · Instalación, Configuración y Uso

🔍

¿Qué es Snort 3?

Snort es esencialmente un analizador de tráfico de red en tiempo real que inspecciona los paquetes de datos que fluyen a través de una red.

🛡️

¿Para qué se Utiliza?

Snort 3 se utiliza principalmente para monitorizar y proteger las redes en tres modos operativos clave:

1. Sistema de Detección de Intrusiones (IDS)

2. Sistema de Prevención de Intrusiones (IPS)

3. Registrador de Paquetes (Packet Logger)

ℹ️

En resumen, Snort 3 es una herramienta poderosa y flexible fundamental para cualquier equipo de seguridad que necesite visibilidad del tráfico de red, detección de amenazas y capacidad de prevención activa contra ciberataques.

📦

Instalación

La instalación más común para Snort 3 en versiones recientes de Ubuntu se realiza a través de la compilación desde el código fuente, ya que el paquete apt a veces instala una versión anterior (Snort 2) o no está disponible con todas las características.

Pasos para Instalar y Configurar Snort 3 en Ubuntu 24.04

Paso 1: Actualizar el Sistema e Instalar Dependencias

Abre tu terminal y ejecuta los siguientes comandos para asegurarte de que tu sistema está actualizado y tienes todas las librerías necesarias para compilar Snort.

1

Actualizar el sistema:

sudo apt update && sudo apt upgrade -y
2

Instalar dependencias de compilación:

sudo apt install -y build-essential libpcap-dev libpcre3-dev libdumbnet-dev zlib1g-dev liblzma-dev openssl libssl-dev ethtool
sudo apt install build-essential autoconf libtool
⚙️

Paso 2: Descargar y Compilar libdaq

Descargaremos la librería DAQ (Data Acquisition), que es una dependencia fundamental de Snort 3.

1

Descargar el código fuente de libdaq:

⚠️

Busca la versión más reciente en la página oficial si esta ha cambiado.

wget https://github.com/snort3/libdaq/archive/refs/tags/v3.0.21.tar.gz -O libdaq-3.0.21.tar.gz
2

Descomprimir el archivo:

tar -xf libdaq-3.0.21.tar.gz
3

Acceder al directorio descomprimido:

cd libdaq-3.0.21
4

Configurar la compilación y compilar e instalar:

./bootstrap
./configure
make
sudo make install
🚀

Paso 3: Instalación de Snort 3

Ahora que tienes instalada la librería DAQ, el sistema está listo para compilar e instalar el motor principal de Snort 3, que depende de ella.

1. Descargar las Librerías Restantes

1

Retrocede al directorio home:

cd ~
2

Descargar el motor principal de Snort 3:

wget https://github.com/snort3/snort3/archive/refs/tags/3.9.5.0.zip -O snort3-3.9.5.0.zip
3

Instalar unzip y descomprimir:

sudo apt install unzip
unzip snort3-3.9.5.0.zip
cd snort3-3.9.5.0

Nota: El nombre del directorio podría ser snort3-3.9.5.0, verifica con ls.

3. Configurar y Compilar Snort 3

A diferencia de libdaq, Snort 3 utiliza cmake para la configuración y compilación.

1

Instalar dependencias de compilación adicionales (si no lo hiciste al inicio):

sudo apt install cmake libluajit-5.1-dev libhwloc-dev
sudo apt install flex
sudo apt install libpcre2-dev
2

Ejecutar el script de configuración de CMake:

./configure_cmake.sh --prefix=/usr/local/snort
3

Compilar e instalar (dentro del nuevo directorio build):

cd build
make -j 2
sudo make install
✅

Una vez que estos pasos se completen, Snort 3.9.5.0 debería estar instalado en /usr/local/snort/. Todos los archivos binarios, librerías, archivos de configuración, módulos DAQ, y documentación se han copiado a sus destinos finales bajo el prefijo que especificamos: /usr/local/snort/.

✔️

Verificación y Pruebas Iniciales

Ahora que Snort está instalado, el siguiente paso es verificar que el binario se ejecuta correctamente y que puede detectar la librería DAQ que compilamos.

1. Verificar la Instalación de Snort

Debido a que instalamos Snort en /usr/local/snort/bin/, debemos llamar al binario usando esa ruta completa o añadiendo ese directorio a tu PATH.

Ejecuta el siguiente comando para verificar la versión instalada:

/usr/local/snort/bin/snort -V
Verificación de la versión de Snort
Salida esperada: versión de Snort 3 instalada correctamente

2. Verificar la Configuración Básica

Ahora, comprueba que Snort puede encontrar el archivo de configuración principal (snort.lua) que se instaló y que las rutas son correctas. Esto validará la configuración base.

/usr/local/snort/bin/snort -c /usr/local/snort/etc/snort/snort.lua
Validación de la configuración de Snort
Snort validando el archivo de configuración snort.lua

Si ambos comandos se ejecutan sin errores (especialmente el segundo), significa que Snort está listo para ser configurado y usado para monitorear el tráfico.

✅

El mensaje final "Snort successfully validated the configuration (with 0 warnings)." es la confirmación que necesitábamos. Esto significa que Snort ha cargado correctamente:

  1. El archivo de configuración principal /usr/local/snort/etc/snort/snort.lua.
  2. Todos los módulos internos y service inspectors listados.
  3. Las reglas predeterminadas de ejemplo (file_magic.rules), cargando 219 reglas sin errores.
  4. La configuración del DAQ (pcap DAQ configured to passive).
🔧

Pasos Iniciales de Configuración de Snort 3

Para que Snort sea útil, debes realizar dos tareas clave: definir la red que vas a proteger (la red doméstica) y obtener el set completo de reglas.

1. Configurar la Red Doméstica (HOME_NET)

Debes editar el archivo de configuración por defecto para especificar el rango de IP de tu red local. Esto es crítico para que Snort sepa qué tráfico es interno (de confianza) y cuál es externo (potencialmente hostil).

1

Edita el archivo de configuración principal:

sudo nano /usr/local/snort/etc/snort/snort.lua
2

Busca la sección de variables de entorno:

Localiza la línea donde se define HOME_NET. Originalmente puede estar comentada o definida como any.

-- Define HOME_NET and EXTERNAL_NET
-- The default is 'any'
-- HOME_NET = 'any'
-- EXTERNAL_NET = 'any'
3

Actualiza HOME_NET:

Reemplaza any con el rango IP de tu red. Dado que estás en una VirtualBox y en Kali Linux, tu red local probablemente esté en el rango 192.168.X.0/24 o similar. Usa el resultado de ip a para verificar.

Ejemplo: Si tu red es 192.168.1.0/24:

HOME_NET = '192.168.1.0/24'
EXTERNAL_NET = '!'
Configuración de HOME_NET en snort.lua
Edición del archivo snort.lua para definir HOME_NET
4

Guarda y sal (Ctrl+O, Ctrl+X).

📜

Obtener Reglas (Opcional, pero Recomendado)

Las 219 reglas que cargaste son solo las de ejemplo (file_magic). Necesitas reglas de detección de amenazas reales.

Pasos para las Reglas de la Comunidad (Community Rules)

1

Navega a un directorio temporal:

cd ~
2

Descargar las reglas:

El enlace de descarga para las reglas de la comunidad para Snort 3 es:

wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz
3

Descomprimir y mover las reglas:

Mueve los archivos .rules al directorio de reglas de tu instalación de Snort. Primero, crea el directorio si no existe:

sudo mkdir -p /usr/local/snort/etc/snort/rules
sudo tar -xf snort3-community-rules.tar.gz -C /usr/local/snort/etc/snort/rules/ --strip-components 1

(--strip-components 1 es necesario para eliminar el directorio principal dentro del .tar.gz.)

Crear un Archivo de Reglas de Referencia (Si Aún No Existe)

1

Crea el archivo:

sudo nano /usr/local/snort/etc/snort/rules/local.rules
2

Añade una regla de prueba (opcional, pero buena práctica):

alert icmp any any ->  any (msg:"Test ICMP Echo Request"; sid:1000000; rev:1;)
Regla de prueba ICMP en local.rules
Regla ICMP de prueba añadida al archivo local.rules

Guarda y sal.

💻

Guía de Uso Esencial de Snort 3

El ejecutable principal de Snort 3 es /usr/local/snort/bin/snort. El uso más básico siempre requiere especificar el archivo de configuración.

1. Sintaxis Básica de Ejecución

/usr/local/snort/bin/snort [MODO] [OPCIONES]

2. Modos Operacionales Clave

Modo Comando Descripción
Aspiradora / Sniffer (Modo Predeterminado) sudo /usr/local/snort/bin/snort -i <interfaz> Simplemente lee los paquetes en vivo de una interfaz de red, mostrando los encabezados en la consola. Es útil para diagnóstico.
Detección de Intrusos (IDS) sudo /usr/local/snort/bin/snort -c <config> -i <interfaz> Este es el modo estándar. Ejecuta el motor de reglas (IPS) y genera alertas si encuentra tráfico malicioso.
Lectura de PCAP sudo /usr/local/snort/bin/snort -c <config> -r <archivo.pcap> En lugar de escuchar en vivo, procesa un archivo de captura de tráfico (.pcap) contra tus reglas. Ideal para análisis forense.

3. Uso en Modo IDS (Sistema de Detección de Intrusos)

Este es el modo más importante para la seguridad de la red.

3.1. Identificar la Interfaz de Red

Antes de ejecutar Snort, necesitas saber qué interfaz usar. Si estás en VirtualBox, probablemente sea eth0 o enp0s3.

ip a

3.2. Ejecutar Snort en Modo IDS

Ejecuta Snort en la interfaz de red con tu archivo de configuración. Usa sudo porque necesita acceso de bajo nivel a la red.

sudo /usr/local/snort/bin/snort -i enp0s3
ℹ️

Snort está en su modo Sniffer/Aspiradora (-i enp0s3 sin un archivo de configuración -c). Esto confirma lo siguiente:

  1. El binario de Snort funciona.
  2. Los permisos de sudo son correctos.
  3. Snort puede encontrar y acceder a la interfaz de red enp0s3 (que es tu interfaz activa en VirtualBox).
  4. Snort está escuchando (Commencing packet processing).

Pasos de Uso en Modo Sniffer

En este modo, Snort está funcionando como un tcpdump avanzado. Si empiezas a generar tráfico en tu máquina virtual (por ejemplo, navegando a un sitio web o haciendo un ping), Snort mostrará los encabezados de los paquetes.

ping 8.8.8.8
Resumen de paquetes capturados por Snort en modo Sniffer
Resumen de estadísticas al detener Snort en modo Sniffer

Análisis del Resumen de Paquetes

Siguiente Paso: Activar la Detección de Intrusos (Modo IDS)

Ahora que sabes que Snort puede ver el tráfico, el siguiente paso es ejecutarlo en su función principal: el modo IDS, donde utiliza tu archivo de configuración snort.lua y las miles de reglas de la comunidad que intentamos cargar.

Para poner Snort en modo IDS, necesitas cargar la configuración:

sudo /usr/local/snort/bin/snort -c /usr/local/snort/etc/snort/snort.lua -i enp0s3

3.3. Opciones Comunes Adicionales

Opción Propósito Ejemplo
-A console Envía las alertas directamente a la consola (útil para pruebas). ... -i eth0 -A console
-l /var/log/snort Escribe los logs de Unified2 (binarios de Snort) en un directorio específico. Necesitas crear el directorio primero. ... -i eth0 -l /var/log/snort
-D Ejecuta Snort en modo Daemon (en segundo plano), ideal para producción. ... -i eth0 -D
📊

Interpretación de Resultados y Logs

Cuando Snort detecta una amenaza, genera una Alerta.

4.1. Ejemplo de Alerta en Consola (-A console)

Si usas la opción -A console, verás una salida similar a esta (asumiendo que tienes una regla ICMP simple):

02/11-12:00:00.123456 [**] [1:1000000:1] Test ICMP Echo Request [**] [Priority: 0] {ICMP} 192.168.1.5 -> 192.168.1.1

4.2. Log de Eventos (-l y Logs Binarios)

En producción, Snort genera logs en formato binario (Unified2) para un rendimiento rápido. Para leer estos logs, necesitas herramientas como u2spewfoo (que se instaló con Snort).

1

Ejecuta Snort en modo logging:

sudo mkdir -p /var/log/snort
sudo /usr/local/snort/bin/snort -c /usr/local/snort/etc/snort/snort.lua -i enp0s3 -l /var/log/snort
2

Detén Snort (presionando Ctrl+C).

3

Convierte los logs binarios a texto:

/usr/local/snort/bin/u2spewfoo /var/log/snort/*

Esto mostrará el contenido de las alertas y los paquetes capturados en un formato legible.

Error al ejecutar u2spewfoo sin logs generados
Error esperado cuando no se han generado alertas todavía
⚠️

El error ERROR: Failed to open file: /var/log/snort/* ocurre por una razón muy sutil: Snort solo escribe logs de alerta cuando detecta algo malicioso, o logs de tráfico si lo configuras explícitamente.

¿Por qué ocurre?

  1. Snort se Ejecutó Correctamente: Al revisar las estadísticas:
    • received: 26 y analyzed: 26: Snort estuvo activo y capturó 26 paquetes.
    • ^C** caught int signal: Confirmas que detuviste Snort manualmente (Ctrl+C).
    • No hay Alertas: La mayoría de los 26 paquetes eran tráfico de red normal como ARP, ICMP6, IGMP y UDP.
  2. No hay Archivos de Log: Por defecto, Snort solo genera archivos de log de formato unified2 cuando genera una alerta o cuando se le pide que registre todo el tráfico.
  3. La Carpeta Sigue Vacía: Como no hubo alertas y no configuraste un registro completo de paquetes, Snort no creó ningún archivo de log en /var/log/snort.

Cómo Generar el Log

Opción 1: Forzar una Alerta (Recomendada para Pruebas)

Debes generar tráfico que active una de las 219 reglas que Snort cargó.

  1. Regla de Prueba (Ping): La forma más fácil es añadir reglas de prueba. Si estás en un entorno de prueba, puedes modificar el archivo snort.lua para añadir una regla de prueba que se active con un simple ping.
    ping 8.8.8.8
  2. Generar Tráfico Malicioso (Si tienes reglas activas): Si tienes reglas de detección de intrusiones cargadas, deberías simular un ataque o un escaneo de puertos.

Opción 2: Generar un Log de Paquetes (Si no hay Alertas)

Si quieres ver el log de los paquetes capturados (aunque no sean alertas), debes añadir una opción de salida de tráfico explícita a tu comando de Snort. Añade la opción -K ascii o --dump-payload para forzar la salida de logs de tráfico legibles por humanos.

Comando de Ejemplo con Salida Verbosa

Simplemente ejecuta Snort en modo "verbose" con -A console y sin especificar el output de logs, lo que te mostrará las alertas directamente en pantalla:

sudo /usr/local/snort/bin/snort -c /usr/local/snort/etc/snort/snort.lua -i enp0s3 -A alert_fast

Comando de Ejemplo para Generar un Log que u2spewfoo pueda Leer

Para que Snort genere un archivo unified2 que u2spewfoo pueda leer, debes usar la opción de salida de log unified2 en el archivo de configuración snort.lua y luego generar una alerta.