mikroHUB

Arquitectura de seguridad

Cómo mikroHUB protege su infraestructura de red

Versión del documento: 2026-03-22 · Preguntas: [email protected]

Arquitectura de red

                              INTERNET
         ┌────────────────────┬──────────────────────┐
         │ HTTPS/443          │ WSS/443              │ WG/UDP 51820
         │ (TLS 1.2+)        │ (WebSocket)          │ (WireGuard)
         ▼                    ▼                      ▼
┌─────────────────────────────────────────────────────────────────┐
│  NGINX REVERSE PROXY  (mikrohub.io)                             │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────────────────┐ │
│  │ Let's Encrypt │  │ HSTS Preload │  │ CSP + Security Headers │ │
│  │ ECDSA cert    │  │ max-age=2yr  │  │ X-Frame, X-Content     │ │
│  └──────────────┘  └──────────────┘  └────────────────────────┘ │
│  Ports open : 80 (→301), 443, 51820/UDP                         │
│  Ports BLOCKED: 3001 (API), 6379 (Redis)                         │
└──────────┬──────────────────────┬───────────────────┬───────────┘
           │ :3001               │ :3001/ws          │ :51820
           ▼                     ▼                    ▼
┌──────────────────┐  ┌──────────────┐  ┌──────────────────────────┐
│ EXPRESS API      │  │ WebSocket    │  │ WireGuard (wg0)          │
│ (Node.js)        │  │ Server       │  │ 10.99.0.1/16             │
│                  │  │ One-time     │  │ Per-device /32 peer      │
│ JWT validation   │  │ ticket auth  │  │ No split tunnel          │
│ 60s session cache│  │ (no JWT      │  │                          │
│ 1h max token age │  │  in URL)     │  │ Devices: 10.99.x.y      │
└────────┬─────────┘  └──────────────┘  └──────────────────────────┘
         │
   ┌─────┴──────┐
   ▼            ▼
┌────────┐  ┌────────┐
│Supabase│  │ Redis  │
│Postgres│  │ TLS    │
│(cloud) │  │(local) │
│RLS on  │  │ Auth   │
│all tbl │  │ reqd   │
└────────┘  └────────┘

Todo el tráfico externo termina en Nginx con TLS 1.2+. Los servicios internos (puerto API 3001, puerto Redis 6379) están bloqueados en el nivel del firewall y nunca se exponen a Internet.

Autenticación y autorización

CapaMecanismo
Autenticación de usuarioPKCE
Autenticación Supabase con flujo PKCE (no implícito)
Almacenamiento de tokensCOOKIE
Seguro + SameSite=Cookies laxas (no almacenamiento local)
Vida útil del tokenTTL
1 hora máximo, caché de 60 segundos, actualización forzada
Revocación de sesiónREVOKE
Invalidación en memoria + lista negra de tokens
Autenticación de WebSocketTICKET
Intercambio de boletos único (JWT nunca en URL)
Autenticación de clave APISHA-256
SHA-256 hash, ámbito por recurso, caducidad impuesta
Autenticación del agente del dispositivoAGENT
Token hash SHA-256, velocidad limitada (2 solicitudes/30 s)
Ministerio de Asuntos ExterioresMFA
TOTP (aplicación de autenticación) + WebAuthn/FIDO2 (claves de acceso, YubiKey)

Aislamiento de datos (multiinquilino)

Organización A — "ISP Gdansk"
devices (org_id=1)
metrics (org_id=1)
backups (org_id=1)
logs (org_id=1)
RLS BLOQUEADO
Organización B — "Firma Warszawa"
devices (org_id=2)
metrics (org_id=2)
backups (org_id=2)
logs (org_id=2)
  • Seguridad a nivel de fila (RLS) en TODAS las tablas de datos
  • Se aplica a nivel de PostgreSQL: ni siquiera la inyección de SQL puede cruzar los límites de los inquilinos.
  • El middleware API verifica dos veces la membresía de la organización en cada solicitud
  • Suscripciones a WebSocket validadas contra org_members

Credenciales del dispositivo

1

cifrar

AES-256-GCM con IV aleatorio por entrada, etiqueta de autenticación validada

2

Almacenar

Almacenado como iv:tag:ciphertext en Supabase (nunca texto sin formato)

3

Descifrar en la encuesta

Descifrado sólo en el momento de la encuesta, en memoria, nunca registrado

4

Conectar

RouterOS API-SSL con conexión cifrada TLS

  • Clave de cifrado maestra en la variable de entorno (no en el código, no en la base de datos)
  • Credenciales descifradas solo cuando son necesarias para la conexión del dispositivo
  • Los mensajes de error redactan direcciones IP y credenciales mediante expresiones regulares
  • La credencial nunca aparece en registros, respuestas o seguimiento de auditoría

Modos de conexión

Gestión de API

Conexión TLS directa vía API-SSL (puerto 8729). Acceso completo a la gestión.

  • TLS cifrado
  • IP restringida a mikroHUB
  • Solo puerto 8729

AlambreGuardia

Túnel cifrado: no se requieren puertos abiertos en el enrutador.

  • No se necesitan puertos públicos
  • Por dispositivo/32 pares
  • Sin túnel dividido
  • Configuración única de copiar y pegar

Monitoreo de API

Conexión TLS directa de solo lectura. No hay acceso de escritura al enrutador.

  • Acceso de solo lectura
  • TLS cifrado
  • IP restringida

Agente

El dispositivo envía datos salientes a través de HTTPS. Nada entrante.

  • Solo saliente (HTTPS)
  • No se necesitan puertos abiertos
  • Modelo de solo empuje
  • Velocidad limitada (2 solicitudes/30 s)

Seguridad de infraestructura

ComponenteProtección
TLSTLSv1.2 + TLSv1.3, cifrados ECDHE, precarga HSTS
Cortafuegos (UFW)Sólo 80, 443, 51820/UDP expuestos. API (3001) y Redis (6379) DENEGAR
RedisTLS habilitado, se requiere contraseña, enlace solo de host local
Encabezados NginxHSTS, Opciones de marco X, Opciones de tipo de contenido X, CSP, Política de permisos
Limitación de tasaGlobal 300/15 min, autenticación 5/min, administrador 30/15 min, agente 2/30 s
Parámetros DHdhparam de 2048 bits para secreto directo

Lo que NO hacemos

  • Nunca almacenamos contraseñas en texto sin formato
  • No utilizamos localStorage para tokens.
  • No exponemos servicios internos a Internet.
  • No permitimos el acceso a datos entre inquilinos
  • No registramos credenciales ni datos confidenciales
  • No requerimos puertos abiertos en su enrutador (modo WireGuard)
  • No enviamos conexiones API de texto sin formato (se requiere SSL para el modo directo)

Cumplimiento

EstándarEstado
HTTPS en todas partesaplicado
Cifrado en reposoAES-256-GCM para credenciales
Cifrado en tránsitoTLS + WireGuard
AutenticaciónJWT + MFA + PKCE
AutorizaciónRBAC + SPI
Pista de auditoríaRegistro de auditoría completo con seguimiento de IP
Eliminación de datos (GDPR)Punto final de borrado de cuenta
Gestión de sesionesLista negra de tokens + actualización forzada

¿Preguntas sobre seguridad?

Estaremos encantados de responder cualquier pregunta de posibles clientes y auditores.

[email protected]