Automating Threat Intelligence series
4 Maggio 2025
NetDoc: analisi e documentazione di rete automatizzata
Anni fa ho lavorato a un progetto di migrazione di un data center. Ero responsabile della revisione della documentazione di rete e dell’automazione delle fasi di configurazione, test e migrazione. Non era possibile rivedere manualmente dozzine di switch, quindi ho scritto alcuni script Python per ottenere informazioni di vicinato e configurazione dagli switch, generando diagrammi Visio. Alla fine, sono riuscito a scoprire un’intera topologia di rete in pochi minuti.
NetDoc sarebbe lo strumento open-source industrializzato disponibile pubblicamente per la scoperta di reti multi-vendor. Si basa su Netbox, Netmiko, nornir, ntc-templates e netbox-topologyi-views.
Un passo successivo vedrebbe l’integrazione di draw.io in netbox-topology-views per esportare i diagrammi in un formato riutilizzabile.
Installazione
NetDoc richiede un’istanza funzionante di netbox. Consultare come installare netbox, quindi consultare come installare NetDoc. In questo post sto usando netbox 3.3.2.
Se lo trovi utile, non dimenticare di sponsorizzarlo.
Utilizzo
Una volta effettuato l’accesso, dobbiamo creare un sito. Poi andiamo su Plugin
-> Netdoc
-> Credenziali
e aggiungiamo o importiamo tutte le credenziali utilizzate per accedere ai dispositivi di rete. Possiamo anche importare via CSV utilizzando il seguente formato:
name,username,password,enable_password
ssh-admin-w-enable,admin,C1sco123,C1sco123
ssh-admin-wo-enable,admin,C1sco123,
Quindi dobbiamo aggiungere/importare almeno un discoverable. Un discoverable è un nodo di rete da cui NetDoc può recuperare informazioni. Anche in questo caso possiamo importare via CSV utilizzando il seguente formato:
address,credential,mode,site
172.25.82.38,ssh-admin-w-enable,netmiko_cisco_nxos,Test Site
172.25.82.37,ssh-admin-w-enable,netmiko_cisco_nxos,Test Site
172.25.82.36,ssh-admin-w-enable,netmiko_cisco_nxos,Test Site
172.25.82.35,ssh-admin-w-enable,netmiko_cisco_nxos,Test Site
Dobbiamo modificare questi dispositivi e renderli discoverable. Ora possiamo avviare la scoperta, selezionando uno o più discoverable e premendo il pulsante.
Possiamo seguire il processo di scoperta utilizzando journalctl
:
# journalctl -u netbox-rq -f
Aug 28 19:54:55 linux-station python3[306570]: multiple_tasks*******************
***********************************************
Aug 28 19:54:55 linux-station python3[306570]: * 172.25.82.35 ** changed : False
**********************************************
Aug 28 19:54:55 linux-station python3[306570]: vvvv multiple_tasks ** changed :
False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO
Aug 28 19:54:55 linux-station python3[306570]: ---- show running-config ** chang
ed : False ------------------------------------ INFO
Aug 28 19:54:55 linux-station python3[306570]: Building configuration...
Aug 28 19:54:55 linux-station python3[306570]:
Aug 28 19:54:55 linux-station python3[306570]: Current configuration : 3662 bytes
Aug 28 19:54:55 linux-station python3[306570]: !
Aug 28 19:54:55 linux-station python3[306570]: ! Last configuration change at 12:00:59 UTC Wed Jul 13 2022
Aug 28 19:54:55 linux-station python3[306570]: !
Aug 28 19:54:55 linux-station python3[306570]: version 15.2
Gli script di scoperta dovrebbero popolare i seguenti elementi in netbox:
- Devices
- Manufacturers
- Interfaces
- Cables
- IP Addresses
- Prefixes
- VRFs
- VLANs
Inoltre, nuovi discoverable rilevati tramite i protocolli CDP/LLDP verranno aggiunti automaticamente: potranno essere scoperti dopo la revisione dell’indirizzo IP e del metodo di scoperta.
Il processo di scoperta dovrebbe associare un Dispositivo a ciascun discoverable, ma nel caso in cui ciò non accada (ad es. Cisco XR), possiamo associarli manualmente.
Informazioni aggiuntive
NetDoc scoprirà anche la tabella ARP, la tabella degli indirizzi MAC e la tabella di routing di ciascun discoverable.
Infine, tutti i dati (log) recuperati dai discoverable vengono memorizzati e possono essere consultati:
- Il flag
Configuration
viene impostato se il log contiene la configurazione del discoverable. - Il flag
Success
viene impostato se il comando ha restituito un output valido. - Il flag
Parsed
viene impostato se l’output è stato analizzato con successo. - Il flag
Ingested
viene impostato se l’output analizzato è stato inserito in netbox.
Topologia di rete L2
Utilizzando CDP e LLDP, NetDoc può scoprire adiacenze L2. Per ogni adiacenza viene creato un cavo:
Utilizzando il plugin netbox-topologyi-views possiamo generare automaticamente topologie L2. Ogni dispositivo può essere associato a un’immagine specifica utilizzando l’attributo Device Role
. I ruoli dispositivo devono essere creati con uno dei seguenti slug:
- access-switch
- backup
- core-switch
- distribution-switch
- firewall
- internal-switch
- isp-cpe-material
- non-racked-devices
- power-units
- role-unknown
- router
- server
- storage
- wan-network
- wireless-ap
Aprendo Plugins
-> Topology Views
possiamo visualizzare un diagramma di topologia L2:
netbox-topology-views attualmente funziona solo con netbox 3.2.
Topologia di rete L3
Durante la mia valutazione di rete, ho avuto la necessità di generare diagrammi di topologia L3. Ho forkato netbox-topologyi-views, implementando la funzione di cui avevo bisogno:
Il diagramma L3 è compatibile con VRF: è necessario aggiornare manualmente VRF nei Prefissi (e anche negli Indirizzi IP).
Conclusions
NetDoc è in versione alpha. Attualmente supporta solo dispositivi Cisco ma può essere esteso. Anche se è un software alpha, mi sta facendo risparmiare molto tempo.
Se vuoi contribuire, scrivimi un messaggio. Non mi considero uno sviluppatore software e ci sono (sicuramente) molti bug.