Ir al contenido

Estructura del proyecto

  • Directoriocmd/
    • Directoriobenchmark/ Herramienta de benchmark de operaciones RouterOS
    • Directoriocs-routeros-bouncer/
      • main.go Punto de entrada de la CLI
    • Directorioperfmon/ Instrumentación del router y gráficas
  • Directoriointernal/
    • Directorioconfig/
      • config.go Struct de configuración y carga
      • config_test.go
      • doc.go Documentación del paquete
    • Directoriocrowdsec/
      • bouncer_iface.go Interfaz del bouncer de CrowdSec
      • crowdsec_test.go
      • doc.go Documentación del paquete
      • logrus_adapter.go Adaptador de Logrus a zerolog
      • logrus_adapter_test.go
      • mock_bouncer_test.go
      • stream.go Modo streaming
      • stream_test.go
    • Directoriomanager/
      • crowdsec_iface.go Interfaz del stream de CrowdSec
      • doc.go Documentación del paquete
      • manager.go Orquestador central
      • manager_test.go
      • mock_test.go
      • routeros_iface.go Interfaz del cliente de RouterOS
      • start_test.go Pruebas de arranque y reconciliación
    • Directoriometrics/
      • doc.go Documentación del paquete
      • Directoriolapi/ Métricas de uso de la LAPI de CrowdSec
      • metrics.go Definiciones de métricas de Prometheus
      • metrics_test.go
      • server.go Servidor HTTP para /metrics y /health
    • Directoriorosapi/ Cliente de la API de RouterOS vendorizado
      • client.go Conexión, login y despacho de comandos
      • error.go Errores !trap de RouterOS
      • logger.go Enganche de logging
      • Directorioproto/ Protocolo de cable
      • reply.go Ensamblado de respuestas
      • run.go Ejecución de sentencias
    • Directoriorouteros/
      • addresslist.go Operaciones de address list
      • bulk.go Operaciones masivas con scripts
      • client.go Cliente de la API de RouterOS
      • client_mock_test.go
      • conn_iface.go Interfaz de conexión de RouterOS
      • doc.go Documentación del paquete
      • firewall.go Operaciones de reglas de firewall
      • mock_conn_test.go
      • pool.go Pool de conexiones
      • routeros_test.go
  • Directoriodocs/ Documentación (Starlight)
  • Directoriografana/
    • dashboard.json Dashboard de Grafana
  • Directorioconfig/ Archivos de configuración de ejemplo
  • Directoriodocker/
    • Dockerfile Build de Docker
  • go.mod Definición del módulo de Go
  • LICENSE Licencia MIT
  • README.md Readme del proyecto

Punto de entrada de la CLI. Se encarga de:

  • Enrutado de subcomandos (setup, uninstall, version, help) y flags de ejecución (-c, -version)
  • Gestión de señales (SIGTERM, SIGINT)
  • Coordinación del apagado ordenado

Benchmark de operaciones sueltas de RouterOS, descrito en Benchmarking. Solo para desarrollo y planificación de capacidad.

Instrumentación en el propio router, también cubierta en Benchmarking:

  • Compila de forma cruzada un muestreador de /proc/stat a 10 Hz y lo empaqueta como imagen de contenedor sin necesitar Docker
  • Lo instala en un dispositivo RouterOS de forma idempotente (veth, NAT, pertenencia a listas de firewall) y desinstala exactamente lo que creó
  • Descarga ventanas de captura desde Loki en CSV y dibuja la gráfica del ciclo de vida

Gestión de la configuración:

  • Carga la configuración desde un archivo YAML y/o variables de entorno
  • Valida todos los parámetros
  • Proporciona valores por defecto razonables
  • Mapea los nombres de variables de entorno a los campos del struct de configuración

Integración con la LAPI de CrowdSec:

  • Cliente HTTP para la Local API de CrowdSec
  • Modo streaming: consulta decisiones nuevas/eliminadas
  • Filtrado de decisiones por origin, scenario y scope
  • Compatibilidad con certificados TLS

Orquestador central que conecta todos los componentes:

  • Arranque: se conecta a CrowdSec y MikroTik, crea las reglas de firewall, ejecuta la reconciliación
  • Ejecución: procesa decisiones en streaming (bans/unbans)
  • Apagado: elimina las reglas de firewall, cierra las conexiones
  • Gestión de errores y lógica de reintentos

Observabilidad:

  • Definición y registro de métricas de Prometheus
  • Endpoint de comprobación de salud (/health)
  • Recolector de métricas del sistema RouterOS (CPU, memoria, temperatura)
  • Servidor HTTP para los endpoints /metrics y /health

El protocolo de la API de RouterOS en sí, vendorizado para que el proyecto sea dueño del formato de cable en lugar de depender de un tercero sin mantenimiento. Es un fork podado: los modos asíncrono y de escucha ya no están, ni el login por desafío MD5, porque este bouncer no usa ninguno y cada uno era superficie que mantener.

  • proto/: codificación de sentencias, tramado de palabras con prefijo de longitud, lector y escritor
  • Despacho síncrono de comandos bajo un mutex, con plazo por comando
  • Traducción de !trap/!fatal a errores de Go, con redacción de contraseñas en los logs

Cliente de la API de MikroTik RouterOS, construido sobre internal/rosapi:

  • Pool de conexiones con tamaño configurable
  • Operaciones de address list (añadir, eliminar, listar)
  • Operaciones de reglas de firewall (crear, borrar, listar)
  • Consultas de información del sistema
  • Ejecución masiva de scripts para la reconciliación
  • Ayudante de ejecución en paralelo (ParallelExec)