NTP

Published by Lello on

Prima di installare qualunque servizio su di un server, è necessario che il clock del server sia sincronizzato con un clock di riferimento internazionale. Per fare questo, si usa il servizio NTP (Network Time Protocol). Il servizio NTP permette di tenere sincronizzato il clock di un server con il clock di un altro server di riferimento. È possibile creare una gerarchia di server NTP, in cui i server primari si sincronizzano con i server a livello mondiale e altri server si sincronizzano con questi server e così via.

Prenderemo come riferiemento un server con una distribuzione Linux CentOS 7; la prima cosa da fare è installare i package del servizio ntp:

# yum install ntp ntpdate autogen-libopts

Modifichiamo il file di configurazione (/etc/ntp.conf) per creare un servizio personalizzato.

La prima cosa da fare è proteggere il nostro time server da eventuali attacchi (sia interni alla rete che esterni); per far questo facciamo in modo che il nostro server possa sincronizzarsi con il time server di riferimento, ma non permetta la modifica del servizio sul server.

Controlliamo che esista questa linea:

restrict default kod nomodify notrap nopeer noquery

Le precedenti linee di restrict hanno i seguenti parametri:

  • noquery: previene  lo scarico di dati di stato dal servizio;
  • notrap:  disabilita il servizio di consegna dei messaggi di controllo;
  • nomodify: elimina tutte le query che tendono a modificare il servizio;
  • nopeer: blocca i pacchetti che tentano di stabilire una relazione con il nostro servizio;
  • kod (Kiss-o-death): vengono inviati pacchetti per ridurre query indesiderate.

Per permettere alla nostra rete (172.28.0.0/22) di sincronizzarsi con il nostro time server (172.28.0.200), aggiungiamo la seguente linea di restrict:

restrict 172.28.0.0 mask 255.255.252.0 nomodify notrap

Facciamo anche in modo che tranmite localhost sia possibile avere accesso completo al nostro servizio:

restrict 127.0.0.1

Aggiungiamo al nostro file di configurazione la possibilità che se il nostro server diventi isolato da internet, il servizio NTP continui a fornire come time di riferimento quello del clock locale:

server  127.127.1.0 # local clock
fudge   127.127.1.0 stratum 10

La keyword Statum, è usata per sincronizzare il time del server con una metrica basata sulladistanza:
Stratum 1: Il time server funge come server di riferimento del suo network
stratum-2: il server è connesso ai server dello strato 1, per cui si sincronizza con i server di strato 1
stratum-3: il server è connesso ai server dello strato 2, per cui si sincronizza con i server di strato 2
stratum-xxx: ….

Il device con lo stratum=0, viene sempre utilizzato come clock di riferimento.

Specifichiamo ora il drift file e la dove il servizio deve scrivere i log:

driftfile /var/lib/ntp/drift
logfile /var/log/ntp.log

driftfile viene utilizzato per registrare sul log file lo scostamento del clock locale con quello di riferiemento: lentamente il servizio ntp abbassa questo valore durante il tempo.

Inseriamo nel nostro file di configurazione i server di riferimento con cui il nostro servizio dovrà sincronizzarsi; se vivete in Italia, vi consiglio di utilizzare come server di riferimento, quelli messi a disposizione dall’INRIM (Istituto Nazionale di Ricerca Metrologica).

L’INRIM realizza la scala di tempo di riferimento nazionale UTC(IT) da un insieme di orologi commerciali a fascio di cesio e maser all’idrogeno, e partecipa alle attività metrologiche nel settore quali la costruzione delle scale internazionali di riferimento e gli esperimenti di sincronizzazione mediante tecniche satellitari, con l’impiego di satelliti per navigazione e per telecomunicazioni.

Come server NTP, l’INRIM mette a disposizione i seguenti server, che inseriremo nella configurazione del nostro server commentando quelli che troviamo:

# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ntp1.inrim.it iburts
server ntp2.inrim.it iburts

iburst: dopo ogni interrogazione al server ntp di riferimento, viene inviato un blocco di 8 pacchetti al posto di uno solo. Quando il server non risponde, i pacchetti vengono inviati con un intervallo di 16 secondi; altrimenti, i pacchetti vengono inviati ogni 2 secondi.

Salviamo il file di configurazione che abbiamo creato/modificato, e sincronizziamo immediatamente il clock del nostro server con uno degli NTP server che abbiamo inserito nel file di configurazione:

# ntpdate -u ntp1.inrim.it
14 Jul 12:35:30 ntpdate[9356]: adjust time server 193.204.114.232 offset 0.001680 sec

A questo punto potremo avviare il nostro servizio e vediamo cosa sta facendo:

# systemctl enable ntpd
# systemctl start ntpd
# ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
ntp1.inrim.it   .CTD.       1  u    2   64    1   33.734    3.320   0.000
ntp2.inrim.it   .CTD.       1  u    1   64    1   37.896    3.548   0.000

Dopo un pò di tempo (generalmente qualche minuto), il server locale si sarà sincronizzato con i server di riferimento e questo sarà l’output :

 # ntpq -p
 remote           refid      st t when poll reach   delay   offset  jitter
 ==============================================================================
 *ntp1.inrim.it   .CTD.      1  u   20   64    3   33.161    3.024   1.921
 +ntp2.inrim.it   .CTD.      1  u   19   64    3   36.057    3.061   0.294

L’asterisco * indica che il server ntp1.inrim.it viene usato come server di riferiemento principale; il simbolo + indica che il server ntp2.inrim.it è raggiungibile e viene usato come server di riferimento secondario.

LTM