# Cisco IOS

In informatica Cisco IOS (originariamente Internetwork Operating System) è un sistema operativo per dispositivi di rete instradatori (router) e commutatori (switch) dell'azienda Cisco Systems, installato attualmente su tutti gli switch e sulla maggior parte del router della azienda stessa, che costituiscono circa l'80% dei router della rete mondiale. Si tratta di un sistema molto semplice senza interfaccia grafica bensì a riga di comando.
A seconda dei diritti di lettura, scrittura ed esecuzione dell'operatore e della modalità con cui egli ha avuto accesso (permessi), il sistema mette a disposizione una serie di comandi predefiniti: nella modalità di configurazione globale si può configurare l'intero sistema, mentre per configurare una singola interfaccia di rete si accede con la modalità di configurazione d'interfaccia; per quanto riguarda invece i diritti ci sono 16 livelli – dallo 0 al 15 – che garantiscono una certa protezione del sistema.

## Storia

La prima versione del sistema operativo fu pubblicata nel 1984 anno della fondazione stessa della Cisco, ma il suo sviluppo iniziò nel 1980 ad opera di un impiegato della Scuola di Medicina di Standford, tale Bill Yaeger che aveva scritto un programma per collegare instradatori di diversi tipi di rete. In seguito lavorò fino al 1984 assieme ai fondatori della Cisco, Sandra Lerner e Len Boseck per migliorare il programma stesso. L'ultima versione del sistema operativo è del 2019 ed è indicizzata come la 15.9.

## Descrizione

All'accensione dei dispositivi di rete più moderni lo IOS viene caricato nella memoria RAM da una memoria non volatile e decompresso, mentre nei router più datati come il Cisco 2500 esso viene eseguito direttamente nella memoria non volatile. Dopo l'avvio mette subito a disposizione le funzioni fondamentali di instradamento e commutazione. A seconda delle prestazioni supporta protocolli di instradamento vari come il BGP, OSPF, EIGRP e RIP, ma anche protocolli di rete come IPv4, IPv6, IPX e l'AppleTalk.
Inoltre mette a disposizione varie funzioni di filtro dei pacchetti in base a una lista di controllo (access-list) e dei diritti nella modalità con cui si accede al sistema operativo. Si distingue fra la configurazione base d'avvio (startup-config), conservata nella memoria non volatile e caricata automaticamente all'accensione e la configurazione corrente (running-config). Le immagini del sistema operativo hanno una denominazione normalizzata per esempio c3000-js-l_121-3.bin, in cui 3000 si riferisce al modello dell'instradatore.
Per operare con il sistema e configurarlo si usa la semplice riga di comando attraverso i programmi/protocolli di comunicazione da remoto Telnet e/o SSH, oppure tramite console, ovvero connettendosi direttamente alla porta seriale del dispositivo. I parametri di default per la comunicazione via console sono 96008N1. Attualmente ci sono anche delle interfacce grafiche e la possibilità di configurazione e monitoraggio del sistema tramite il protocollo di rete SNMP, per quanto limitato ad alcune funzioni.
Esiste anche un programma clone dello IOS per normali calcolatori, Quagga, che gira su Linux, ne imita l'interfaccia a riga di comando e svolge funzioni di instradamento.

### Architettura

In tutte le versioni di IOS le funzioni di instradamento e commutazione sono nettamente separate. I protocolli di instradamento ed altri protocolli sono processi specifici del sistema operativo e integrano la tabella di instradamento per quanto riguarda la topologia della rete di prossimità (RIB, Routing Information Base). Questa tabella viene elaborata per generare la tabella finale di inoltramento (FIB, Forwarding Information Base).
Su instradatori tipo il Cisco 7200 che hanno funzioni di inoltro basate solo su programmi e non su un instradamento “fisico” (elettronico, non informatico), la gestione del traffico, compreso il filtraggio della lista di controllo degli accessi ma anche la funzione di inoltro, viene eseguita con segnali di interruzione (interrupt) usando una funzione di inoltro rapido (CEF, Cisco Express Forwarding) o distribuito (dCEF, distributed CEF). Questo significa che lo IOS per inoltrare un pacchetto non ha bisogno di iniziare un processo fisico di commutazione. I protocolli di routing come OSPF o BGP girano a livello di processo utente.
Su instradatori con inoltro elettronico invece, tipo quelli della serie Cisco 12000, lo IOS calcola via hardware la tabella di inoltro FIB grazie ai circuiti elettronici dell'instradatore stesso e la trasmette alla parte del dispositivo preposta all'inoltro vero e proprio dei pacchetti, quale un processore di rete o un ASIC.
Lo IOS ha un'architettura monolitica, ossia basata su una singola immagine dello stesso, contenuta nella memoria, nella quale operano tutti i processi. La memoria è quindi condivisa fra i processi e non c'è alcuna forma di protezione dei loro singoli campi di memoria; se per un errore di programmazione un processo sconfina nel campo di memoria dell'altro, si può avere un'alterazione dei dati da trasmettere.
La memoria viene inoltre usata fin quando non viene occupata completamente, dato che il kernel non la svuota prima dell'inizio dell'esecuzione di un nuovo processo: il singolo processo deve effettuare una chiamata al kernel stesso prima che altri processi possano avere la possibilità di venir eseguiti.
Per i prodotti Cisco che offrivano una grossa disponibilità di tempo macchina, tipo il Cisco CRS-1, queste limitazioni erano inaccettabili e che mancava nei sistemi operativi della concorrenza emersi dalla metà degli anni novanta ad oggi, tipo lo JunOS della Juniper. La risposta della Cisco fu quella di sviluppare una nuova versione dello IOS chiamata IOS-XR, che offriva sia modularità che protezione di memoria fra i processi, istruzioni alleggerite, presvuotamento della memoria prima di ogni processo e capacità di riavvio indipendente dei singoli processi bloccatisi. Lo IOS-XR usa un microsistema operativo di base a risposta immediata (in tempo “reale”, ossia in brevissimo tempo utile) importato da un'altra ditta (QNX) cui si è dovuto riadattare gran parte del codice attuale dello IOS con un'opera massiccia di riprogrammazione. Questo microsistema operativo di base rimuove tutti i processi base che non siano effettivamente fondamentali, primari (e quindi non degni di girare sul microsistema operativo di base) e li esegue come semplici processi secondari (applicativi).
Grazie a queste caratteristiche lo IOS-XR è capace di raggiungere i livelli di disponibilità di tempo-macchina necessari per la nuova piattaforma di instradatori. Per questi motivi lo IOS e lo IOS-XR sono sistemi molto differenti, sebbene si abbia una certa correlazione fra le loro funzionalità ed il progetto complessivo.
Nel 2005 la Cisco ha introdotto lo IOS-XR sulla piattaforma per la serie Cisco 12000, estendendo l'architettura a microsistema degli instradatori CRS-1 a quelli maggiormente diffusi. Ancora più recentemente (nel 2006) la Cisco ha messo a disposizione una certa modularità di programmazione dello IOS, estendendo il microsistema QNX in un ambiente operativo più tradizionale pur rimanendo inalterata la possibilità di aggiornamento richieste dal mercato; il commutatore per grandi aziende Catalyst 6500 ne fa uso.

### Distribuzioni e potenzialità

Le differenti potenzialità si riferiscono a protocolli di rete aggiuntivi, funzioni di criptazione, protocolli di instradamento, funzioni supplementari (per esempio funzioni di telefonia), ecc. Lo IOS non è molto strutturato in moduli ma a seconda delle potenzialità disponibili può essere tagliato sulle varie esigenze. Il costo della licenza per la singola versione del sistema operativo rispecchia la varietà delle funzionalità.
Per la maggior parte dei dispositivi di rete Cisco su cui gira lo IOS sono disponibili vari pacchetti di funzionalità, di solito 8 per gli instradatori e 5 per i commutatori. Per esempio varie sono le versioni dello IOS destinate a commutatori della Catalyst disponibili: quella base che fornisce solo funzioni di instradamento base di protocollo di rete IP; la versione migliorata, che supporta pienamente il protocollo di instradamento IPv4; la versione avanzata che supporta anche il protocollo IPv6.
I pacchetti di funzionalità sono suddivisi in varie categorie quali
* pacchetti solo dati
* pacchetti di convergenza fra funzioni dati e voce
* sicurezza e reti private (Virtual Private Network, VPN)

### Versioni

Le versioni sono denominate secondo lo schema A.B.(C.D.) E in cui
* A è il numero principale della versione
* B è il numero secondario
* C è il numero dell'edizione particolare della serie: inizia con 1 e viene incrementato di edizione in edizione
* D è il numero di compilazione provvisoria, che viene di solito omesso nell'indicazione dell'edizione generale
* E può essere una combinazione di zero, una o due lettere e identifica il proposito della versione, per esempio T per la cosiddetta serie tecnologica, E per grandi aziende, S per fornitori di accesso alla rete, XA per un gruppo di funzionalità speciali, XB per altre funzionalità ecc. mentre la mancanza di lettere indica la versione generale della serie. Le compilazioni provvisorie sono spesso destinate a divenire le future versioni stabili e vengono messe a disposizione perché contengono soluzioni provvisorie ad errori o mancanze delle precedenti versioni: per esempio 12.3(1.2) T è la seconda compilazione provvisoria della serie 12.3(1) T.
Ricompilazioni - Spesso una ricompilazione viene messa a disposizione per risolvere un singolo problema o una falla di vulnerabilità. Per esempio la versione 12.1(8) E14 è la quattordicesima ricompilazione della serie 12.1(8) E. Le ricompilazioni sono distribuite per correggere velocemente degli errori o per venire incontro a quei clienti che gestiscono reti strategiche e per ridurre il rischio di interruzione non aggiornano il sistema a una versione successiva.
Versioni provvisorie - Sono di solito pubblicate con frequenza settimanale e tengono conto degli sviluppi attualmente in atto. Il sito della Cisco in cui vengono annunciate può metterne a disposizione più uscite per singole correzioni.
Versioni di manutenzione - Si tratta di versioni di provata correttezza che contengono sviluppi sostanziali ed emendate da errori di programmazione. La Cisco consiglia di aggiornare il sistema a tali versioni ove possibile.

### Serie

Le varie serie del sistema operativo si distinguono per le loro potenzialità e rispecchiano necessità, possibilità e prospettive di sviluppo dei sistemi di rete locali e geografici per come le vede la ditta Cisco a livello di mercato.
La serie principale è progettata per essere la più stabile ed avanzata che la Cisco può offrire in un certo momento e le sue potenzialità non vengono estese per tutto il suo ciclo di vita. I relativi aggiornamenti rappresentano semplici correzioni degli eventuali errori presenti. L'ultima serie più avanzata, cosiddetta tecnologica (serie T) viene presa come base di partenza per la realizzazione della versione principale successiva: per esempio la versione tecnologica 12.1T è la base per la 12.2 principale. Per questo per determinare le potenzialità di una certa versione basta guardare alla serie T precedente.
La serie T è invece quella in cui vengono aggiunte sempre nuove potenzialità ed è parimenti la più esposta a falle, le cui correzioni vengono aggiunte durante tutto il ciclo di vita della versione. Prima della versione 12.0 la serie avanzata veniva indicata con una P.
La serie S è indirizzata ai fornitori di accesso alla rete (Service provider), funziona solo sui dispositivi più affermati della Cisco ed è altamente adattata a questo tipo di utenza.
La serie E è destinata alle imprese (Enterprise). La serie B è pensata per dispositivi di una rete per banda larga (Broadband). La serie X* (XA, XB, …) si riferisce a funzioni speciali (Xpecial) ed è progettata per usi specifici, come per esempio la 12.0AA che conteneva nuove linee di codice necessarie per il dispositivo AS5800.

### Sistema di allocazione dati

Il sistema di allocazione dati viene chiamato brevemente IFS (IOS File System) e può sia accedere che allocare vari tipi di dati con varie modalità:
* Bootflash
* Flash: si usa per allocare immagini complete del sistema ovvero per farne una copia
* Flh
* Nvram: è uno dei componenti di configurazione interna dei dispositivi e si usa per allocare la configurazione base d'avvio
* RCP
* Disk0
* Disk1
* System
* TFTP

### Sicurezza e vulnerabilità

Lo IOS è risultato vulnerabile a sconfinamenti di memoria cuscinetto oltre a falle di altro genere che hanno pregiudicato sia il buon funzionamento del sistema operativo stesso che delle applicazioni. La Cisco risponde in genere molto velocemente, mettendo a disposizione correzioni in tempi brevi, prova ne è la frequenza con cui escono le nuove versioni di aggiornamento. Ciononostante persiste una ben nota falla nella sicurezza sin dal 1995 riferita alla criptazione delle parole chiave nell'interfaccia a riga di comando e che non viene riparata per motivi di compatibilità. Le parole chiave d'accesso sono cifrate secondo un algoritmo cosiddetto di tipo 7 (una versione modificata da tale Williams dell'algoritmo di compressione dati di tali Lempel e Zev su cui è basato il comando unix “arc”). Si supponga di intercettare per esempio il comando:
La parola chiave può essere facilmente decriptata con il programma getpass, disponibile già dal 1995, nell'esempio si ottiene come risultato “stupidpass”. Questa falla è documentata in molti siti in rete ed è addirittura riportata sul sito della Cisco nella sezione Consigli dei lettori (Technical Services News / Reader Tips) ed ivi riferita alla procedura per decriptare una chiave di rete (pre-shared key). Comunque sia il programma getpass decripta solo parole chiave generate nella semplice modalità utente, ma non può nulla se si abilita la modalità di cifratura con il comando “secret”. In realtà non si tratta di una vera e propria falla dovuta alla Cisco, perché il tipo di cifratura è noto all'utente (cliente) e non viene pubblicizzato come più sicuro di quello che è. Piuttosto questo caso ha svelato che non è lo IOS ad essere insicuro ma l'uso che gli utenti, ossia i gestori di rete ne fanno, fidandosi erroneamente di una presunta invulnerabilità di tale cifratura.
In ogni caso la Cisco raccomanda di implementare il modello di sicurezza delle 3 A (Authentication, Authorization and Accounting, AAA). Questo modello può essere combinato con basi di dati locali, modalità di prossimità (RADIUS) e TACACS+.

## Comandi

L'interfaccia a riga di comando è simile a quella di altri sistemi operativi quali MS-DOS e Unix e come questi ha una funzione che completa il comando riconosciuto (autocompletameto) durante la digitazione tramite il tasto TAB. In generale si distinguono due grandi tipologie di comandi: i comandi di analisi (es. comandi di show) e i comandi di configurazione. Una notevole semplificazione delle operazioni si deve ai suggerimenti automatici e contestualizzati che si ottengono digitando il punto interrogativo (?). Tipici comandi base sono i seguenti:
* Messaggio base (“pronto al comando”):
(per la modalità utente)
* Cambiamento della modalità di accesso in quella cosiddetta privilegiata:
(per la modalità privilegiata)
* Cambiamento della modalità privilegiata in quella di configurazione globale:
(per la modalità di configurazione globale)
(per la modalità di configurazione di inferaccia speciale)
Nella modalità utente si possono eseguire solo facili richieste di informazione (comandi "show", per esempio "show interface gi0/48"), mentre nella modalità privilegiata ed in quella di configurazione globale si può proprio configurare il dispositivo.
Per passare alla modalità privilegiata può essere necessaria una parola (chiave) d'accesso, ed in seguito si può passare alla modalità di configurazione globale. Per configurare invece singole interfacce si deve invece passare nella modalità di configurazione interfaccia particolare del dispositivo (interfaccia) cui si vuole accedere.
* Indicazione della configurazione attuale:
* Indicazione della versione del sistema, del modello di instradatore, delle sue potenzialità etc.:
* Indicazione di informazioni dettagliate sull'interfaccia dell'instradatore:
* Breve panoramica degli indirizzi di rete (IP) e dello stato delle interfacce del dispositivo:
* Indicazione della tabella di instradamento a seconda del protocollo di rete: