Skip to content

fenreitsu/FEN-IDPS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FEN SURI IDPS — Suricata Rule Manager CLI v1.0

Herramienta CLI e interactiva para gestionar reglas de Suricata en Linux. Permite listar, crear, editar, eliminar, validar y monitorear reglas, con soporte para modo IDS (detección) e IPS (prevención activa).


Requisitos previos

  • Suricata instalado y configurado en el sistema
  • Python 3.10+
  • Ejecutar con sudo — El programa bloquea su ejecución si no se es root
  • Sistema operativo Linux (diseñado y probado en Debian/Ubuntu; en otros SO se advierte)

Instalación

# Clonar o descargar el proyecto
git clone https://github.com/fenreitsu/FEN-IDPS.git
cd FEN-IDPS

# Instalar dependencias Python
pip install -r requirements.txt

# Dar permisos de ejecución
chmod +x fen_suri_idps.py

Configuracion previa de suricata.yaml (OBLIGATORIO)

Antes de usar la herramienta por primera vez, debes modificar ciertos parametros en tu archivo /etc/suricata/suricata.yaml. El programa lee y modifica este archivo para cambiar entre modos IDS/IPS, por lo que debe estar correctamente configurado de base.

1) HOME_NET — Tu red local

Busca la seccion address-groups: y modifica HOME_NET para que coincida con tu red real. Esto es critico porque Suricata interpreta el trafico segun esta configuracion.

address-groups:
  HOME_NET: "[192.168.1.0/24]"
  # Por defecto trae algo como "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
  # Cambialo por el rango de tu red, por ejemplo:
  #   Si tu red es 192.168.1.x:   "[192.168.1.0/24]"
  #   Si tu red es 10.0.0.x:      "[10.0.0.0/24]"

2) default-rule-path — Ruta de archivos .rules

Indica donde se almacenan los archivos de reglas. La herramienta busca y gestiona reglas en este directorio.

default-rule-path: /etc/suricata/rules
# Asegurate de que esta ruta exista y tengas permisos de escritura

Si tu ruta es diferente, tambien debes actualizarla en el archivo config.yaml del proyecto (opcional, la herramienta pregunta al inicio):

general:
  default_rules_path: /etc/suricata/rules

IMPORTANTE: Esta ruta debe coincidir con el default-rule-path de suricata.yaml para que la validacion (suricata -T) funcione correctamente.

3) af-packet — Interfaz de red

Configura la interfaz por la que Suricata captura paquetes. Debe ser la interfaz real de tu sistema (no eth0 si tu interfaz se llama distinto).

af-packet:
  - interface: eth0
    # Puedes ver tus interfaces con: ip link show
    # Comun: eth0, ens33, ens160, wlan0, etc.
    cluster-id: 99
    cluster-type: cluster_flow
    defrag: yes
    use-mmap: yes
    # En modo IPS se agrega automaticamente:
    # mode: ips

IMPORTANTE: Si el programa detecta la estructura incorrecta en af-packet (por ejemplo, que este formateado como diccionario en lugar de lista), puede fallar al cambiar de modo. La estructura correcta es una lista con guiones (- interface: eth0).

4) rule-files — Archivos de reglas a cargar

Define que archivos .rules cargara Suricata al iniciar. NO agregues archivos del paquete oficial si no sabes lo que haces (emerging-threats, suricata.rules por defecto).

rule-files:
  - suricata.rules        # archivo base (viene con Suricata)
  - custom-rules.rules    # archivo personalizado (creado desde la herramienta)

Ejemplo de configuracion minima recomendada:

rule-files:
  - custom-rules.rules

Asi solo cargas tus reglas personalizadas, evitando falsos positivos de reglas genericas.

5) Archivos de referencia (opcional pero recomendado)

classification-file: /etc/suricata/classification.config
reference-config-file: /etc/suricata/reference.config

Advertencias importantes

⚠️ Sobre las reglas por defecto de Suricata

  • NO modifiques los archivos .rules que vienen con la instalacion de Suricata a menos que sepas exactamente lo que haces.
  • Los paquetes como suricata-update o emerging-threats sobreescriben estos archivos al actualizar.
  • Recomendacion: Crea tus propias reglas personalizadas desde la herramienta (opcion [3] o --create). La herramienta te permite crear archivos .rules nuevos desde el selector de archivos con la opcion [0].

⚠️ Sobre NFQUEUE y modo IPS

  • En modo IPS, el programa configura reglas NFQUEUE en iptables para redirigir el trafico a Suricata.
  • Si detienes Suricata mientras hay reglas NFQUEUE activas, el trafico quedara atrapado y perderas conectividad en tu VM/maquina.
  • Para recuperarte: sudo iptables -F (elimina todas las reglas de iptables) o usa la opcion [10][3] desde el menu en modo IPS.
  • Las reglas NFQUEUE solo afectan a la maquina donde se ejecutan. Si usas una VM con adaptador puente, solo afecta al trafico de la VM, no al host.

⚠️ Sobre sudo

  • El programa bloquea la ejecucion si no se ejecuta como root. No hay opcion "continuar de todas formas".
  • Ejecuta siempre: sudo ./fen_suri_idps.py

Modo de uso interactivo

Ejecuta el programa:

sudo ./fen_suri_idps.py

Aparecera el menu principal con las siguientes opciones:

Opciones del menu

Opcion Descripcion
[1] Listar reglas Muestra las reglas de un archivo .rules con paginacion y filtros
[2] Editar regla Abre un archivo .rules en el editor de texto (nano, vim, code...)
[3] Crear regla Formulario guiado para crear una regla Suricata paso a paso
[4] Borrar regla Muestra todas las reglas por SID y permite eliminarlas o deshabilitarlas
[5] Borrar archivos .rules Elimina un archivo .rules completo con doble confirmacion
[6] Validar reglas Ejecuta suricata -T para verificar la sintaxis de todas las reglas
[7] Estado/Recargar/Reiniciar Estado del servicio, recarga en caliente o reinicio completo
[8] Monitor de alertas en vivo Muestra en tiempo real las alertas del fast.log
[9] Monitor IPS Muestra solo alertas de bloqueos (reglas drop/reject)
[10] Configurar modo IDS/IPS Cambia entre modo deteccion y prevencion, configura NFQUEUE

Controles del monitor

  • [p] Pausar la actualizacion en vivo
  • [c] Continuar la actualizacion
  • [l] Limpiar la pantalla del monitor
  • [s] Salir del monitor
  • Flechas/filtros para navegar entre alertas

Navegacion general

  • [0] Salir del programa
  • [b] Volver al menu anterior
  • [?] Mostrar ayuda

Modo de uso por linea de comandos (CLI)

Todas las funciones estan disponibles sin menu interactivo para scripting o uso rapido.

Comandos disponibles

Flag Descripcion Ejemplo
--list Listar reglas sudo ./fen_suri_idps.py --list
--rule <archivo> Archivo .rules especifico --rule custom.rules
--enabled Solo reglas habilitadas --list --enabled
--disabled Solo reglas deshabilitadas --list --disabled
--search <texto> Buscar por texto en msg o SID --search "eternal"
--edit Editar regla por SID --edit --sid 1000001
--create "<regla raw>" Crear regla --create "alert http any any -> any any (msg:\"test\"; sid:1000002; rev:1;)"
-o <archivo> Archivo de destino para --create --create "..." -o custom.rules
--delete Eliminar regla por SID --delete --sid 1000001
--disable Deshabilitar regla --disable --sid 1000001
--enable Habilitar regla --enable --sid 1000001
--sid <numero> SID de la regla (usar con --edit, --delete, --disable, --enable) --sid 1000001
--validate Validar reglas con suricata -T sudo ./fen_suri_idps.py --validate
--status Estado del servicio Suricata sudo ./fen_suri_idps.py --status
--restart Reiniciar servicio Suricata sudo ./fen_suri_idps.py --restart
--reload Recargar reglas en caliente sudo ./fen_suri_idps.py --reload
--monitor Monitor de alertas en vivo sudo ./fen_suri_idps.py --monitor
--mode [ids|ips] Mostrar o cambiar modo sudo ./fen_suri_idps.py --mode ips
--monitor-ips Monitor solo bloqueos drop/reject sudo ./fen_suri_idps.py --monitor-ips
--configure-nfqueue Configurar NFQUEUE para IPS sudo ./fen_suri_idps.py --configure-nfqueue

Ejemplos de uso

# Ver estado del servicio
sudo ./fen_suri_idps.py --status

# Listar todas las reglas habilitadas
sudo ./fen_suri_idps.py --list --enabled

# Crear una regla y guardarla en un archivo personalizado
sudo ./fen_suri_idps.py --create "alert http $HOME_NET any -> $EXTERNAL_NET any (msg:\"HTTP request\"; sid:1000001; rev:1;)" -o custom-rules.rules

# Cambiar a modo IPS
sudo ./fen_suri_idps.py --mode ips

# Ver bloqueos en vivo (modo IPS)
sudo ./fen_suri_idps.py --monitor-ips

Modos IDS vs IPS

Tabla comparativa

Caracteristica IDS (Deteccion) IPS (Prevencion)
Accion alert Genera alerta Genera alerta
Accion drop Se trata como alerta Bloquea el paquete
Accion reject Se trata como alerta Bloquea + RST/ICMP
NFQUEUE No necesario Obligatorio
Monitoreo --monitor --monitor y --monitor-ips
Color en monitor Azul/cyan Rojo (drop/reject)

Cambiar entre modos

Desde el menu interactivo:

  1. Opcion [10] Configurar modo operativo
  2. Seleccionar [1] para cambiar al otro modo
  3. Si cambias de IPS a IDS, el programa te preguntara si deseas eliminar las reglas NFQUEUE

Desde CLI:

sudo ./fen_suri_idps.py --mode ips      # Cambiar a IPS
sudo ./fen_suri_idps.py --mode ids      # Cambiar a IDS
sudo ./fen_suri_idps.py --mode          # Mostrar modo actual

NFQUEUE

NFQUEUE es un target de iptables que envia paquetes a Suricata para que decida si bloquearlos o dejarlos pasar. Es necesario para el modo IPS.

  • El programa verifica automaticamente si NFQUEUE esta disponible en tu kernel
  • Se configura desde la opcion [10] o con --configure-nfqueue
  • Las reglas NFQUEUE se agregan a las cadenas INPUT, FORWARD y OUTPUT de iptables
  • ATENCION: Si detienes Suricata con NFQUEUE activo, el trafico queda atrapado. Para solucionarlo:
    • Opcion [10][3] desde el menu (si estas en modo IPS)
    • O manualmente: sudo iptables -F

Acciones de reglas

Accion Descripcion IDS IPS
alert Genera alerta, no bloquea Si Si
drop Bloquea el paquete silenciosamente No (actua como alerta) Si
reject Bloquea y envia RST (TCP) o ICMP (UDP) No (actua como alerta) Si
pass Permite el trafico (whitelisting) Si Si

Importante: Crear reglas drop o reject en modo IDS no bloqueara el trafico, solo generara alertas. El bloqueo real solo ocurre en modo IPS.


Estructura del proyecto

fen-idps/
├── fen_suri_idps.py          # Punto de entrada principal (CLI + menu interactivo)
├── requirements.txt          # Dependencias Python
├── config.yaml               # Configuracion del proyecto (default_rules_path, etc.)
├── .gitignore                # Archivos ignorados por git
├── README.md                 # Este archivo
│
├── core/
│   ├── __init__.py           # Paquete Python
│   ├── console.py            # UI con Rich: banners, tablas, colores, confirmaciones
│   ├── models.py             # Modelos de datos: Rule, RuleFile
│   ├── parser.py             # Parseo de reglas Suricata desde archivos .rules
│   ├── rule_manager.py       # Logica CRUD de reglas (listar, crear, toggle, borrar)
│   ├── file_selector.py      # Selector interactivo de archivos .rules
│   ├── suricata_utils.py     # Utilidades de Suricata: modo, NFQUEUE, YAML, servicio
│   ├── live_monitor.py       # Monitor en vivo de fast.log con Rich Live
│   └── editor_detector.py    # Deteccion de editores instalados (nano, vim, code, etc.)
│
├── User_folder/              # Archivos de usuario (sesiones, copias de respaldo)
└── exports/                  # Exportaciones CSV generadas desde el monitor

Troubleshooting

"Error: Requiere permisos de sudo"

Ejecuta con sudo. El programa no permite continuar sin permisos de root.

"No se encontraron reglas NFQUEUE para eliminar"

No hay reglas NFQUEUE activas en iptables. Esto es normal si nunca configuraste modo IPS o si ya las eliminaste.

El monitor no muestra alertas

  1. Verifica que Suricata este corriendo: sudo systemctl status suricata
  2. Verifica que el archivo fast.log exista: ls -la /var/log/suricata/fast.log
  3. Genera trafico de prueba: ping 8.8.8.8 o curl http://testmyids.com

No puedo cambiar a modo IPS

  1. Verifica que NFQUEUE este disponible: opcion [10][2]
  2. Si no esta disponible, instala iptables: sudo apt install iptables
  3. Asegurate de que af-packet en suricata.yaml este formateado como lista (con guion)

Perdi conectividad despues de detener Suricata en modo IPS

Las reglas NFQUEUE quedaron atrapando el trafico. Solucion:

sudo iptables -F

Luego reinicia Suricata: sudo systemctl restart suricata

La validacion con suricata -T falla

  1. Verifica que la sintaxis de tus reglas sea correcta
  2. Asegurate de que default-rule-path en suricata.yaml coincida con la ruta donde guardas las reglas
  3. Revisa que los archivos referenciados en rule-files existan

El programa no detecta mis archivos .rules

  1. Verifica que default-rule-path en suricata.yaml apunte al directorio correcto
  2. Si usas una ruta personalizada, actualiza config.yaml

Licencia

Desarrollado por @Fenreitsu.

About

Herramienta CLI e interactiva para gestionar reglas de Suricata en Linux.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages