Un nodo sensore dedicato per la tua LAN: «RoamSwitch Sensor»
RoamSwitch Sensor è un nodo dedicato alla LAN che verifica dall'esterno gli endpoint RoamSwitch della stessa LAN (Mac / Linux Client / Server Edition). Controlla come appare un host da un altro dispositivo della LAN (porte aperte, servizi esposti senza autenticazione, punti d'appoggio per il movimento laterale), cosa che l'host, per principio, non può vedere con la propria autodiagnosi. Offre inoltre un inventario dei dispositivi della LAN e il rilevamento dello spoofing ARP.
🛡️ Audit attivo delle vulnerabilità (solo endpoint abbinati)
Scansione completa delle porte → verifiche di firme note (esposizione non autenticata di Redis/dockerd/Memcached/MongoDB/Elasticsearch/CouchDB/Jenkins/VNC, SMBv1 e firma SMB assente, RDP senza NLA, relay SMTP aperto, ecc.) → acquisizione generica dei banner → scansione supplementare con nmap NSE: quattro fasi, interamente non distruttive.
📋 Composizione della rete (scansione ARP attiva)
Individua i dispositivi della LAN con una scansione ARP. Costruisce un inventario con IP, MAC, hostname, produttore, stato online, prima/ultima rilevazione e cronologia IP, e consente di annotare liberamente nome o uso di ogni dispositivo. I dispositivi senza nota sono evidenziati come da verificare, quindi l’elenco serve anche a confrontarsi con il proprio inventario. Senza nmap il Sensor torna a una modalità passiva che mostra solo i dispositivi con cui ha comunicato.
👁️ Eventi ARP con «Cosa fare ora»
La comparsa di nuovi dispositivi e i cambi di MAC su un IP noto (indizio di ARP spoofing) sono mostrati con orario, gravità (da critica a info), motivi, dispositivi coinvolti e passi concreti di verifica. Un cambio di MAC sull’IP del gateway è valutato critico. Con la cattura passiva opzionale rileva anche un dispositivo che invia richieste ARP per molti IP (ricognizione interna).
🔎 Panoramica degli altri dispositivi della LAN e comportamenti sospetti (solo rilevamento)
Fornisce, come informazione di riferimento: produttore del MAC e categoria del dispositivo, identificazione del modello tramite gli auto-annunci mDNS/SSDP/DHCP, connessioni a IP malevoli noti o porte di amministrazione, segnali di partecipazione a botnet/DDoS (molte destinazioni) e di tunneling DNS/C2. Quasi tutto richiede la cattura passiva opzionale (ad es. una porta mirror) e il Sensor non blocca mai il traffico.
🔑 Abbinamento tramite codice (Ed25519, IP fisso)
Non si fida di nulla per impostazione predefinita. Inserendo il codice di abbinamento monouso, valido 10 minuti, rilasciato dall'operatore del Sensor, insieme all'indirizzo IP fisso del Sensor, si stabilisce in un solo passaggio la fiducia reciproca in entrambe le direzioni. Le chiavi pubbliche vengono scambiate automaticamente, quindi non è necessario conoscerle in anticipo. Non è richiesto alcun account o registrazione cloud.
📅 Audit pianificati e rilevamento delle variazioni (opzionale)
Sottopone ad audit automaticamente, secondo un calendario, tutti gli endpoint abbinati e mostra cosa è cambiato rispetto all'audit precedente: nuovi rilevamenti, risolti e porte appena aperte. Se tutte le porte prima aperte diventano improvvisamente invisibili, il caso è segnalato come probabilmente irraggiungibile, non come risolto. Anche senza supervisione, il Sensor verifica prima e dopo ogni audit che l'indirizzo MAC dell'endpoint sia ancora quello con cui si è autenticato e salta l'audit se l'IP è passato a un altro dispositivo. Disattivato per impostazione predefinita; intervallo e fascia oraria si impostano.
📣 Notifiche ed evidenze di audit (opzionale)
Regressioni, nuovi dispositivi, ARP spoofing e altro possono essere inviati a webhook (Slack, Discord, Teams e altri) e a syslog (RFC 5424). Abbinamento, rimozione, audit e modifiche di configurazione vengono registrati con l'autore in un registro delle operazioni a prova di manomissione (catena di hash), e risultati degli audit, inventario dei dispositivi e registro si esportano in CSV, JSON o report HTML (da salvare come PDF da un browser). Ogni destinazione la scegli tu; per impostazione predefinita non viene inviato nulla.
🗂️ Aggregare più Sensor (collector centrale, opzionale)
Per le organizzazioni con Sensor in più sedi è incluso un collector centrale che raccoglie riepiloghi firmati (disattivato per impostazione predefinita). Offre una dashboard per sede ed esportazione CSV e rileva quando il registro di audit di un Sensor viene troncato o riportato indietro. Accetta solo richieste firmate dei Sensor registrati e si rifiuta di essere esposto fuori dalla LAN senza TLS.
Se il Sensor stesso necessita di protezione dagli attacchi, consigliamo di installare separatamente RoamSwitch for Linux Server Edition sulla stessa macchina: i due funzionano come processi completamente indipendenti.
Esempio di report di audit
Esempio del report generato da roamswitch-sensor export all --format html (il tasto e nella TUI). È un unico file HTML: aprilo in un browser e scegli «Salva come PDF» per ottenere un PDF da consegnare ai revisori.
Report di audit di RoamSwitch Sensor
| Creato il (UTC) | 2026-09-20T02:30:12.508136294+00:00 |
|---|---|
| Sede | Sala server al 3° piano della sede centrale |
| Chiave pubblica del Sensor | +kbYCoN5jJSykTAr8zDv/VCs2SdBcrwYbkCrzCRgsLM= |
| Registro di audit | Verifica di integrità: OK (nessuna manomissione), 18 voci, head #18 771a265c58fa2f0a8990bc6be79ff5259d96a76a0a3fea472f308df02eaa087f |
Ultimo risultato di audit per dispositivo
| Dispositivo | Indirizzo | Data di esecuzione | Rilevamenti | Porte aperte |
|---|---|---|---|---|
| web-prod-01 | 192.168.20.21 | 2026-09-20T02:00:43.318204577+00:00 | 1 voce | 2 |
| db-prod-01 | 192.168.20.22 | 2026-09-20T02:01:14.774390215+00:00 | 2 voci | 3 |
| dev-laptop-07 | 192.168.20.35 | 2026-09-20T02:02:07.120765432+00:00 | Nessun problema | 1 |
Rilevamenti
| Data e ora | Dispositivo | Porta | Descrizione | Azione consigliata |
|---|---|---|---|---|
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 22 | Banner di versione SSH esposto Questo server SSH espone il banner di versione alla connessione. Il banner in sé è un comportamento normale, ma offre a un attaccante indizi per restringere le vulnerabilità note. | Aggiornare SSH all'ultima versione e, se necessario, ridurre al minimo il contenuto del banner. |
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 6379 | Vulnerabilità nota: CVE-2021-32626 (Redis) Descrizione NVD (testo originale in inglese): 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. | Aggiornare al più presto Redis a una versione non interessata da CVE-2021-32626 e, nel frattempo, limitare l'accesso di rete senza autenticazione. |
| 2026-09-20T02:00:43.318204577+00:00 | web-prod-01 | 22 | Banner di versione SSH esposto Questo server SSH espone il banner di versione alla connessione. Il banner in sé è un comportamento normale, ma offre a un attaccante indizi per restringere le vulnerabilità note. | Aggiornare SSH all'ultima versione e, se necessario, ridurre al minimo il contenuto del banner. |
| 2026-09-19T08:33:18.402118906+00:00 | db-prod-01 | 22 | Banner di versione SSH esposto Questo server SSH espone il banner di versione alla connessione. Il banner in sé è un comportamento normale, ma offre a un attaccante indizi per restringere le vulnerabilità note. | Aggiornare SSH all'ultima versione e, se necessario, ridurre al minimo il contenuto del banner. |
Inventario dei dispositivi (tutti i dispositivi osservati nella LAN)
| MAC | IP | Nome host | Produttore | Gestito da RoamSwitch | Note |
|---|---|---|---|---|---|
| 00:1b:8b:3c:9a:07 | 192.168.20.1 | _gateway | NEC Platforms | Non gestito | Router gateway della sede centrale |
| 7c:8b:ca:61:d2:4e | 192.168.20.2 | TP-Link Technologies | Non gestito | Access point Wi-Fi del 3° piano | |
| e4:e7:49:2b:70:c1 | 192.168.20.3 | Hewlett Packard | Non gestito | Multifunzione del 2° piano | |
| 90:61:ae:17:4d:e2 | 192.168.20.21 | Intel Corporate | Gestito | Server web di produzione | |
| 90:61:ae:17:4d:f9 | 192.168.20.22 | Intel Corporate | Gestito | Server database di produzione | |
| 04:20:9a:cc:31:8f | 192.168.20.31 | sensor-hq-01 | Panasonic AVC Networks Company | Non gestito | RoamSwitch-Sensor |
| a0:c9:a0:5e:83:2b | 192.168.20.35 | Murata Manufacturing | Gestito | Notebook di sviluppo | |
| 8e:0f:95:a2:64:5d | 192.168.20.44 | Non gestito | |||
| 5e:e2:59:1d:c8:03 | 192.168.20.45 | Non gestito | |||
| a8:3b:76:9c:20:e4 | 192.168.20.52 | Cloud Network Technology Singapore PTE. | Non gestito |
Registro di operazioni e approvazioni
| # | Data e ora | Esecutore | Operazione | Ambito | Dettagli |
|---|---|---|---|---|---|
| 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 |
Tutti i nomi di macchine, gli indirizzi MAC, gli indirizzi IP e le chiavi mostrati sono fittizi. Il corpo del report è prodotto in giapponese o in inglese (fuori dalla vista giapponese viene mostrata la versione inglese).