Il protocollo NTP ovvero il Network Time Protocol consente di sincronizzare l’orologio interno di un sistema attraverso uno o più time server che forniscono liberamente il servizio su Internet.
In questo modo la data del sistema può sempre ritenersi affidabile e può ad esempio essere ridistribuita ai client di una rete locale.
Il meccanismo di funzionamento non è semplice e spesso può creare alcuni problemi legati alla sicurezza o a mancate sincronizzazioni, però in alcuni casi diventa indispensabile avvalersi di un servizio di questo tipo come nel caso in cui due o più sistemi debbano avere sempre la medesima ora, come nel caso del salvataggio di documenti sul sistema la cui data deve essere considerata affidabile.
Spesso l’utilizzo di questo servizio ha generato problemi di sicurezza, ecco perché alcuni timeserver consentono accessi autenticati e cifrati ed ecco perché se il nostro sistema fornisce questo servizio ad altri host e bene regimentarne l’accesso attraverso l’opportuna direttiva (restrict).
In questo breve documento vengono descritti solo i passaggi essenziali per configurare l’ntp su un sistema GNU/Linux, che sfrutta un apposito demone ntpd disponibile un po’ su tutte le distribuzioni. Il demone viene eseguito sul sistema e mantiene sincronizzata l’ora in modo continuo, invece se la necessità è quella di effettuare la sincronizzazione una tantum, si può utilizzare il comando ntpdate in questo modo:
root@server2:/# ntpdate ntp1.ien.it
Configurazione di ntpd
Il demone ntpd ha come file di configurazione /etc/ntp.conf
:
# local clock – servizio ntp per la rete locale, consente ai client della rete locale di prendere l’ora dal server.
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# Server esterni fidati, sono i server con cui sincronizza l’ora attraverso internet.
# Server NTP primario dell IEN Galileo Ferraris - http://www.ien.it/ntp/index_i.shtml e server Secondario del National Institute of Standards and Technology (USA)
server ntp1.ien.it minpoll 9 maxpoll 10 # server primario
server time.nist.gov minpoll 9 maxpoll 10 # server secondario
# Con la direttiva driftfile si può specificare un file per memorizzare la correzione di frequenza applicata all'orologio locale per metterlo in passo con l'UTC in modo da rendere più veloce il processo di sincronizzazione a seguito di un riavvio del demone ntpd.
Se questo file viene definito, il demone ntpd utilizzerà come correzione iniziale di frequenza il valore trovato all'interno del file, altrimenti utilizzerà il valore 0.
driftfile /etc/ntp/drift
multicastclient
broadcastdelay 0.008
# Questa opzione specifica se l’accesso ai timeserver su Internet richiede autenticazione
authenticate no #--> se si utilizza l'autenticazione (se il server la supporta) impostare a yes
# Keys file. Questo file consente di specificare una chiave da utilizzare per l’accesso a timeserver autenticati. Le permission sul file indicato devono essere 0600.
keys /etc/ntp/keys
trustedkey 1 2
requestkey 1 2
controlkey 1 2
Per poter utilizzare le chiavi bisogna ancora abilitare l'autenticazione per questo si deve inserire nel file ntp.conf la direttiva che specifica le chiavi da utilizzare:
trustedkey 1 2
e poi affiancare alle direttive che specificano i riferimenti per i time server (server) il numero ID della chiave da utilizzare per la procedura di autenticazione:
server ntp0.ien.it key 1
server ntp1.ien.it key 2
# ntpd può fornire informazioni relative ai vari eventi che si verificano nel corso del suo funzionamento. Per abilitare questa funzione è necessario specificare una directory nella quale archiviare i file:
statsdir /var/log/ntpstats/
# Con la direttiva logfile invece viene specificato in quale file archiviare le informazioni prodotte dal demone ntpd:
logfile /var/log/ntpd
# Categorie degli eventi da registrare:
statistics loopstats peerstats clockstats
# Si devono infine inserire una o più direttive per specificare il nome ed il tipo di file e la categoria degli eventi da registrare utilizzando la seguente sintassi:
filegen categoria [file nome_del_file] [type tipo_di_file] [enable | disable]
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
# La direttiva restrict, “restringe” l’accesso al timeserver solo per indirizzi o classi autorizzate. DI default l'accesso èaperto a tutti gli IP, se si vuole abilitare, per esempio, solo la classe 192.168.0.0/24 a sincronizzarsi con il timeserver locale si deve scrivere:
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap
Configurazione delle chiavi di autenticazione
Per gestire le chiave di autenticazione occorre indicare il percorso completo ed il nome del file nel quale vengono memorizzate le chiavi, nel nostro caso /etc/ntp/keys
.
Le chiavi devono essere inserite nel file /etc/ntp/keys una per linea, utilizzando la sintassi:
ID tipo chiave
ID = numero di identificazione della chiave, compreso tra 1 e 65534;
tipo = tipologia della chiave, ad esempio M sta per MD5, uno dei sistemi di autenticazione possibili;
chiave = chiave composta da 1 a 16 caratteri ASCII (da 0x21 a 0x7f, escluso lo spazio e '#').
Esempio di /etc/ntp/keys
:
1 M aqzys897AQD
# Chiave per server 1
2 M GGC76ff3564
# Chiave per server 2
Sincronizzazione dei Client della rete
Sotto Windows basta specificare nella sezione “Ora Internet” della Proprietà Data e Ora il nome del sistema che sincronizza l’ora con Internet, sotto Unix/Linux basta configurare l’ntp.conf o usare ntpdate specificando come time server il suddetto sistema, esempio ntpdate time.server.com
Esecuzione di ntpd
Un wrapper che può essere usato per l'esecuzione di ntpd:
#!/bin/sh
test -f /usr/sbin/ntpd || exit 0
case "$1" in
start)
echo -n "Abilitazione del servizio NTP: "
/usr/sbin/ntpd
echo
;;
stop)
echo -n "Disabilitazione del servizio NTP: "
killall ntpd
echo
;;
*)
echo "Utilizzo: ntpd {start|stop}"
exit 1
esac
Il demone verrà attivato e richiederò ovviamente l’abilitazione per le porte coinvolte:
ntp 123/tcp #Network Time Protocol
ntp 123/udp #Network Time Protocol
in caso si sia in presenza di un sistema firewallato.
Ricordate che ovviamente a servizio avviato, non potrà più essere eseguito il comando ntpdate in quanto richiede libere le porte già impegante dal demone ntpd stesso.