scripts/discovery-agent.mjs (Node 18+, zero dipendenze): scansiona CIDR/IP via TCP-connect (no root), reverse-DNS, deduce tipo asset + criticità dalle porte aperte, costruisce asset (external_ref=net:<ip>) + flussi di rete e li POSTa a /api/services/assets-ingest col X-API-Key del connettore. Concorrenza, MAX_HOSTS, DRY_RUN, isPrivate (RFC1918+loopback+link-local). + README_discovery_agent.md (uso, variabili, cron, multi-connettore, estensione cloud, sicurezza). Validato: node --check + DRY_RUN reale (listener temporaneo) → rileva porta aperta, costruisce asset+flusso corretti. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Agente di Discovery NIS2 (discovery-agent.mjs)
Mappa automaticamente la rete del cliente e auto-popola l'Inventario NIS2
(asset + scoring rilevanza NIS2 + Mappa Dipendenze + flussi di rete ID.AM-03).
Node 18+, nessuna dipendenza (usa fetch/net/dns nativi).
Come funziona
- In NIS2 (utente org_admin): Connettori Discovery → Nuovo connettore → copia l'API key (mostrata una sola volta).
- Esegui l'agente dentro la rete da mappare (un host qualunque del cliente):
NIS2_API_KEY=nis2_xxxxxxxx TARGETS=192.168.1.0/24 node discovery-agent.mjs - L'agente scansiona i target (TCP-connect, no root), deduce host/porte/tipo asset e li
invia a
POST /api/services/assets-ingest. NIS2 fa dedup (per IP), scoring e tracciamento del run (visibile nel dettaglio del connettore).
Variabili
| Var | Default | Note |
|---|---|---|
NIS2_API_KEY |
— (obbligatoria) | chiave del connettore |
NIS2_API_URL |
https://nis2.agile.software |
|
TARGETS |
— (obbligatoria) | CIDR/IP separati da virgola: 192.168.1.0/24,10.0.0.5 |
PORTS |
22,80,443,445,3306,3389,5432,8080,8443 |
porte TCP da sondare |
SOURCE |
network |
etichetta provenienza (network/aws/…) |
TIMEOUT_MS |
400 |
timeout per porta |
MAX_HOSTS |
1024 |
tetto host per esecuzione |
CONCURRENCY |
64 |
socket paralleli |
DRY_RUN |
— | 1 = non invia, stampa solo l'anteprima JSON |
Esempi
# Anteprima senza inviare
DRY_RUN=1 TARGETS=10.0.0.0/28 node discovery-agent.mjs
# Scansione + invio, porte e timeout custom
NIS2_API_KEY=nis2_xxx TARGETS=192.168.10.0/24 PORTS=22,80,443 TIMEOUT_MS=600 node discovery-agent.mjs
# Pianificato (cron, ogni notte)
0 2 * * * NIS2_API_KEY=nis2_xxx TARGETS=192.168.0.0/23 node /opt/nis2/discovery-agent.mjs >> /var/log/nis2-discovery.log 2>&1
Più connettori per azienda
Crea un connettore per ciascuna sorgente (es. Rete sede Roma, Rete sede Modena, AWS prod):
ognuno ha la sua API key e il suo storico run. L'agente di rete copre i CIDR; per il cloud
(aws/azure/gcp) si estende lo stesso schema elencando le istanze via SDK del provider e
inviandole con lo stesso formato assets-ingest (source: "aws", external_ref: "aws:i-...").
Sicurezza
- L'API key ha solo scope
ingest:assets(può solo aggiungere asset/flussi alla sua org). - Esegui l'agente da un host fidato; ruota la chiave dal connettore se compromessa (Rigenera chiave).
- Scansiona solo reti di tua proprietà / autorizzate.