Un nodo sensor dedicado para tu LAN: «RoamSwitch Sensor»
RoamSwitch Sensor es un nodo dedicado a la LAN que audita desde fuera los equipos RoamSwitch de la misma LAN (Mac / Linux Client / Server Edition). Comprueba cómo se ve un host desde otro equipo de la LAN (puertos abiertos, servicios expuestos sin autenticación, puntos de apoyo para el movimiento lateral), algo que el host, por principio, no puede ver con su propio autodiagnóstico. Además ofrece un inventario de dispositivos de la LAN y detección de suplantación ARP.
🛡️ Auditoría de vulnerabilidades activa (solo endpoints emparejados)
Escaneo completo de puertos → comprobaciones de firmas conocidas (exposición sin autenticación de Redis/dockerd/Memcached/MongoDB/Elasticsearch/CouchDB/Jenkins/VNC, SMBv1 y falta de firma SMB, RDP sin NLA, relay SMTP abierto, etc.) → obtención genérica de banners → escaneo complementario con nmap NSE: cuatro fases, totalmente no destructivas.
📋 Composición de la red (barrido ARP activo)
Encuentra los dispositivos de la LAN con un barrido ARP. Crea un inventario con IP, MAC, nombre de host, fabricante, estado en línea, primera/última detección e historial de IP, y permite anotar libremente un nombre o uso por dispositivo. Los dispositivos sin nota se destacan como pendientes de revisión, así que sirve para cotejar con su inventario de activos. Sin nmap, el Sensor vuelve a un modo pasivo que solo muestra los dispositivos con los que él mismo se ha comunicado.
👁️ Eventos ARP con «Qué hacer ahora»
La aparición de nuevos dispositivos y los cambios de MAC en una IP conocida (indicio de suplantación ARP) se presentan con la hora, la gravedad (crítica a informativa), los motivos, los dispositivos implicados y pasos concretos de verificación. Un cambio de MAC en la IP de la puerta de enlace se considera crítico. Con la captura pasiva opcional, también detecta un dispositivo que envía solicitudes ARP a muchas IP (reconocimiento interno).
🔎 Visión de otros dispositivos de la LAN y comportamiento sospechoso (solo detección)
Muestra, como información de referencia: fabricante de la MAC y categoría del dispositivo, identificación del modelo mediante los autoanuncios mDNS/SSDP/DHCP, conexiones a IP maliciosas conocidas o puertos de administración, indicios de participación en botnets/DDoS (conexión a muchos destinos) y de túneles DNS/C2. Casi todo requiere la captura pasiva opcional (p. ej., un puerto espejo) y el Sensor nunca bloquea tráfico.
🔑 Emparejamiento por código (Ed25519, IP fija)
No confía en nada de forma predeterminada. Introducir el código de emparejamiento de un solo uso, válido durante 10 minutos, emitido por el operador del Sensor, junto con la dirección IP fija del Sensor, establece confianza mutua en ambas direcciones en un solo paso. Las claves públicas se intercambian automáticamente, por lo que no es necesario conocerlas de antemano. No se requiere cuenta ni registro en la nube.
📅 Auditorías programadas y detección de cambios (opcional)
Audita automáticamente, según un calendario, todos los endpoints emparejados y muestra qué ha cambiado desde la auditoría anterior: hallazgos nuevos, resueltos y puertos recién abiertos. Si de repente dejan de verse todos los puertos que estaban abiertos, se informa como posiblemente inalcanzable, no como resuelto. Incluso sin supervisión, el Sensor confirma antes y después de cada auditoría que la dirección MAC del endpoint sigue siendo aquella con la que se autenticó y omite la auditoría si la IP ha pasado a otro dispositivo. Desactivado por defecto; usted define el intervalo y la franja horaria.
📣 Notificaciones y evidencias de auditoría (opcional)
Las regresiones, los dispositivos nuevos, la suplantación ARP y más pueden enviarse a webhooks (Slack, Discord, Teams y otros) y a syslog (RFC 5424). El emparejamiento, su anulación, las auditorías y los cambios de configuración se registran junto con quién los realizó en un registro de operaciones a prueba de manipulaciones (cadena de hashes), y los resultados de auditoría, el inventario y el registro se exportan como CSV, JSON o informe HTML (guárdelo como PDF desde un navegador). Cada destino lo define usted; por defecto no se envía nada.
🗂️ Agregar varios Sensors (colector central, opcional)
Para organizaciones con Sensors en varias sedes se incluye un colector central que reúne resúmenes firmados (desactivado por defecto). Ofrece un panel por sede y exportación CSV, y detecta que el registro de auditoría de un Sensor haya sido truncado o retrocedido. Solo acepta solicitudes firmadas de Sensors registrados y se niega a exponerse fuera de la LAN sin TLS.
Si el propio Sensor necesita protegerse contra ataques, recomendamos instalar por separado RoamSwitch for Linux Server Edition en la misma máquina: ambos se ejecutan como procesos totalmente independientes.
Ejemplo de informe de auditoría
Ejemplo del informe que genera roamswitch-sensor export all --format html (la tecla e en la TUI). Es un único archivo HTML: ábralo en un navegador y elija «Guardar como PDF» para obtener un PDF que entregar a los auditores.
Informe de auditoría de RoamSwitch Sensor
| Fecha de creación (UTC) | 2026-09-20T02:30:12.508136294+00:00 |
|---|---|
| Sede | Sala de servidores, 3.ª planta de la sede central |
| Clave pública del Sensor | +kbYCoN5jJSykTAr8zDv/VCs2SdBcrwYbkCrzCRgsLM= |
| Registro de auditoría | Verificación de integridad: correcta (sin manipulación), 18 entradas, head #18 771a265c58fa2f0a8990bc6be79ff5259d96a76a0a3fea472f308df02eaa087f |
Último resultado de auditoría por dispositivo
| Dispositivo | Dirección | Fecha de ejecución | Hallazgos | Puertos abiertos |
|---|---|---|---|---|
| web-prod-01 | 192.168.20.21 | 2026-09-20T02:00:43.318204577+00:00 | 1 elemento | 2 |
| db-prod-01 | 192.168.20.22 | 2026-09-20T02:01:14.774390215+00:00 | 2 elementos | 3 |
| dev-laptop-07 | 192.168.20.35 | 2026-09-20T02:02:07.120765432+00:00 | Sin problemas | 1 |
Hallazgos
| Fecha y hora | Dispositivo | Puerto | Descripción | Acción recomendada |
|---|---|---|---|---|
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 22 | Banner de versión SSH expuesto Este servidor SSH expone su banner de versión al conectarse. El banner en sí es un comportamiento normal, pero ayuda a un atacante a acotar vulnerabilidades conocidas. | Actualice SSH a la última versión y minimice el contenido del banner si es necesario. |
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 6379 | Vulnerabilidad conocida: CVE-2021-32626 (Redis) Descripción de NVD (texto original en inglés): Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. | Actualice Redis cuanto antes a una versión no afectada por CVE-2021-32626 y, mientras tanto, restrinja el acceso de red sin autenticación. |
| 2026-09-20T02:00:43.318204577+00:00 | web-prod-01 | 22 | Banner de versión SSH expuesto Este servidor SSH expone su banner de versión al conectarse. El banner en sí es un comportamiento normal, pero ayuda a un atacante a acotar vulnerabilidades conocidas. | Actualice SSH a la última versión y minimice el contenido del banner si es necesario. |
| 2026-09-19T08:33:18.402118906+00:00 | db-prod-01 | 22 | Banner de versión SSH expuesto Este servidor SSH expone su banner de versión al conectarse. El banner en sí es un comportamiento normal, pero ayuda a un atacante a acotar vulnerabilidades conocidas. | Actualice SSH a la última versión y minimice el contenido del banner si es necesario. |
Inventario de equipos (todos los dispositivos observados en la LAN)
| MAC | IP | Nombre de host | Fabricante | Gestionado por RoamSwitch | Nota |
|---|---|---|---|---|---|
| 00:1b:8b:3c:9a:07 | 192.168.20.1 | _gateway | NEC Platforms | No gestionado | Router de puerta de enlace de la sede central |
| 7c:8b:ca:61:d2:4e | 192.168.20.2 | TP-Link Technologies | No gestionado | Punto de acceso Wi-Fi de la 3.ª planta | |
| e4:e7:49:2b:70:c1 | 192.168.20.3 | Hewlett Packard | No gestionado | Multifunción de la 2.ª planta | |
| 90:61:ae:17:4d:e2 | 192.168.20.21 | Intel Corporate | Gestionado | Servidor web de producción | |
| 90:61:ae:17:4d:f9 | 192.168.20.22 | Intel Corporate | Gestionado | Servidor de base de datos de producción | |
| 04:20:9a:cc:31:8f | 192.168.20.31 | sensor-hq-01 | Panasonic AVC Networks Company | No gestionado | RoamSwitch-Sensor |
| a0:c9:a0:5e:83:2b | 192.168.20.35 | Murata Manufacturing | Gestionado | Portátil de desarrollo | |
| 8e:0f:95:a2:64:5d | 192.168.20.44 | No gestionado | |||
| 5e:e2:59:1d:c8:03 | 192.168.20.45 | No gestionado | |||
| a8:3b:76:9c:20:e4 | 192.168.20.52 | Cloud Network Technology Singapore PTE. | No gestionado |
Registro de operaciones y aprobaciones
| # | Fecha y hora | Ejecutor | Operación | Alcance | Detalles |
|---|---|---|---|---|---|
| 18 | 2026-09-20T02:02:07.120765432+00:00 | scheduler | audit_completed | dev-laptop-07 (Q9mW3sLp0xVc) | trigger=scheduled host=192.168.20.35 findings=0 open_ports=1 new_findings=0 resolved_findings=0 |
| 17 | 2026-09-20T02:02:05.402816653+00:00 | scheduler | audit_started | dev-laptop-07 (Q9mW3sLp0xVc) | host=192.168.20.35 |
| 16 | 2026-09-20T02:01:14.774390215+00:00 | scheduler | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=scheduled host=192.168.20.22 findings=2 open_ports=3 new_findings=1 resolved_findings=0 |
| 15 | 2026-09-20T02:01:12.117409552+00:00 | scheduler | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | host=192.168.20.22 |
| 14 | 2026-09-20T02:00:43.318204577+00:00 | scheduler | audit_completed | web-prod-01 (Xk3F9aLm2QzB) | trigger=scheduled host=192.168.20.21 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 13 | 2026-09-20T02:00:41.029385714+00:00 | scheduler | audit_started | web-prod-01 (Xk3F9aLm2QzB) | host=192.168.20.21 |
| 12 | 2026-09-19T09:11:40.318842077+00:00 | cli:uid=1000 | config_changed | schedule.window_end_hour | value=5 |
| 11 | 2026-09-19T09:11:32.640571920+00:00 | cli:uid=1000 | config_changed | schedule.window_start_hour | value=1 |
| 10 | 2026-09-19T09:10:02.205197346+00:00 | cli:uid=1000 | config_changed | schedule.enabled | value=true |
| 9 | 2026-09-19T08:47:19.771263084+00:00 | control_api: | pair | dev-laptop-07 (Q9mW3sLp0xVc) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 8 | 2026-09-19T08:46:52.093718455+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 7 | 2026-09-19T08:33:18.402118906+00:00 | cli:uid=1000 | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=manual host=192.168.20.22 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 6 | 2026-09-19T08:33:15.588240391+00:00 | cli:uid=1000 | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | manual audit; host=192.168.20.22 |
| 5 | 2026-09-19T08:31:07.336914608+00:00 | control_api: | pair | db-prod-01 (Zt4Kb8NwY1eR) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 4 | 2026-09-19T08:30:41.874526103+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 3 | 2026-09-19T08:12:26.152083967+00:00 | control_api: | pair | web-prod-01 (Xk3F9aLm2QzB) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 2 | 2026-09-19T08:11:58.960417225+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 1 | 2026-09-19T08:00:03.415602838+00:00 | daemon | daemon_started | version 0.3.4 |
RoamSwitch Sensor Audit Report
| Generated (UTC) | 2026-09-20T02:30:12.508136294+00:00 |
|---|---|
| Site | HQ – 3F server room |
| Sensor public key | +kbYCoN5jJSykTAr8zDv/VCs2SdBcrwYbkCrzCRgsLM= |
| Audit log | Integrity check: OK (no tampering detected) — 18 entries, head #18 771a265c58fa2f0a8990bc6be79ff5259d96a76a0a3fea472f308df02eaa087f |
Latest audit per endpoint
| Endpoint | Address | Timestamp | Findings | Open ports |
|---|---|---|---|---|
| web-prod-01 | 192.168.20.21 | 2026-09-20T02:00:43.318204577+00:00 | 1 finding(s) | 2 |
| db-prod-01 | 192.168.20.22 | 2026-09-20T02:01:14.774390215+00:00 | 2 finding(s) | 3 |
| dev-laptop-07 | 192.168.20.35 | 2026-09-20T02:02:07.120765432+00:00 | clean | 1 |
Findings
| When | Endpoint | Port | Finding | Recommendation |
|---|---|---|---|---|
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 6379 | Known Vulnerability: CVE-2021-32626 (Redis) Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. | Upgrade Redis to a version not affected by CVE-2021-32626 as soon as possible, and restrict unauthenticated network access to it in the meantime. |
| 2026-09-20T02:00:43.318204577+00:00 | web-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
| 2026-09-19T08:33:18.402118906+00:00 | db-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
Device inventory (every device observed on the LAN)
| MAC | IP | Hostname | Vendor | Managed | Note |
|---|---|---|---|---|---|
| 00:1b:8b:3c:9a:07 | 192.168.20.1 | _gateway | NEC Platforms | no | HQ gateway router |
| 7c:8b:ca:61:d2:4e | 192.168.20.2 | TP-Link Technologies | no | 3F Wi-Fi access point | |
| e4:e7:49:2b:70:c1 | 192.168.20.3 | Hewlett Packard | no | 2F multifunction printer | |
| 90:61:ae:17:4d:e2 | 192.168.20.21 | Intel Corporate | yes | Production web server | |
| 90:61:ae:17:4d:f9 | 192.168.20.22 | Intel Corporate | yes | Production database server | |
| 04:20:9a:cc:31:8f | 192.168.20.31 | sensor-hq-01 | Panasonic AVC Networks Company | no | RoamSwitch-Sensor |
| a0:c9:a0:5e:83:2b | 192.168.20.35 | Murata Manufacturing | yes | Development laptop | |
| 8e:0f:95:a2:64:5d | 192.168.20.44 | no | |||
| 5e:e2:59:1d:c8:03 | 192.168.20.45 | no | |||
| a8:3b:76:9c:20:e4 | 192.168.20.52 | Cloud Network Technology Singapore PTE. | no |
Operation & approval log
| # | When | Actor | Action | Target | Detail |
|---|---|---|---|---|---|
| 18 | 2026-09-20T02:02:07.120765432+00:00 | scheduler | audit_completed | dev-laptop-07 (Q9mW3sLp0xVc) | trigger=scheduled host=192.168.20.35 findings=0 open_ports=1 new_findings=0 resolved_findings=0 |
| 17 | 2026-09-20T02:02:05.402816653+00:00 | scheduler | audit_started | dev-laptop-07 (Q9mW3sLp0xVc) | host=192.168.20.35 |
| 16 | 2026-09-20T02:01:14.774390215+00:00 | scheduler | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=scheduled host=192.168.20.22 findings=2 open_ports=3 new_findings=1 resolved_findings=0 |
| 15 | 2026-09-20T02:01:12.117409552+00:00 | scheduler | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | host=192.168.20.22 |
| 14 | 2026-09-20T02:00:43.318204577+00:00 | scheduler | audit_completed | web-prod-01 (Xk3F9aLm2QzB) | trigger=scheduled host=192.168.20.21 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 13 | 2026-09-20T02:00:41.029385714+00:00 | scheduler | audit_started | web-prod-01 (Xk3F9aLm2QzB) | host=192.168.20.21 |
| 12 | 2026-09-19T09:11:40.318842077+00:00 | cli:uid=1000 | config_changed | schedule.window_end_hour | value=5 |
| 11 | 2026-09-19T09:11:32.640571920+00:00 | cli:uid=1000 | config_changed | schedule.window_start_hour | value=1 |
| 10 | 2026-09-19T09:10:02.205197346+00:00 | cli:uid=1000 | config_changed | schedule.enabled | value=true |
| 9 | 2026-09-19T08:47:19.771263084+00:00 | control_api: | pair | dev-laptop-07 (Q9mW3sLp0xVc) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 8 | 2026-09-19T08:46:52.093718455+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 7 | 2026-09-19T08:33:18.402118906+00:00 | cli:uid=1000 | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=manual host=192.168.20.22 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 6 | 2026-09-19T08:33:15.588240391+00:00 | cli:uid=1000 | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | manual audit; host=192.168.20.22 |
| 5 | 2026-09-19T08:31:07.336914608+00:00 | control_api: | pair | db-prod-01 (Zt4Kb8NwY1eR) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 4 | 2026-09-19T08:30:41.874526103+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 3 | 2026-09-19T08:12:26.152083967+00:00 | control_api: | pair | web-prod-01 (Xk3F9aLm2QzB) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 2 | 2026-09-19T08:11:58.960417225+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 1 | 2026-09-19T08:00:03.415602838+00:00 | daemon | daemon_started | version 0.3.4 |
Todos los nombres de equipos, direcciones MAC, direcciones IP y claves mostrados son ficticios. El cuerpo del informe se genera en japonés o en inglés (fuera de la vista en japonés se muestra la versión en inglés).