Test MQTT
Autor: Gilberto Castillo
Stack: Python · FastAPI · PostgreSQL · Docker · Tailwind CSS · WebSockets · paho-mqtt v2 (MQTT v3.1.1 + v5)
Estado: Producción · URL: https://test-broker.gilman.pro
Herramienta web para probar y depurar cualquier broker MQTT desde el navegador, sin instalar herramientas CLI — en producción, con usuarios temporales autogestionados por correo.
📊 En cifras
| Métrica | Valor |
|---|---|
| Plan de construcción | 100% (75/75 tareas) |
| Protocolos MQTT | 5 (TCP · TLS · mTLS · WS · WSS) |
| Versiones de protocolo | 2 (MQTT v5 + v3.1.1) |
| Formatos de publicación | 4 (texto, JSON, Base64, hexadecimal) |
| Base de datos | PostgreSQL 16 (producción) · SQLite (dev) |
| Usuarios temporales | Validez 24 h, límites de clientes/conexiones editables por admin |
| Protecciones | Rate limit (3/h por IP, 1/día por email) · anti-SSRF · honeypots · pentest externo |
🎬 Demo en vivo
El proyecto incluye una demo navegable del panel de administración con datos de ejemplo: gestión de usuarios, reportes y estadísticas, y archivado de correos. Se recorre igual que la aplicación real, pero sin tocar datos ni servicios reales.
- URL:
https://test-broker.gilman.pro/demo/login.html - Acceso:
super/super123(Super Admin) — las credenciales también se muestran en la propia pantalla de login - El panel permite gestionar los usuarios de test (temporales y comunes) y entrar al tester como uno de ellos (vista
test_*)
🎟️ Solicitar acceso (/solicitar)
Cualquiera puede probar el tester real sin esperar a un administrador: la página pública /solicitar entrega credenciales temporales por autoservicio.
- URL:
https://test-broker.gilman.pro/solicitar - Cómo funciona: ingresas tu correo → el sistema crea un usuario temporal y te envía las credenciales por email (SMTP) → inicias sesión y creas tus clientes MQTT
- Usuarios temporales: validez 24 h con límites controlados (clientes guardados y conexiones simultáneas, editables por el admin) y contraseñas autogeneradas
- Protegido contra abuso: rate limit anti-spam (3 solicitudes/h por IP, 1/día por correo, 7 días de bloqueo) + honeypot que registra IPs
Probar el broker en producción (broker.gilman.pro)
Este tester se conecta a cualquier broker MQTT — y el broker de este ecosistema, broker.gilman.pro (broker MQTT empresarial con dashboard de administración, monitoreo en tiempo real y certificados TLS/mTLS por dispositivo), también se puede probar con este tester:
- Solicita un usuario temporal en
/solicitar— las credenciales llegan a tu correo (validez 24 h) - Crea un cliente MQTT hacia
broker.gilman.pro— 14769 TCP · 14770 WS · 14771 TLS · 14772 mTLS · 443 WSS - Publica y suscríbete desde el navegador
[!TIP] O descarga el kit de pruebas del broker — scripts, certificados mTLS, instalador y guía — y úsalo con el usuario temporal.
Proyecto del broker: Broker MQTT · Artículo técnico: MQTT en producción: pruebas reales · Guía completa: README incluido en el kit
🏆 Logros
⚙️ Funcionalidad
- Proyecto completo en producción — plan de construcción al 100% (75/75 tareas)
- Testing en tiempo real — suscripción y publicación al instante, colores por tópico, filtros y auto-scroll
- Multi-sesión simultánea — varias pestañas probando distintos brokers a la vez
- Puente TCP vía backend — el navegador se conecta a brokers MQTT por WebSocket, sin instalar nada
- Soporte de los 5 protocolos MQTT — TCP, TLS, mTLS, WS y WSS, en MQTT v5 y v3.1.1
- 4 formatos de publicación — texto plano, JSON, Base64 y hexadecimal
- Gestión de accesos — usuarios temporales (con vencimiento) y permanentes, con límites editables por el administrador (clientes guardados y conexiones simultáneas) y contraseñas autogeneradas
- Onboarding por correo — los usuarios solicitan sus credenciales por sí mismos (
/solicitar) - Panel de administración completo — gestión de usuarios, reportes y estadísticas de actividad, y archivado de correos (ver, descargar
.eml, exportar CSV) - Auditoría de actividad — cada evento relevante queda registrado con fecha e IP
🛡️ Seguridad
- Auditoría de seguridad externa — pentesting documentado con informe
- Anti-SSRF — los usuarios temporales no pueden usar hosts de redes internas (RFC1918, link-local,
169.254.169.254,.internal) - Rate limiting y cooldown anti-spam en la solicitud pública (3/h por IP, 1/día por email, 7 días de bloqueo)
- Honeypots — endpoints señuelo que registran IP ante intentos de exploración
- AuthZ por objeto — los usuarios solo acceden a sus propios clientes (404 sin revelar existencia); gestión de usuarios exige rol admin
- Bloqueo de archivos sensibles —
.env,.git/,config.py, BD y backups → 404 + registro del intento - Privacidad en formularios — botón mostrar/ocultar en todos los campos de contraseña
🎨 UX
- Demo del panel sin datos reales — réplica navegable para presentar el producto sin exponer información
- Interfaz responsive con Tailwind CSS · iconos Lucide con SRI · confirmaciones en acciones destructivas
🎯 Problema → Solución
| Problema | Solución |
|---|---|
| No hay herramienta web gratuita para testear brokers MQTT rápidamente | Interfaz completa con login, dashboard y testing en tiempo real |
| Configurar clientes MQTT requiere editar archivos o usar CLI | Alta visual de clientes con nombre, host, puerto, credenciales y protocolo |
| Depurar mensajes MQTT es tedioso sin visibilidad en tiempo real | Comunicación bidireccional con mensajes al instante, filtros y auto-scroll |
| Los brokers usan distintos protocolos y versiones | Selector de protocolo y versión por cliente, con soporte de certificados |
| Un DevOps necesita comprobar que un broker responde antes de integrarlo | Crea un cliente desde el navegador y prueba en segundos — sin herramientas CLI |
| Soporte técnico investiga por qué un dispositivo no envía datos | Abre el cliente del dispositivo y ve sus tópicos en tiempo real |
| Una empresa necesita dar acceso temporal a un integrador externo | Cuenta con vencimiento y límites controlados, entregada por correo |
| El administrador quiere saber quién usó el sistema y cómo | Panel con actividad por usuario y por cliente, historial purgable por fecha |
| Presentar el producto sin mostrar datos reales | Demo navegable del panel con datos de ejemplo |
🏗️ Arquitectura
graph TB
subgraph Navegador["Navegador Web"]
LOGIN["Login"]
DASH["Dashboard"]
TEST["Panel de Test"]
SOL["Solicitar Acceso"]
ADMIN["Panel Admin<br/>(usuarios · reportes · correos)"]
JS["JavaScript"]
end
subgraph Backend["Backend FastAPI"]
API["API REST"]
WS["WebSocket Bridge"]
AUTH["Autenticación"]
end
subgraph MQTT["Gestión MQTT"]
MANAGER["MqttManager"]
S1["Sesión TCP"]
S2["Sesión mTLS"]
SN["Sesión WSS"]
end
subgraph DB["Base de Datos"]
PG["PostgreSQL 16"]
end
subgraph BROKERS["Brokers Externos"]
B1["Broker TCP"]
B2["Broker mTLS"]
B3["Broker WSS"]
end
LOGIN --> JS
DASH --> JS
TEST --> JS
SOL --> JS
ADMIN --> JS
JS -- "HTTP/JSON" --> API
JS -- "WebSocket" --> WS
API --> AUTH
WS --> MANAGER
MANAGER --> S1
MANAGER --> S2
MANAGER --> SN
S1 --> B1
S2 --> B2
SN --> B3
API --> DB
🧰 Stack Tecnológico
| Capa | Tecnología | Propósito |
|---|---|---|
| Backend | FastAPI + Uvicorn | Servidor async con WebSockets nativos |
| Base de datos | PostgreSQL 16 (producción) · SQLite (dev) | Persistencia |
| Frontend | HTML5 + Tailwind CSS + Jinja2 | Interfaz responsive |
| Tiempo real | WebSockets | Comunicación bidireccional persistente |
| MQTT | paho-mqtt v2 (v3.1.1 + v5) | Conexión nativa a brokers |
| Protocolos | TCP · TLS · mTLS · WS · WSS | Los 5 protocolos MQTT estándar |
| Autenticación | Tokens con expiración | Manejo de sesiones |
| Correo | SMTP SSL | Envío de credenciales temporales |
| Contenedores | Docker multi-stage + health check | Deploy reproducible |
| Despliegue | Docker Compose + nginx | Orquestación y proxy reverso |
📞 Contacto
📧 [correo@ejemplo.com] · 🔗 [LinkedIn] · 🐙 [GitHub]
Licencia: uso interno — proyecto personal de Gilberto Castillo.