Broker MQTT
Volver a proyectos

Broker MQTT

MQTT Mosquitto Python FastAPI WebSocket TLS/mTLS Docker SQLite

Broker MQTT empresarial en producción (broker.gilman.pro) con dashboard de administración, monitoreo en tiempo real, certificados TLS/mTLS por dispositivo y panel de control web. Construido con Mosquitto, FastAPI, nginx y Docker.


Tabla de Contenidos


🚀 Pruébalo ahora

Vía Cómo
Artículo técnico MQTT en producción: pruebas reales — la técnica detrás del broker explicada, con validación 16/16
Test-Broker (web) test-broker.gilman.pro — solicita un usuario temporal por correo (/solicitar, validez 24 h) y prueba el broker desde el navegador, sin instalar nada
Kit descargable ⬇️ kit-pruebas-mqtt.rar — scripts de validación, certificados mTLS, instalador de Mosquitto, guía PDF y README paso a paso

📖 Guía larga de uso y pruebas: README del kit (incluido en el .rar) · Artículo técnico: MQTT en producción: pruebas reales


📊 En cifras

Métrica Valor
Protocolos MQTT 5 (TCP · WS · TLS · mTLS · WSS)
Lenguajes con ejemplos 6 (CLI, Python, Node.js, ESP32/Arduino, navegador, WSS)
Validación en vivo 16/16 pruebas superadas (5 conexiones + 10 comunicaciones cruzadas + intrusión bloqueada)
Pruebas CLI mosquitto 4/4 PASS (PUB/SUB de ida y vuelta en todos los protocolos)
Auditoría web/API 19/21 (90%) — 0 vulnerabilidades críticas
Métodos gestionables 6 (activar/desactivar en vivo desde el panel, sin tocar configuración)
Monitoreo Tiempo real vía WebSocket + watcher automático de servicios

🏗️ Arquitectura

graph TB
    subgraph "Internet"
        CLI[Dispositivos IoT]
        WEB[Navegador Web]
    end

    subgraph "Capa Segura (TLS)"
        NGX[Nginx<br/>broker.gilman.pro]
    end

    subgraph "Plataforma"
        BROKER["Broker MQTT<br/>TCP · WS · TLS · mTLS"]
        DASH["Dashboard de Administración<br/>Monitoreo en tiempo real"]
        WATCH["Watcher<br/>Supervisión de servicios"]
        DB[("Base de datos<br/>SQLite")]
    end

    CLI -->|TCP / TLS / mTLS| BROKER
    CLI -->|WSS| NGX
    WEB -->|HTTPS| NGX
    NGX --> BROKER
    NGX --> DASH
    DASH -->|WebSocket| WEB
    DASH --- DB
    BROKER --- DASH
    WATCH --- BROKER

🔌 Protocolos Soportados

Protocolo Puerto Puerto Interno Uso Guía
TCP 14769 1884 Conexión estándar IoT Ver
WebSocket 14770 8083 Navegadores y aplicaciones web Ver
TLS 14771 8883 Conexión cifrada (certificado servidor) Ver
mTLS 14772 8884 Autenticación mutua (máxima seguridad) Ver
WSS 443 nginx → 8083 WebSocket seguro para producción Ver

[!TIP] Los 5 métodos de conexión son gestionables desde el panel: se activan o desactivan en vivo sin tocar configuración manual, y el broker regenera su configuración automáticamente.


🛡️ Seguridad

Autenticación multicapa y hardening:

  • ✅ JWT con cookies HttpOnly + Secure + SameSite y roles granulares (admin, editor, lector) con permisos heredados
  • ✅ Rate limiting por IP contra fuerza bruta en login (verificado: HTTP 429 + cooldown)
  • ✅ TLS/mTLS con CA interna y certificados por dispositivo — intrusos sin certificado son bloqueados (verificado)
  • ✅ Headers de seguridad: CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy
  • ✅ CORS restrictivo con orígenes permitidos específicos · bloqueo de rutas sensibles (.env, secretos)
  • ✅ Pentest automatizado integrado en el flujo de trabajo + logging completo para auditoría
  • ✅ Cifrado en tránsito en todos los protocolos (TLS 1.2/1.3) · menor privilegio con permisos heredados

Resultados del pentest (2026-08-12): TLS válido + HSTS ✅ · SQLi/XSS bloqueados ✅ · anti-enumeración ✅ · API protegida (401/404) ✅ · sin archivos sensibles expuestos ✅ · 0 vulnerabilidades críticas.


⚙️ Funcionalidad

  • ✅ Monitoreo en tiempo real vía WebSocket (clientes conectados, tráfico, tópicos)
  • ✅ Gestión de usuarios MQTT completa desde la interfaz
  • ✅ Emisión y revocación de certificados por dispositivo desde el panel (365 días de validez, flujo de revocación verificado)
  • ✅ Activación/desactivación de métodos de conexión en vivo (TCP, WS, TLS, mTLS, WSS, anónimo)
  • ✅ Regeneración automática de configuración del broker al cambiar métodos
  • ✅ Watcher automático que supervisa y recupera servicios

🧰 Stack Tecnológico

Capa Tecnología
Broker Eclipse Mosquitto 2.0.12
Dashboard Python FastAPI + Uvicorn
Base de datos SQLite (ligera, sin dependencias externas)
Monitoreo Servicio watcher en contenedor
TLS nginx (terminación SSL)
Orquestación Docker Compose (3 servicios)

🎯 Casos de Uso

Sector Uso Protocolo
Doméstico Casa inteligente (sensores, iluminación, clima) TCP/TLS
Industrial Monitoreo de máquinas, calidad, alarmas TCP/TLS
Vehicular Fleet management (GPS, telemetría, OBD) TCP/TLS
Salud Telemedicina, signos vitales, historial clínico TLS/mTLS
Agrícola AgTech (riego inteligente, sensores de suelo, drones) TCP/TLS
Seguridad Acceso crítico con identidad verificable mTLS
Web Dashboards en navegador, alertas en tiempo real WSS

Ejemplo: Despliegue típico en planta industrial

Sensores de temperatura → TCP/TLS → Broker MQTT
Controladores de máquinas → mTLS → Broker MQTT
Panel de operadores → WSS → Dashboard en tiempo real
  1. Cada dispositivo recibe usuario/contraseña y, si es crítico, un certificado firmado por la CA interna
  2. El broker enruta los mensajes por tópicos jerárquicos (planta/prensa/temperatura)
  3. El dashboard muestra en vivo: dispositivos conectados, tráfico, alertas y logs
  4. Ante un incidente, se puede revocar el acceso de un dispositivo en segundos desde el panel

✅ Validación y Resultados

Infraestructura MQTT — 16/16 PASS (2026-08-12)

Prueba Resultado
Conexión TCP (14769) · WebSocket (14770) · WSS (443) · TLS (14771) · mTLS (14772) ✅ 5/5
Comunicación cruzada (10 combinaciones entre protocolos) ✅ 10/10
Intrusión mTLS (cliente sin certificado) ✅ Bloqueado (SSLError)

CLI mosquitto — 4/4 PASS (2026-08-12)

PUB/SUB de ida y vuelta con mosquitto_pub/mosquitto_sub 2.1.2: TCP test/cli ✅ · TLS test/cli-tls ✅ · mTLS test02/cli ✅ · WSS test/cli-wss ✅

Auditoría web/API — 19/21 (90%)

TLS + HSTS ✅ · validación de entrada y SQLi ✅ · anti-enumeración ✅ · API sin token → 401/404 ✅ · rate limiting activo (429) ✅ · headers ✅ · CORS ✅

[!NOTE] Los 2 casos no superados corresponden a credenciales de prueba rotadas en producción (medida de seguridad) y al rate limit de la propia prueba — no son vulnerabilidades.

Otras pruebas realizadas

  • ✅ Ciclo completo desactivar → reactivar de los 6 métodos de conexión (sin errores, estado restaurado)
  • ✅ Certificados: generación, openssl verify, integridad de pares y revocación
  • ✅ WSS: HTTP 101 Switching Protocols (TLS 1.3) + PUB/SUB completo
  • ✅ Pentest automatizado: headers, TLS 1.2/1.3, CORS, rate limiting
  • ✅ Autenticación: login con los 3 roles, credenciales incorrectas rechazadas, JWT con expiración

🧪 Cómo probarlo

Opción 1 — Desde el navegador (sin instalar nada): entra a test-broker.gilman.pro/solicitar, solicita un usuario temporal (llega por correo, 24 h) y crea un cliente MQTT hacia broker.gilman.pro.

Opción 2 — Kit descargable: ⬇️ kit-pruebas-mqtt.rar — descomprime, pip install paho-mqtt y ejecuta:

cd broker
python3 publicador_password.py     # TCP (14769)
python3 publicador_certificado.py  # mTLS (14772)
python3 validador_completo.py      # 16/16 pruebas

Opción 3 — CLI mosquitto (instalador incluido en el kit): suscriptor en una terminal, publicador en otra, con -h broker.gilman.pro -p 14769.

📖 El detalle completo (todos los lenguajes, protocolos, scripts y resultados) está en el README incluido dentro del kit, y la versión resumida en el artículo técnico.


📚 Recursos

Documento Contenido
Artículo técnico (blog) La técnica detrás del broker, explicada paso a paso
Proyecto Test MQTT Tester web para probar el broker desde el navegador
Kit de pruebas (.rar) Scripts, certificados, instalador y guías (README incluido)
  • Producción: https://broker.gilman.pro · WSS: wss://broker.gilman.pro/mqtt
  • Autor: Gilberto Castillo · [GitHub] · [LinkedIn]

Última actualización: 2026-08-12 · Estado: Producción activa · Versión: v4.0

Volver a proyectos