Aller au contenu

Chrony et NTP

Mise à jour :

Maintenir une horloge précise sur les systèmes informatiques est essentiel pour garantir la synchronisation des événements, la sécurité et la coordination des tâches. NTP (Network Time Protocol) est une solution éprouvée pour cette synchronisation temporelle, mais l’implémentation traditionnelle, ntpd, peut être limitée dans certains environnements modernes. Chrony se présente comme une alternative moderne et efficace, particulièrement adaptée aux réseaux instables et aux systèmes nécessitant une synchronisation rapide.

Ce guide vous propose un aperçu complet de Chrony, de son installation à sa configuration, en passant par la gestion, la surveillance et la sécurisation, afin d’assurer une synchronisation temporelle précise et fiable sur vos serveurs.

Historique

Le Procole NTP (Network Time Protocol) a une longue histoire qui remonte aux années 80. Il a été développé par David L. Mills de l’Université du Delaware et son premier déploiement a eu lieu en 1985. NTP est l’un des plus anciens protocoles d’Internet encore en usage et il a été conçu pour permettre aux ordinateurs de synchroniser leurs horloges à travers un réseau de données, réduisant ainsi la dérive de l’horloge locale et assurant une heure cohérente sur tous les systèmes.

À ses débuts, NTP a été utilisé principalement dans des environnements universitaires et de recherche. Cependant, avec la croissance d’Internet et la nécessité d’avoir des systèmes synchronisés, NTP est devenu un standard incontournable pour la synchronisation temporelle. Les premières versions de NTP utilisaient des algorithmes simples pour ajuster les horloges des ordinateurs, mais au fil des années, ces algorithmes ont évolué pour devenir de plus en plus sophistiqués, capables de gérer des réseaux de grande envergure et des conditions de réseau variées.

Chrony est une implémentation plus récente de NTP, conçue pour répondre aux défis des environnements modernes. Développé initialement par Richard Curnow, Chrony est maintenant maintenu par Miroslav Lichvar. Le projet a commencé en 1997, avec l’objectif de créer une alternative à ntpd qui serait plus robuste dans des environnements dans lesquels les connexions réseau sont intermittentes et où les systèmes démarrent souvent.

Fonctionnalités de Chrony

Chrony se distingue par une série de fonctionnalités avancées qui en font une solution moderne et efficace pour la synchronisation temporelle sur des réseaux variés.

Synchronisation rapide après le démarrage

L’une des caractéristiques majeures de Chrony est sa capacité à synchroniser rapidement l’horloge du système après le démarrage. Contrairement à ntpd, qui peut nécessiter plusieurs minutes pour atteindre une synchronisation précise, Chrony peut le faire en quelques secondes. Cela est particulièrement avantageux pour les systèmes qui démarrent fréquemment ou qui ne sont pas toujours en ligne.

Gestion des connexions réseau instables

Chrony est conçu pour fonctionner efficacement même dans des environnements où les connexions réseau sont intermittentes ou instables. Il peut gérer des sources de temps qui ne sont pas toujours disponibles et continuer à fournir une synchronisation précise. Cela est particulièrement utile pour les systèmes embarqués, les appareils IoT et les réseaux sans fil.

Faible consommation de ressources

Chrony est optimisé pour une faible consommation de ressources. Il utilise moins de CPU et de mémoire que ntpd, ce qui le rend adapté aux systèmes avec des ressources limitées. Cette efficacité permet également de réduire l’impact sur la performance globale du système.

Outils de diagnostic et de surveillance intégrés

Chrony fournit une série d’outils de diagnostic et de surveillance qui permettent aux administrateurs système de vérifier l’état de la synchronisation temporelle et de diagnostiquer les problèmes potentiels. Voici quelques-unes des commandes utiles :

  • chronyc tracking : affiche l’état de la synchronisation du système.
  • chronyc sources -v : montre une liste détaillée des sources de temps utilisées par Chrony.
  • chronyc sourcestats : donne des statistiques sur les performances des sources de temps.

Compatibilité avec une large gamme de sources de temps

Chrony peut synchroniser l’heure à partir de diverses sources, y compris les serveurs NTP publics, les horloges GPS et même les sources de temps locales. Cette flexibilité permet d’assurer une synchronisation précise en fonction des ressources disponibles.

Précision améliorée

Grâce à des algorithmes sophistiqués, Chrony peut maintenir une précision temporelle très élevée. Il est capable de compenser les dérives de l’horloge locale de manière plus efficace que les implémentations traditionnelles de NTP, ce qui se traduit par une synchronisation plus précise.

Sécurité

Chrony offre des options de configuration pour sécuriser les communications NTP. Par exemple, vous pouvez restreindre l’accès aux clients spécifiques et utiliser des clés de cryptage pour garantir que les données temporelles ne soient pas falsifiées.

Support pour les environnements virtuels

Chrony fonctionne bien dans les environnements virtuels, où les horloges des machines virtuelles peuvent souvent dériver en raison de la nature de la virtualisation. Chrony est capable de s’ajuster rapidement pour corriger ces dérives et maintenir une synchronisation précise.

Concepts clés

Pour utiliser Chrony de manière efficace, il est important de comprendre quelques concepts fondamentaux relatifs à la synchronisation temporelle et au fonctionnement des protocoles NTP.

Serveur NTP

Un serveur NTP est une machine qui distribue l’heure à d’autres machines (les clients) sur un réseau. Le serveur NTP obtient son heure d’une source de temps fiable, comme une horloge atomique, un GPS ou un autre serveur NTP.

Stratum

Le stratum est un niveau hiérarchique dans l’infrastructure NTP. Le stratum 0 représente les horloges de référence extrêmement précises (comme les horloges atomiques). Les serveurs synchronisés avec une horloge de stratum 0 sont des serveurs de stratum 1. Chaque niveau successif de serveurs synchronisés augmente le numéro de stratum, ce qui signifie que les serveurs de stratum 2 se synchronisent avec les serveurs de stratum 1 et ainsi de suite.

Client NTP

Un client NTP est une machine qui se synchronise avec un serveur NTP pour ajuster son horloge locale. La précision de la synchronisation dépend de la qualité de la connexion réseau et de la précision de la source de temps du serveur NTP. Les clients NTP envoient des requêtes périodiques aux serveurs NTP pour obtenir l’heure correcte et ajuster leur horloge en conséquence.

Sources de temps

Les sources de temps sont les origines à partir desquelles les serveurs et les clients NTP obtiennent l’heure. Ces sources peuvent être :

  • Serveurs NTP publics : accessibles via Internet, ils fournissent une heure précise.
  • Horloges GPS : elles offrent une synchronisation extrêmement précise basée sur les satellites GPS.
  • Horloges locales : par exemple, une horloge atomique ou une autre source de temps fiable installée localement.

Drift

Le drift (ou dérive) fait référence à l’écart entre l’horloge locale d’une machine et l’heure réelle. Toutes les horloges, même les plus précises, ont tendance à dériver avec le temps en raison de facteurs environnementaux et des caractéristiques matérielles. Chrony utilise des algorithmes pour mesurer et corriger cette dérive, maintenant ainsi une précision temporelle élevée.

Le driftfile est un fichier où Chrony stocke les informations sur la dérive de l’horloge locale. Ces informations sont utilisées pour compenser la dérive lorsque le service Chrony démarre, permettant une synchronisation plus rapide et plus précise.

Intervalle de synchronisation

L’intervalle de synchronisation est la fréquence à laquelle un client NTP envoie des requêtes à un serveur NTP pour obtenir l’heure. Un intervalle court peut améliorer la précision, mais augmente la charge sur le réseau et le serveur. Chrony ajuste dynamiquement cet intervalle en fonction de la stabilité de la connexion et de la précision requise.

Makestep

La commande makestep dans Chrony permet d’ajuster immédiatement l’horloge locale si l’écart entre l’horloge actuelle et l’heure correcte est supérieur à une certaine limite. Cela est utile pour corriger rapidement des écarts importants, notamment lors du démarrage du système.

Installation de Chrony

L’installation de Chrony est un processus simple qui varie légèrement en fonction de la distribution Linux que vous utilisez. Voici les étapes pour installer Chrony sur les distributions Linux les plus courantes.

Information importante : Lorsque vous installez chrony sur votre système, il est souvent nécessaire de désinstaller d’autres services de synchronisation temporelle comme ntpd ou systemd-timesyncd. Cette procédure est parfois prise en charge par le gestionnaire de packages.

Installation sur Debian/Ubuntu

Pour installer Chrony sur Debian ou Ubuntu, vous pouvez utiliser le gestionnaire de paquets apt. Suivez les étapes ci-dessous :

  1. Mettez à jour la liste des paquets disponibles :

    Terminal window
    sudo apt update
  2. Installez le paquet Chrony :

    Terminal window
    sudo apt install chrony
  3. Une fois l’installation terminée, vous pouvez vérifier que le service Chrony est en cours d’exécution :

    Terminal window
    sudo systemctl status chrony

Installation sur CentOS/RHEL

Pour installer Chrony sur CentOS ou RHEL, utilisez le gestionnaire de paquets yum ou dnf. Voici les étapes à suivre :

  1. Installez le paquet Chrony :

    Terminal window
    sudo dnf install chrony # Pour CentOS 8/RHEL 8
  2. Activez et démarrez le service Chrony :

    Terminal window
    sudo systemctl enable chronyd
    sudo systemctl start chronyd
  3. Vérifiez que le service Chrony est en cours d’exécution :

    Terminal window
    sudo systemctl status chronyd

Post-installation

Après l’installation, il est recommandé de vérifier et ajuster la configuration par défaut de Chrony en éditant le fichier /etc/chrony/chrony.conf selon vos besoins spécifiques (voir la section suivante pour plus de détails sur la configuration).

Enfin, vous pouvez tester la synchronisation de l’horloge et vérifier les sources de temps configurées avec les commandes chronyc tracking et chronyc sources -v.

La commande chronyc sources -v fournit une vue détaillée des sources de temps configurées dans Chrony. Voici un exemple de sortie et une explication de chaque colonne :

210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp.example.com 1 6 377 56 +0.000001234 +0.000000567
^- ntp2.example.com 2 6 377 54 +0.000002345 +0.000001234
  • MS : Indicateur de l’état de la source de temps. Les symboles peuvent inclure :

    • ^ : Source en cours d’utilisation.
    • * : Source actuellement sélectionnée comme source de temps principale.
    • - : Source désélectionnée ou inutilisée.
    • + : Source sélectionnée comme source alternative.
  • Name/IP address : Le nom ou l’adresse IP de la source de temps.

  • Stratum : Le niveau de stratum de la source de temps. Un stratum 1 est directement connecté à une horloge de référence, tandis que des niveaux de stratum plus élevés indiquent une synchronisation indirecte.

  • Poll : Intervalle de sondage actuel (en secondes), c’est-à-dire la fréquence à laquelle Chrony interroge cette source de temps.

  • Reach : Indicateur de portée octale, montrant le statut de connectivité des dernières sondes envoyées. Une valeur de 377 indique que les dernières huit sondes ont été reçues avec succès.

  • LastRx : Le temps écoulé (en secondes) depuis la dernière réponse reçue de cette source.

  • Last sample : L’écart entre l’horloge locale et la source de temps à la dernière mesure. Il est décomposé en deux valeurs :

    • Le premier nombre indique l’offset (décalage) de temps.
    • Le second nombre indique la dispersion, qui est une mesure de la précision.

La commande chronyc tracking affiche des informations détaillées sur l’état actuel de la synchronisation de l’horloge locale avec les sources de temps configurées. Voici un exemple de sortie et une explication de chaque champ :

Reference ID : 192.168.0.1 (ntp.example.com)
Stratum : 2
Ref time (UTC) : Thu Jul 2 12:34:56 2024
System time : 0.000002345 seconds fast of NTP time
Last offset : +0.000000123 seconds
RMS offset : 0.000000678 seconds
Frequency : 123.456 ppm fast
Residual freq : +0.001 ppm
Skew : 0.002 ppm
Root delay : 0.000123 seconds
Root dispersion : 0.000456 seconds
Update interval : 64.0 seconds
Leap status : Normal
  • Reference ID : L’adresse IP ou le nom de la source de temps de référence actuellement utilisée.

  • Stratum : Le niveau de stratum de la source de temps de référence.

  • Ref time (UTC) : L’heure de la dernière mise à jour de la source de temps de référence en temps universel coordonné (UTC).

  • System time : L’écart actuel entre l’horloge locale et l’heure NTP. Par exemple, 0.000002345 seconds fast of NTP time signifie que l’horloge locale est actuellement en avance de 2,345 microsecondes par rapport à l’heure NTP.

  • Last offset : Le décalage de temps de la dernière mesure.

  • RMS offset : La moyenne quadratique (RMS) des décalages de temps mesurés. C’est une mesure de la stabilité de la synchronisation.

  • Frequency : La dérive de la fréquence de l’horloge locale en parties par million (ppm). Par exemple, 123.456 ppm fast signifie que l’horloge locale est plus rapide de 123,456 ppm.

  • Residual freq : La différence entre la fréquence mesurée et la fréquence corrigée de l’horloge locale.

  • Skew : L’incertitude dans la fréquence mesurée de l’horloge locale, en ppm.

  • Root delay : La somme des délais entre le système local et la source de temps de référence.

  • Root dispersion : L’incertitude cumulative de la synchronisation depuis la source de temps de référence.

  • Update interval : L’intervalle actuel entre les mises à jour de la synchronisation.

  • Leap status : L’état de l’indicateur de saut de seconde. Il peut indiquer si un saut de seconde est imminent pour ajuster l’horloge au temps universel coordonné.

Configuration de Chrony

La configuration de Chrony se fait principalement via le fichier /etc/chrony/chrony.conf. Ce fichier de configuration permet de définir les serveurs de temps, les paramètres de synchronisation et d’autres options essentielles pour assurer une synchronisation temporelle précise et fiable.

Configuration de base

Voici un exemple de configuration basique pour Chrony :

# Serveurs de temps
server ntp.example.com iburst
# Fichier de dérive
driftfile /var/lib/chrony/chrony.drift
# Synchronisation avec l'horloge matérielle
rtcsync
# Ajustement rapide de l'horloge au démarrage
makestep 1.0 3

Explications de quelques options

  • server ntp.example.com iburst : Cette ligne configure Chrony pour utiliser ntp.example.com comme serveur de temps. L’option iburst permet d’envoyer une rafale de requêtes initiales si le serveur n’est pas joignable, accélérant ainsi la synchronisation.
  • driftfile /var/lib/chrony/chrony.drift : Ce fichier stocke les informations sur la dérive de l’horloge locale. Chrony l’utilise pour compenser la dérive au démarrage.
  • rtcsync : Cette option permet de synchroniser l’horloge matérielle (RTC) avec l’horloge système, garantissant que l’horloge matérielle est également correcte.
  • makestep 1.0 3 : Si l’écart entre l’horloge actuelle et l’heure correcte est supérieur à 1 seconde, cette option permet à Chrony d’ajuster immédiatement l’horloge. Cette correction peut se produire jusqu’à 3 fois au démarrage.

Ajout de plusieurs serveurs

Il est recommandé de configurer plusieurs serveurs NTP pour assurer une redondance et une fiabilité accrues. Voici comment ajouter plusieurs serveurs dans le fichier de configuration :

server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
server time.google.com iburst
server time.cloudflare.com iburst
server time.facebook.com iburst

Configuration avancée

Chrony offre de nombreuses options de configuration avancées pour affiner la synchronisation temporelle. Voici quelques exemples :

  • maxupdateskew : Limite la quantité de dérive autorisée entre les mises à jour avant que l’heure ne soit corrigée.
  • maxdistance : Définit la distance maximale (en secondes) qu’une source de temps peut avoir avant d’être considérée comme invalide.
  • logdir : Spécifie le répertoire où Chrony doit enregistrer ses journaux.

Exemple :

maxupdateskew 100.0
maxdistance 3.0
logdir /var/log/chrony

Configuration d’un serveur NTP local

Pour configurer Chrony en tant que serveur NTP pour d’autres clients sur le réseau, ajoutez les lignes suivantes :

allow 192.168.0.0/24
deny all
local stratum 10
  • local stratum 10 : Définit le niveau de stratum pour le serveur local. Un stratum plus élevé indique que le serveur est plus éloigné de la source de temps de référence, ce qui est approprié pour un serveur NTP interne.

Rechargement de la configuration

Après avoir modifié le fichier de configuration, vous devez redémarrer le service Chrony pour appliquer les changements :

Terminal window
sudo systemctl restart chronyd

Vérification de la configuration

Pour vérifier que Chrony fonctionne correctement avec la nouvelle configuration, utilisez les commandes vues précédemment :

Terminal window
chronyc tracking
chronyc sources -v

Sécurisation de Chrony

La sécurisation de Chrony est essentielle pour garantir que votre configuration de synchronisation temporelle reste fiable et protégée contre les manipulations externes. Il existe plusieurs mesures que vous pouvez prendre pour renforcer la sécurité de votre installation Chrony.

Restriction d’accès

L’une des premières étapes pour sécuriser Chrony consiste à restreindre l’accès aux clients autorisés. Cela peut être réalisé en utilisant les directives allow et deny dans le fichier de configuration /etc/chrony/chrony.conf.

Par exemple, pour autoriser uniquement les clients du sous-réseau 192.168.0.0/24 à accéder à votre serveur NTP et refuser tout autre accès :

allow 192.168.0.0/24
deny all

Utilisation de clés de cryptage

Pour garantir que les communications NTP ne soient pas falsifiées, vous pouvez configurer Chrony pour utiliser des clés de cryptage. Cela ajoute une couche de sécurité en s’assurant que les messages NTP échangés entre les serveurs et les clients sont authentifiés.

  1. Créez un fichier de clés de cryptage, par exemple /etc/chrony/chrony.keys :

    1 MD5 a6c0d87e3c0a0d5e0000000000000000
  2. Configurez Chrony pour utiliser ces clés en ajoutant les lignes suivantes à /etc/chrony/chrony.conf :

    keyfile /etc/chrony/chrony.keys
    commandkey 1
  3. Pour un serveur NTP, vous pouvez également spécifier les clés à utiliser pour chaque source de temps :

    server ntp.example.com key 1

Configuration des permissions

Il est important de s’assurer que les fichiers de configuration et de clés ont les permissions appropriées pour empêcher l’accès non autorisé. Par exemple :

Terminal window
sudo chown root:root /etc/chrony/chrony.keys
sudo chmod 600 /etc/chrony/chrony.keys

Utilisation des options de sécurité

Chrony offre plusieurs options de sécurité supplémentaires que vous pouvez configurer dans /etc/chrony/chrony.conf :

  • bindcmdaddress : Pour restreindre les commandes Chrony à une adresse IP spécifique :

    bindcmdaddress 127.0.0.1
  • cmdallow et cmddeny : Pour contrôler l’accès aux commandes Chrony :

    cmdallow 192.168.0.0/24
    cmddeny all

Surveillance et journaux

Surveiller les journaux de Chrony peut aider à détecter toute activité suspecte. Les journaux sont généralement stockés dans /var/log/chrony. Vous pouvez configurer Chrony pour consigner des informations supplémentaires en ajustant les options de journalisation dans /etc/chrony/chrony.conf :

log tracking measurements statistics

Conclusion

La synchronisation temporelle est une composante essentielle pour le bon fonctionnement des systèmes informatiques modernes. Chrony se présente comme une solution robuste et efficace pour gérer cette synchronisation, particulièrement dans des environnements variés et complexes. En utilisant Chrony, vous pouvez bénéficier d’une synchronisation rapide, précise et fiable, tout en profitant de ses fonctionnalités avancées et de sa faible consommation de ressources.

Pour tirer le meilleur parti de Chrony, il est recommandé de :

  • Configurer plusieurs serveurs NTP pour assurer la redondance et la fiabilité.
  • Surveiller régulièrement l’état de la synchronisation et les performances des sources de temps.
  • Appliquer les meilleures pratiques de sécurité pour protéger votre configuration.
  • Maintenir Chrony à jour avec les dernières versions et correctifs de sécurité.

En suivant ces recommandations et en utilisant les informations fournies dans ce guide, vous serez bien équipé pour assurer une synchronisation temporelle précise et fiable sur vos systèmes, contribuant ainsi à la stabilité et à la sécurité de votre infrastructure informatique.

Plus d’infos

Ces ressources vous fourniront des informations supplémentaires et une aide précieuse pour approfondir votre compréhension et votre utilisation de Chrony.