Créer un serveur NTP sur CentOS 7 (Chrony)

Créer un serveur NTP sur CentOS 7 (Chrony)

15 juillet 2019 0 Par Mairien Anthony

Aujourd’hui petit article où nous allons voir ce qu’est un serveur NTP, pourquoi nous en avons besoin, dans quelles circonstances et enfin comment en mettre un en place sur une CentOS 7 !

I) Le protocole NTP, qu’est-ce que c’est ?

Comme toujours, revenons d’abord aux classiques. Le protocole NTP permet donc de synchroniser l’heure de différents systèmes au travers d’un réseau TCP/IP. Les clients se synchronisent avec des serveurs, qui eux-même se synchronisent avec d’autres serveurs, jusqu’à remonter aux fameux horloges atomiques !

Schéma du réseau NTP et ses différentes strates depuis les horloges atomiques (stratum 0) jusqu'aux postes clients.

Les stratums (strata au singulier) sont donc des sortes de « couches », où la plus basse communique avec la plus haute, et ainsi de suite. La plupart des entreprises n’autorisent la communication avec leurs serveurs NTP que de façon interne, mais certaines permettent de les utiliser de façon publique, comme pour le fameux cluster ntppool.org qui est donc composé de quelques milliers de serveurs NTP publics et est en général utilisé par défaut sur la majorité des distributions GNU/Linux.

II) Installation et configuration de chrony

Sur CentOS 7, le paquet Chrony est déjà pré-installé par défaut et le service actif, mais en général un simple yum install chrony ou apt install chrony suffira à installer ce dernier :

Ensuite, nous allons simplement adresser une adresse IP statique sur notre CentOS et lui renseigner un serveur DNS, puis nous pourrons commencer la configuration de Chrony.

Voici un rapide aperçu du lab que nous allons mettre en place :

Le client se connectera donc à notre serveur local pour synchroniser son horloge, qui lui même se synchronisera sur une pool de serveurs qui eux-même se synchroniseront… et ainsi de suite jusqu’aux horloges atomiques, voir le schéma en début d’article.

Bien, il nous suffit d’éditer le fichier /etc/chrony.conf pour voir en premier lieu sur quel(s) serveur(s) ou quelle(s) pool(s) notre serveur se synchronise :

Ici, c’est donc les fameux pools de poolntp.org dont nous avions parlé plus haut. Nous allons laisser ces pools par défaut, et simplement autoriser notre réseau local 192.168.1.0/24 à contacter notre serveur NTP :

Bien, une fois fit nous pouvons valider et quitter, puis redémarrer le service.

*Bon à savoir: Chrony écoute sur le port par défaut du protocole UDP, à savoir le 123.

Au passage, si le pare-feux par défaut (Firewalld) est en cours d’exécution sur la machine, nous pouvons autoriser le flux ntp et recharger sa configuration:

firewall-cmd –add-service=ntp –permanent 

firewall-cmd –reload

Une fois fait, nous pouvons désactiver le démon systemd-timesyncd étant donné que ce sera Chrony qui s’occupera désormais de l’horloge système. Pour cela, il nous suffit de réaliser la commande suivante: timedatectl set-ntp false.

A ce niveau là, on peut utiliser l’outil en ligne de commande permettant de gérer Chrony directement sans passer par le fichier de configuration, il se nomme chronyc et nous allons l’utiliser pour vérifier à quel serveur/quelle pool nous sommes connecté actuellement. Pour cela, un simple chronyc sources et le compte est bon !

Pour faire simple, nous pouvons voir les différents serveurs avec lesquels nous sommes connectés ainsi que leur temps de réponse en ms.

Le ^* affiche le serveur que nous utilisons actuellement pour nous synchroniser ;

Le ^+ affiche les serveurs utilisés pour calculer une moyenne de temps ;

Le ^- affiche les serveurs non-utilisés ;

III) Configuration du client et test

La première étape est simplement d’éditer le fichier /etc/systemd/timesyncd.conf pour indiquer notre serveur NTP local :

Puis nous pouvons recharger la configuration via la commande systemctl restart systelmd-timesyncd, et enfin nous pouvons vérifier l’état du démon pour voir que notre client est bien synchronisé avec notre serveur local !

Et bien voilà, nous avons désormais un serveur CentOS 7 avec un Chrony configuré, et un client OpenSUSE Leap connecté à celui-ci ! Rien de très transcendent donc, mais cela constitue une base pour de futurs articles.