Network Time Protocol (NTP): definizione e funzionamento
Gli orologi dei sistemi informatici forniscono un valido supporto a chiunque voglia sapere che ora è e non ha né un orologio da polso, né uno smartphone a portata di mano. In pochi sanno, però, che l’orologio di sistema non è rilevante solo per l'utente, ma anche per i computer stessi. Nello scambio comunicativo tra due o più sistemi e in particolare per il corretto funzionamento dei processi e dei servizi che si svolgono in rete, le marcature temporali rivestono un ruolo decisivo. Per evitare complicazioni di sistema dovute a orologi asincroni, nel 1985 è stato pubblicato il cosiddetto Network Time Protocol (NTP).
Che cos’è il Network Time Protocol (NTP)?
Il Network Time Protocol (NTP) è il risultato dello sviluppo di David L. Mills, professore all'Università del Delaware. La prima descrizione ufficiale del protocollo, che fa parte della famiglia dei protocolli Internet, è stata pubblicata nel settembre 1985 all’interno del documento RFC 958. Qui l’NTP viene descritto come un protocollo per la sincronizzazione di più orologi di rete attraverso un insieme distribuito di client e server.
I predecessori di questo protocollo sono il Time Protocol e l’ICMP Timestamp message, le cui funzioni sono state inglobate nel Network time protocol. NTP si basa sul protocollo User Datagram Protocol (UDP), che consente un trasferimento dati senza connessione. Il numero di porta UDP previsto per questo scopo è 123.
L’NTP fornisce meccanismi di protocollo fondamentali, necessari per sincronizzare l’ora di diversi sistemi con una precisione al nanosecondo. Contiene, inoltre, specificazioni sull’accuratezza e sulle probabili fonti d’errore dell'ora del sistema locale, nonché sulle proprietà dell'orologio di riferimento. Tuttavia, il protocollo delinea solo il tipo di rappresentazione dei dati e dei formati dei messaggi senza fornire algoritmi di sincronizzazione e di filtraggio.
I predecessori di questo protocollo sono il Time Protocol e l’ICMP Timestamp message, le cui funzioni sono state inglobate nel Network time protocol. NTP si basa sul protocollo User Datagram Protocol (UDP), che consente un trasferimento dati senza connessione. Il numero di porta UDP previsto per questo scopo è 123.
L’NTP fornisce meccanismi di protocollo fondamentali, necessari per sincronizzare l’ora di diversi sistemi con una precisione al nanosecondo. Contiene, inoltre, specificazioni sull’accuratezza e sulle probabili fonti d’errore dell'ora del sistema locale, nonché sulle proprietà dell'orologio di riferimento. Tuttavia, il protocollo delinea solo il tipo di rappresentazione dei dati e dei formati dei messaggi senza fornire algoritmi di sincronizzazione e di filtraggio.
NTP (Network Time Protocol) è un protocollo descritto nel documento RFC 958 relativo alla sincronizzazione degli orologi nei sistemi informatici. Si basa sul protocollo senza connessione UDP (porta 123) e appartiene alla famiglia dei protocolli Internet. Per il processo di sincronizzazione NTP utilizza il tempo coordinato universale (UTC) adottato dai singoli client e server secondo un sistema gerarchico.
Come funziona NTP?
Per sincronizzare gli orologi dei computer con una precisione al nanosecondo il Network Time Protocol utilizza il tempo coordinato universale (abbreviato con la sigla UTC, dall’inglese Coordinated Universal Time), valido dal 1972. Questo è determinato in vari modi, ad esempio attraverso i sistemi radio e i sistemi satellitari. Servizi importanti come il Global Positioning System (GPS) sono dotati di speciali ricevitori per ricevere i segnali corrispondenti. Poiché non sarebbe né economico né fattibile dotare ogni singolo computer di tali ricevitori, esistono i cosiddetti Primary Time Server, che dispongono, appunto, di un ricevitore UTC. Attraverso protocolli come NTP, questi server sincronizzano gli orologi dei computer nella loro rete.
In questo processo di sincronizzazione ci sono diversi livelli gerarchici di distanza dall’UTC sorgente, noti anche come strata (termine latino per "strati"). Tutti i dispositivi tecnici che ottengono il loro orario da un Primary Time Server o da un sistema di navigazione satellitare sono classificati nella categoria strato 0. Tra questi vi sono gli orologi atomici e quelli radiocontrollati. Un computer che ottiene l'UTC da un orologio atomico o da uno radiocontrollato corrisponde allo strato 1 e così via. Ogni sistema è client dello strato precedente e al contempo server per i sistemi dello strato successivo (almeno potenzialmente).
In questo processo di sincronizzazione ci sono diversi livelli gerarchici di distanza dall’UTC sorgente, noti anche come strata (termine latino per "strati"). Tutti i dispositivi tecnici che ottengono il loro orario da un Primary Time Server o da un sistema di navigazione satellitare sono classificati nella categoria strato 0. Tra questi vi sono gli orologi atomici e quelli radiocontrollati. Un computer che ottiene l'UTC da un orologio atomico o da uno radiocontrollato corrisponde allo strato 1 e così via. Ogni sistema è client dello strato precedente e al contempo server per i sistemi dello strato successivo (almeno potenzialmente).
Le variazioni temporali a breve termine e locali nella sincronizzazione NTP sono affrontate da vari algoritmi: ad esempio, i metodi di misura del tempo di trasmissione dei pacchetti (il tempo che un pacchetto dati impiega dalla sorgente alla destinazione e viceversa) compensano le deviazioni locali basandosi sull’algoritmo Berkeley. L'algoritmo Marzullo è usato per la risoluzione dei problemi nell'area del processore.
Sintesi delle caratteristiche più importanti di NTP
Le caratteristiche fondamentali del Network Time Protocol, attualmente disponibile nella quarta versione (NTPv4), possono essere riassunte come segue:
- NTP fornisce un orologio di riferimento che funge da punto fisso per tutti i processi di sincronizzazione. Tutti gli orologi si allineano, quindi, a questo orologio o orario. Fin dall'inizio è stato utilizzato a tal fine il Coordinated Universal Time (UTC), riconosciuto come orologio mondiale universale.
- NTP è un protocollo che compensa gli errori cercando automaticamente le fonti migliori per la sincronizzazione. Per ridurre al minimo l'errore accumulato è persino in grado di combinare diverse fonti tra loro. Laddove possibile, il Network Time Protocol rileva e ignora le fonti che forniscono valori fortemente divergenti nel breve e nel lungo termine.
- NTP è altamente scalabile: possono esserci più orologi di riferimento in ogni rete di sincronizzazione. Inoltre ogni nodo di rete è in grado di trasmettere informazioni temporali in una struttura gerarchica bidirezionale (punto a punto) o unidirezionale (in una direzione).
- NTP ha un forte grado di accuratezza. Grazie alla possibilità di selezionare il miglior candidato per la sincronizzazione, è possibile ottenere una risoluzione in un intervallo di nanosecondi (pari a 2-32 secondi).
- NTP è in grado di superare i problemi di connessione di rete temporanei: in questo caso il protocollo si serve di dati del passato per determinare l'ora attuale o le deviazioni.
Quali sistemi operativi supportano il protocollo NTP?
Originariamente il Network Time Protocol è stato sviluppato appositamente per i sistemi UNIX, nei quali ancora oggi è implementato sotto forma di processo in background (Daemons) ntpd. Questo funge tanto da client, che sincronizza il sistema locale, quanto da server NTP per altri sistemi. Per molto tempo il servizio è stato anche la prima scelta di implementazione di NTP nelle distribuzioni Linux. Per la sincronizzazione temporale le versioni più recenti utilizzano sempre più spesso l'applicazione client timesyncd, che fa parte del System Manager systemd. Anche i sistemi operativi macOS e Windows utilizzano il Network Time Protocol per ottenere l'UTC con processi di sistema semplici e senza software aggiuntivi via Internet.
Quali sono le alternative al Network Time Protocol?
Sebbene NTP sia considerato in tutto il mondo come lo standard di sincronizzazione temporale, non è infallibile, specialmente in termini di sicurezza. Poiché si basa sul protocollo UDP senza connessione, un aggressore potrebbe, per esempio, inviare pacchetti con un indirizzo del mittente falsificato (IP spoofing) a un server NTP.
L'indirizzo del mittente è l'indirizzo del sistema da attaccare. Il server invia la sua risposta, che è molto più grande della richiesta inviata dall'aggressore, al presunto mittente (sistema degli attacchi). Se l'aggressore procede in questo modo su larga scala, inviando una moltitudine di richieste manipolate, può sovraccaricare il sistema di destinazione. Si veda in merito il nostro articolo su DoS e DDoS: schemi di attacco in sintesi.
Di conseguenza sono stati portati avanti diversi progetti per lo sviluppo di soluzioni alternative più sicure utilizzabili al posto delle soluzioni comuni di client e server NTP:
L'indirizzo del mittente è l'indirizzo del sistema da attaccare. Il server invia la sua risposta, che è molto più grande della richiesta inviata dall'aggressore, al presunto mittente (sistema degli attacchi). Se l'aggressore procede in questo modo su larga scala, inviando una moltitudine di richieste manipolate, può sovraccaricare il sistema di destinazione. Si veda in merito il nostro articolo su DoS e DDoS: schemi di attacco in sintesi.
Di conseguenza sono stati portati avanti diversi progetti per lo sviluppo di soluzioni alternative più sicure utilizzabili al posto delle soluzioni comuni di client e server NTP:
- tlsdate: tlsdate è stato sviluppato nel 2012 da Jacob Appelbaum e pubblicato su GitHub. Al posto di UDP, tlsdate utilizza il protocollo TCP per il trasferimento dati. Il servizio cripta la configurazione della connessione tramite TLS per impedire la manipolazione dei pacchetti di dati. Inoltre tlsdate utilizza le funzioni TLS "ServerHello" e "ClientHello" per sincronizzare l'ora. L'alternativa a NTP funziona unicamente con TLS 1.1 e 1.2.
- Ntimed: Ntimed è un'implementazione di NTP che si concentra specificamente sulla sicurezza e sulle prestazioni. Per questo scopo il codice di programmazione di ntpd, su cui si basa Ntimed, è stato “semplificato” e ottimizzato. Il pacchetto software, che comprende client, server e file master, è a libera disposizione nella directory ufficiale Ntimed di GitHub .
- NTPsec: NTPsec è sempre una variante del servizio ntpd tradizionale. Ciononostante sono state risparmiate oltre 175.000 righe di codice rispetto all'originale. Inoltre il team di sviluppo ha sostituito una serie di operazioni sulle stringhe non sicure come "strcpy", "sprintf" o "gets" con equivalenti sicure. Queste e altre differenze possono essere viste in maniera più dettagliata sul sito ufficiale del progetto open source.
Mentre si ha una certa libertà nella scelta di protocolli e servizi di sincronizzazione, la sincronizzazione in sé è un processo assolutamente imprescindibile per la funzionalità di varie applicazioni di rete (specialmente su Internet). Le transazioni di database e la comunicazione via e-mail, ad esempio, falliscono rapidamente se il client e il server non sono sulla stessa lunghezza d'onda in termini di tempo. Un ruolo ancora più importante è svolto dalla precisione dell’ora di sistema nel controllo del traffico aereo, dove sono indispensabili valori accurati al microsecondo per un funzionamento ottimale.
pool.ntp.org: l’Internet Cluster con migliaia di server NTP
Il progetto pool.ntp.org, avviato da Adrian von Bidder e gestito da Ask Bjørn Hansen da luglio 2005, consiste in un grande cluster virtuale con oltre 4.000 Time Server NTP. La maggior parte dei server distribuiti in tutto il mondo e utilizzati da milioni di sistemi si trovano in Europa. Il fatto che il pool di NTP sia cresciuto costantemente nel tempo è dovuto alla comunità del progetto di successo: chiunque abbia un server con indirizzo IP statico permanentemente connesso a Internet può aggiungerlo al cluster. Nonostante la domanda crescente, il servizio può essere utilizzato gratuitamente e senza alcuna restrizione.
Come gli utenti UNIX/Linux possono utilizzare il pool NTP
Se si desidera utilizzare il pool-server NTP per sincronizzare l'ora di sistema dei propri dispositivi, è possibile farlo in UNIX oppure in Linux con il servizio ntpd. Tutto ciò che serve è la seguente configurazione per l’NTP Drift File:
driftfile /var/lib/ntp/ntp.drift
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org
Il prerequisito è che l’ora di sistema sia impostata almeno approssimativamente. Per recuperare lo stato del servizio ntpd, inserire il seguente comando dopo pochi minuti:
ntpq -pn
Il client NTP presenta un elenco degli indirizzi IP dei time server utilizzati casualmente dal pool. Se uno di questi server è contrassegnato da un asterisco (*), d'ora in poi l'ora di sistema sarà sincronizzata come desiderato.
Configurare pool.ntp.org su Windows come fonte di time server
Poiché il Network Time Protocol è attualmente supportato automaticamente da Windows, il pool NTP è disponibile in qualsiasi momento anche per gli utenti dei sistemi Microsoft. È necessario inserire nelle impostazioni dell'ora di Internet un intervallo di indirizzi adatto di pool.ntp.org. Aprite il pannello di controllo e selezionate "Data e ora":
Cliccando su "Ora di Internet" si accede al menu del time server, dove è possibile inserire l'indirizzo del server NTP desiderato dal pool pool.ntp.org:
Se le modifiche hanno avuto successo, Windows regola l'ora di sistema al successivo orario di sincronizzazione: