NTP
NTP — Le Protocole Silencieux qui Gouverne vos Infrastructures
Guide complet à destination des administrateurs système — Home Lab & Entreprise
Avant-propos
Il existe des protocoles qu'on ne remarque que lorsqu'ils sont cassés. NTP en fait partie. Un décalage de quelques secondes suffit à rendre vos certificats TLS invalides, à désynchroniser vos logs, à faire échouer vos authentifications Kerberos ou à créer des trous noirs dans votre SIEM. Cet article couvre le protocole dans sa globalité, son histoire, son importance critique en entreprise, puis entre dans le détail des implémentations Windows et Linux.
1. Le Protocole NTP — Fondamentaux & Histoire
1.1 Genèse et évolution
NTP (Network Time Protocol) est l'un des plus anciens protocoles Internet encore en service. Il a été conçu par David L. Mills de l'Université du Delaware, dont la première publication remonte à 1985 (RFC 958). L'idée était simple : synchroniser les horloges des machines connectées à Internet avec une précision suffisante pour que les applications distribuées fonctionnent de manière cohérente.
L'évolution des versions reflète la montée en complexité des réseaux :
| Version | Année | RFC | Apports majeurs |
|---|---|---|---|
| NTPv1 | 1988 | RFC 1059 | Premier standard formel, synchronisation simple |
| NTPv2 | 1989 | RFC 1119 | Authentification basique, gestion des erreurs |
| NTPv3 | 1992 | RFC 1305 | Algorithmes d'estimation de délai améliorés, sécurité renforcée |
| NTPv4 | 2010 | RFC 5905 | IPv6, précision à la nanoseconde, autokey, meilleure tolérance aux pannes |
| SNTP | - | RFC 4330 | Simplified NTP — clients légers, pas de correction d'erreur avancée |
Parallèlement, PTP (Precision Time Protocol, IEEE 1588) est apparu pour les environnements nécessitant une précision sub-microseconde (finance haute fréquence, télécom, industrie). PTP n'est pas abordé en détail ici mais mérite d'être connu dans une architecture sysadmin avancée.
1.2 Modèle hiérarchique — La notion de Stratum
NTP fonctionne sur un modèle hiérarchique de strates (stratum) :

Le principe de l'algorithme NTP repose sur plusieurs mécanismes combinés :
- Round-Trip Delay : mesure de la latence aller-retour pour corriger le décalage de transit réseau
- Clock Filter : sélection des meilleures mesures parmi un échantillon
- Clock Select : algorithme de vote entre plusieurs sources pour éliminer les falsetickers
- Clock Discipline : ajustement progressif (discipline) de l'horloge locale via
adjtime()/adjtimex(), jamais de saut brutal (saufstepforcé)
Le port utilisé est UDP/123, et contrairement à TCP, NTP opère en mode stateless avec un simple échange de 4 timestamps par paquet.
1.3 Structure d'un paquet NTP
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|LI | VN |Mode | Stratum | Poll | Precision |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Root Delay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Root Dispersion |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reference Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reference Timestamp (64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Originate Timestamp (64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Receive Timestamp (64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transmit Timestamp (64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Les 4 timestamps permettent de calculer l'offset (décalage) et le delay (latence réseau).
2. NTP en Entreprise — Pourquoi c'est Critique
2.1 Les couches qui dépendent de la synchronisation temporelle
Un admin qui considère NTP comme un service secondaire n'a pas encore vécu une nuit blanche à cause de lui. Voici les dépendances directes en entreprise :
Authentification & Sécurité
- Kerberos (Active Directory) refuse les tickets dont le décalage dépasse 5 minutes (
clockskew). Une désynchronisation de 5 minutes et 1 seconde bloque toute authentification AD. - TLS/mTLS : les certificats ont des plages de validité
notBefore/notAfter. Un hôte avec une horloge décalée verra des certificats valides comme expirés ou futurs. - TOTP/2FA (Google Authenticator, etc.) : les codes OTP sont calculés sur la fenêtre temporelle actuelle ±30s. Au-delà, l'authentification échoue.
- JWT : les tokens ont des champs
iat(issued at) etexp(expiration). Décalage = tokens rejetés.
Infrastructure distribuée
- Bases de données distribuées (PostgreSQL avec réplication, MySQL Galera, Cassandra, etcd, CockroachDB) : l'ordonnancement des transactions repose sur des timestamps. Un décalage crée des conflits d'ordre et des corruptions potentielles.
- Kubernetes : les certificats de l'API server, les leases de leader election (etcd) dépendent de l'horloge système.
- File systems distribués (Ceph, HDFS, GlusterFS) : les opérations de verrouillage et les métadonnées utilisent des timestamps.
Conformité & Audit
- PCI-DSS (Requirement 10.4), ISO 27001, SOX, NIS2 : tous exigent une synchronisation précise des horloges pour garantir l'intégrité des journaux d'audit.
2.2 NTP et la centralisation des logs — Le lien fondamental avec les SIEM
C'est probablement l'impact le plus sous-estimé par les équipes qui n'ont jamais eu à investiguer un incident de sécurité multi-hosts.
Le problème de la corrélation temporelle
Un SIEM (Splunk, Elastic SIEM, Microsoft Sentinel, QRadar, Wazuh...) ingère des événements depuis des dizaines ou centaines de sources :
[10:42:03.221] firewall-01 → DENY SSH 10.0.1.55 → 192.168.1.10
[10:42:07.891] auth-server-01 → FAILED LOGIN user=root src=10.0.1.55
[10:42:09.114] dc-01 → KERBEROS TGT REQUEST user=svc_backup
[10:42:11.002] web-app-01 → SQL ERROR query="' OR 1=1--" src=10.0.1.55
Si web-app-01 a 3 minutes de retard, cet événement apparaît à 10:39 dans Splunk, avant le refus du firewall. La chaîne d'attaque devient incompréhensible. Un analyste SOC passe 2 heures à tenter de reconstituer une timeline qui n'a aucun sens.
Syslog et le champ timestamp
Le protocole Syslog (RFC 3164, RFC 5424) inclut un timestamp généré par l'émetteur. Sans synchronisation NTP, deux hôtes qui s'échangent des messages à la même seconde réelle peuvent présenter des écarts de plusieurs minutes dans les logs collectés.
Les solutions de centralisation (rsyslog, syslog-ng, Fluentd, Logstash, Vector) permettent bien d'ajouter un timestamp de réception côté collecteur — mais cela ne remplace pas le timestamp d'origine pour la corrélation forensique.
Impact sur la détection
Les règles de corrélation SIEM fonctionnent sur des fenêtres temporelles :
RULE: si 5 échecs d'authentification sur le même user en moins de 60 secondes → ALERT
Si les sources sont désynchronisées de 90 secondes, cette règle ne se déclenche jamais. Vous êtes aveugle.
Recommandation architecture : déployez un ou deux serveurs NTP internes (Stratum 2) synchronisés sur des pools publics fiables ou sur une source GPS/PTP interne. Tous vos actifs (serveurs, switches, firewalls, appliances, hyperviseurs, containers via le nœud hôte) doivent pointer vers ces sources internes. Activez le monitoring NTP (offset, stratum, reachability) dans votre stack de supervision (Zabbix, Prometheus/Alertmanager, PRTG).
3. NTP sous Windows
3.1 Évolution historique sous Windows
Microsoft a intégré NTP progressivement, souvent de manière propriétaire et imparfaite :
| Version Windows | Service / Mécanisme NTP | Notes |
|---|---|---|
| Windows NT 4.0 | Pas de NTP natif | Outils tiers requis |
| Windows 2000 | W32Time (première version) | Implémentation minimaliste, non conforme RFC 1305 |
| Windows XP / 2003 | W32Time amélioré, NTP client | Toujours limité pour usage serveur |
| Windows Vista / 2008 | W32Time avec NTPv4 partiel | Amélioration de la précision |
| Windows 8 / 2012 | W32Time amélioré | Meilleure gestion des sources multiples |
| Windows 10 / 2016 | W32Time avec précision ±1s garantie | Suffisant pour la plupart des usages |
| Windows Server 2016+ | Accurate Time (KB3177467) | Précision sub-milliseconde possible |
| Windows 11 / 2022+ | W32Time + support PTP en option | Intégration Hyper-V améliorée |
Point critique : jusqu'à Windows Server 2016, W32Time ne respectait pas pleinement la RFC NTP. Microsoft lui-même le reconnaissait dans la documentation. Pour des environnements nécessitant une précision <1ms (finance, trading, SCADA), W32Time seul ne suffit pas sur les anciennes versions.
3.2 Services côté serveur Windows
W32Time (Windows Time Service)
C'est le service natif, présent sur tous les systèmes Windows depuis Windows 2000. Il peut opérer en mode client, serveur NTP, ou les deux simultanément.
Configuration en tant que serveur NTP :
# Activer le mode serveur NTP
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" `
-Name "Enabled" -Value 1
# Configurer les paramètres du service
w32tm /config /manualpeerlist:"0.fr.pool.ntp.org,0x8 1.fr.pool.ntp.org,0x8 2.fr.pool.ntp.org,0x8" `
/syncfromflags:manual /reliable:YES /update
# Redémarrer le service
Restart-Service w32tm
net stop w32tm && net start w32tm
Configuration via GPO (recommandé en entreprise)
Dans un domaine AD, la hiérarchie NTP est automatiquement gérée :
- Le PDC Emulator du domaine racine se synchronise sur une source externe
- Tous les autres DCs se synchronisent sur le PDC Emulator
- Les membres du domaine se synchronisent sur leur DC le plus proche
GPO Path: Computer Configuration → Administrative Templates → System → Windows Time Service
→ Global Configuration Settings
→ Time Providers → Configure Windows NTP Client
→ Time Providers → Enable Windows NTP Server
Paramètres clés à configurer :
| Paramètre GPO | Valeur recommandée |
|---|---|
| NtpServer | IP_PDC_Emulator,0x9 (type NTP) |
| Type | NTP |
| MaxPosPhaseCorrection | 54000 (15h max correction positive) |
| MaxNegPhaseCorrection | 54000 (15h max correction négative) |
| SpecialPollInterval | 3600 (poll toutes les heures) |
Meinberg NTP (tiers, recommandé pour usage serveur strict)
Pour les environnements où la précision RFC-compliant est obligatoire (conformité stricte, SIEM forensique, finance), Meinberg NTP for Windows est la référence. C'est le portage officiel de la référence ntpd sur Windows.
- Téléchargement : https://www.meinbergglobal.com/english/sw/ntp.htm
- Service installé :
Network Time Protocol Daemon - Fichier de configuration :
C:\Program Files (x86)\NTP\etc\ntp.conf - Format identique au
ntp.confLinux/BSD
# ntp.conf Windows (Meinberg)
server 0.fr.pool.ntp.org iburst
server 1.fr.pool.ntp.org iburst
server 2.fr.pool.ntp.org iburst
driftfile "C:\Program Files (x86)\NTP\etc\ntp.drift"
logfile "C:\Program Files (x86)\NTP\etc\ntp.log"
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
3.3 Binaires et outils clients Windows
| Outil | Type | Usage principal |
|---|---|---|
w32tm |
CLI natif | Configuration, diagnostic, requêtes NTP, resynchronisation |
Get-Date |
PowerShell | Lecture de l'heure système |
net time |
Legacy CMD | Ancienne commande de synchronisation (dépréciée) |
| NTP Analyzer | GUI tiers | Monitoring visuel des sources NTP |
| Meinberg NTP | Service tiers | Client/serveur RFC-compliant complet |
| ntpdate (WSL) | WSL | Requête ponctuelle via WSL2 si besoin |
3.4 Diagnostic NTP sous Windows — CLI indispensables
Côté client
# ── État général du service W32Time ──────────────────────────────
w32tm /query /status
# Affiche : source actuelle, offset, stratum, poll interval, last sync
# ── Liste des sources NTP configurées et leur état ────────────────
w32tm /query /peers
# Affiche pour chaque peer : IP, stratum, when (dernière synchro),
# offset, delay, dispersion
# ── Configuration complète du service ─────────────────────────────
w32tm /query /configuration
# ── Tester la synchronisation vers un serveur spécifique ──────────
w32tm /stripchart /computer:time.windows.com /samples:5 /dataonly
# Affiche l'offset en temps réel sur N samples
# ── Resynchronisation forcée ──────────────────────────────────────
w32tm /resync /force
w32tm /resync /rediscover # Force la redécouverte des peers
# ── Vérifier si le service tourne ─────────────────────────────────
Get-Service W32Time | Select-Object Status, StartType
sc query w32tm
# ── Diagnostiquer les erreurs de sync (Event Log) ─────────────────
Get-WinEvent -LogName System | Where-Object {$_.ProviderName -eq "Microsoft-Windows-Time-Service"} | Select-Object -First 20
# ── Vérifier l'offset courant en PowerShell ───────────────────────
w32tm /query /status | Select-String "RMS Offset|Source|Stratum"
# ── Test de connectivité UDP/123 ──────────────────────────────────
Test-NetConnection -ComputerName 1.fr.pool.ntp.org -Port 123
# Note : NTP utilise UDP, Test-NetConnection teste TCP/UDP selon -Port
# Pour UDP strict, utiliser : portqry -n 1.fr.pool.ntp.org -e 123 -p UDP
# ── Vérifier le pare-feu Windows ─────────────────────────────────
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*NTP*" -or $_.DisplayName -like "*Time*"}
netsh advfirewall firewall show rule name=all | Select-String -A5 "123"
Côté serveur
# ── Vérifier que W32Time est configuré comme serveur ──────────────
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" | Select-Object Enabled
# ── Vérifier le type de synchronisation (NT5DS vs NTP) ────────────
w32tm /query /configuration | Select-String "Type|NtpServer"
# ── Tester que le serveur répond aux requêtes NTP entrantes ───────
w32tm /stripchart /computer:VOTRE_SERVEUR_NTP /samples:3
# ── Depuis un autre host : interroger le serveur NTP local ────────
w32tm /stripchart /computer:192.168.1.10 /samples:5 /dataonly
# ── Vérifier les logs W32Time ─────────────────────────────────────
Get-WinEvent -LogName System -MaxEvents 50 | Where-Object {$_.Id -in (29,37,38,47,50,155,156,157,158)}
# ── Sur le PDC Emulator : vérifier la source de référence ─────────
w32tm /query /source
# Doit retourner une IP externe ou "Local CMOS Clock" si problème
# ── Forcer la resynchronisation du PDC Emulator ───────────────────
w32tm /resync /force
net stop w32tm && net start w32tm
# ── Vérifier via NTP brut (PowerShell) ────────────────────────────
$ntpServer = "192.168.1.10"
$socket = New-Object Net.Sockets.Socket([Net.Sockets.AddressFamily]::InterNetwork, [Net.Sockets.SocketType]::Dgram, [Net.Sockets.ProtocolType]::Udp)
$socket.Connect($ntpServer, 123)
$ntpData = New-Object byte[] 48
$ntpData[0] = 0x1B # NTP request
$socket.Send($ntpData) | Out-Null
$socket.Receive($ntpData) | Out-Null
$socket.Close()
$intPart = [BitConverter]::ToUInt32($ntpData[40..43], 0)
$fracPart = [BitConverter]::ToUInt32($ntpData[44..47], 0)
$ntpEpoch = [DateTime]::new(1900, 1, 1, 0, 0, 0, [DateTimeKind]::Utc)
$ntpTime = $ntpEpoch.AddSeconds([uint64]$intPart)
Write-Host "NTP server time: $ntpTime UTC"
Write-Host "Local time: $((Get-Date).ToUniversalTime()) UTC"
# ── Activer le mode debug de W32Time temporairement ───────────────
w32tm /debug /enable /file:"C:\w32tm-debug.log" /size:10000000 /entries:0-300
# (désactiver après diagnostic)
w32tm /debug /disable
4. NTP sous Linux
4.1 Évolution historique sous Linux
L'écosystème NTP Linux a connu une transition plus radicale que Windows, avec un changement de daemon de référence :
| Période | Daemon | Notes |
|---|---|---|
| 1993–2000 | xntpd |
Port Unix de l'implémentation de référence de D. Mills |
| 2000–2017 | ntpd (ntp.org) |
Référence universelle, RFC-compliant, très stable mais complexe à configurer |
| 2004+ | openntpd |
Alternative OpenBSD, minimaliste, sécurité renforcée |
| 2012+ | chrony |
Conçu pour les réseaux instables et les machines virtuelles |
| 2014+ | systemd-timesyncd |
Client SNTP léger intégré à systemd, insuffisant pour usage serveur |
| 2017–aujourd'hui | chrony (défaut) |
Remplace ntpd sur RHEL/CentOS/Fedora/Ubuntu 18.04+, Debian 10+ |
Pourquoi chrony a supplanté ntpd :
- Convergence beaucoup plus rapide après démarrage ou perte de synchronisation
- Gestion native des environnements virtualisés (horloge instable, migrations VM)
- Algorithme de discipline plus précis sur les connexions intermittentes
- Moindre consommation de ressources
- Configuration plus simple
ntpd n'est pas mort : il reste utilisé pour les cas avancés (serveurs Stratum 1/2 avec référence GPS/PPS, environnements embarqués spécifiques, compatibilité legacy).
4.2 Services côté serveur Linux
chrony (chronyd)
Chrony est aujourd'hui le standard de facto sur les distributions majeures.
Packages :
# RHEL/CentOS/Rocky/AlmaLinux/Fedora
dnf install chrony
# Debian/Ubuntu
apt install chrony
# SUSE/openSUSE
zypper install chrony
Configuration serveur (/etc/chrony.conf ou /etc/chrony/chrony.conf) :
# ── Sources de référence ──────────────────────────────────────────
server 0.fr.pool.ntp.orgiburst
server 1.fr.pool.ntp.org iburst
server 2.fr.pool.ntp.org iburst
server 3.fr.pool.ntp.org iburst
# Pour usage interne (Stratum 2 pointant sur sources primaires)
server ntp1.example.com iburst prefer
server ntp2.example.com iburst
# ── Fichier de dérive ─────────────────────────────────────────────
driftfile /var/lib/chrony/drift
# ── Correction rapide si décalage > 1s au démarrage ──────────────
makestep 1.0 3
# ── Activer le suivi de l'horloge matérielle (RTC) ────────────────
rtcsync
# ── Source de référence locale (si pas de réseau) ─────────────────
local stratum 10
# ── Servir l'heure aux clients du réseau interne ─────────────────
# Autoriser le réseau 192.168.1.0/24 à se synchroniser
allow 192.168.1.0/24
allow 10.0.0.0/8
# ── Logging ───────────────────────────────────────────────────────
logdir /var/log/chrony
log measurements statistics tracking
# ── Sécurité : ne pas agir comme serveur pour les autres ─────────
# (pour un client pur, désactiver le bloc "allow" ci-dessus)
Gestion du service :
systemctl enable --now chronyd
systemctl status chronyd
ntpd (ntp / ntpsec)
Pour les environnements nécessitant une configuration avancée (référence GPS/PPS, Stratum 1, authentification symétrique entre peers).
ntpsec est le fork modernisé de ntpd, avec nettoyage du code, réduction de la surface d'attaque, et support des fonctionnalités modernes. C'est la version recommandée si vous avez besoin de ntpd.
# Debian/Ubuntu
apt install ntpsec
# RHEL (via EPEL)
dnf install ntpsec
Configuration serveur (/etc/ntp.conf) :
# ── Serveurs de référence ─────────────────────────────────────────
server 0.fr.pool.ntp.org iburst
server 1.fr.pool.ntp.org iburst
server 2.fr.pool.ntp.org iburst
server 3.fr.pool.ntp.org iburst
# ── Fichier de dérive ─────────────────────────────────────────────
driftfile /var/lib/ntp/ntp.drift
# ── Contrôle d'accès ──────────────────────────────────────────────
restrict default kod nomodify notrap nopeer noquery limited
restrict 127.0.0.1
restrict ::1
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# ── Serveur de référence locale (fallback) ────────────────────────
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# ── Logging ───────────────────────────────────────────────────────
logfile /var/log/ntp.log
openntpd
Solution minimaliste issue d'OpenBSD, privilégiant la sécurité sur la précision absolue. Bonne option pour les environnements contraints ou les postes de travail.
apt install openntpd # Debian/Ubuntu
# /etc/openntpd/ntpd.conf
servers 1.fr.pool.ntp.org
listen on *
systemd-timesyncd
Présent par défaut sur la majorité des distributions modernes. Client SNTP uniquement, non adapté à un usage serveur.
# /etc/systemd/timesyncd.conf
[Time]
NTP=192.168.1.10 192.168.1.11
FallbackNTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048
systemctl enable --now systemd-timesyncd
timedatectl set-ntp true
Règle de base : sur un serveur de production, remplacez systemd-timesyncd par chrony. Sur un poste de travail ou un container léger, systemd-timesyncd est suffisant.
4.3 Binaires et outils clients Linux
| Outil | Daemon associé | Usage |
|---|---|---|
chronyc |
chronyd | Interface CLI complète pour chrony |
ntpq |
ntpd/ntpsec | Requêtes et diagnostics ntpd |
ntpstat |
ntpd/ntpsec | Résumé rapide de l'état de synchronisation |
ntpdate |
Standalone (déprécié) | Synchronisation ponctuelle (remplacé par chronyc makestep) |
timedatectl |
systemd | Interface systemd pour la gestion du temps et de timesyncd |
sntp |
ntpsec | Client SNTP simple pour requêtes ponctuelles |
tcpdump/wireshark |
- | Analyse des paquets NTP (port UDP/123) |
ntptrace |
ntpd | Tracé de la hiérarchie NTP depuis un client |
4.4 Diagnostic NTP sous Linux — CLI indispensables
Côté client
# ── chrony : état général ─────────────────────────────────────────
chronyc tracking
# Affiche : source de référence, stratum, offset system, RMS offset,
# frequency, residual freq, skew, root delay, root dispersion
# ── chrony : liste des sources et leur qualité ────────────────────
chronyc sources -v
# Colonnes clés :
# S : état (* = sélectionné, + = combiné, - = écarté, ? = injoignable)
# Last Rx : délai depuis le dernier paquet reçu
# Offset : décalage mesuré
chronyc sourcestats -v
# Statistiques sur la dérive de chaque source
# ── chrony : activité et ajustements récents ─────────────────────
chronyc activity
chronyc ntpdata # Détails NTP bruts de toutes les sources
# ── chrony : forcer une synchronisation manuelle ─────────────────
chronyc makestep # Correction instantanée (saut d'horloge)
chronyc burst 4/4 # Envoyer N requêtes pour collecter des données rapidement
# ── systemd-timesyncd : état ──────────────────────────────────────
timedatectl show-timesync --all
timedatectl timesync-status
timedatectl status
# ── ntpd/ntpsec : état des peers ──────────────────────────────────
ntpq -p
# Colonnes : remote, refid, st (stratum), when, poll, reach, delay, offset, jitter
# Légende : * = peer sélectionné, + = inclus, - = écarté, x = falseticker
ntpq -c peers -c sysinfo # Infos système ntpd
ntpstat # Résumé rapide : synchronized / unsynchronised
# ── Test de requête NTP vers un serveur spécifique ────────────────
# Avec ntpdate (si installé)
ntpdate -q 1.fr.pool.ntp.org # Query sans appliquer la correction
# Avec chrony
chronyc -a "server 192.168.1.10"
# Avec sntp (ntpsec-utils)
sntp 1.fr.pool.ntp.org
# ── Test de connectivité UDP/123 ──────────────────────────────────
# Requête NTP brute avec nmap
nmap -sU -p 123 --script ntp-info 1.fr.pool.ntp.org
# Via nc (peut varier selon version)
echo "" | nc -u -w1 1.fr.pool.ntp.org 123 && echo "UDP/123 reachable"
# Via tcpdump (vérifier échanges NTP)
tcpdump -i eth0 -n port 123 -v
# ── Vérifier le timezone et la config globale ─────────────────────
timedatectl
date -u # Heure UTC actuelle
hwclock --show # Heure de l'horloge matérielle (RTC)
# ── Journaux ─────────────────────────────────────────────────────
journalctl -u chronyd -f --since "1 hour ago"
journalctl -u systemd-timesyncd -f
grep -i ntp /var/log/syslog | tail -50
Côté serveur
# ── Vérifier que chronyd est bien en mode serveur ─────────────────
chronyc -a "help" # Lister les commandes disponibles
chronyc serverstats
# Affiche : nombre de requêtes reçues, réponses envoyées, clients
# ── Liste des clients actifs (qui se synchronisent sur ce serveur) ─
chronyc clients
# Nécessite "clientloglimit" ou "log clients" dans chrony.conf
# Activer le log clients si pas déjà fait :
# Dans /etc/chrony.conf : ajouter "clientloglimit 10000000"
# puis : chronyc reload sources
# ── Vérifier la configuration chargée ─────────────────────────────
chronyc -a "dump" # Dump l'état interne
grep -v "^#" /etc/chrony.conf | grep -v "^$" # Config sans commentaires
# ── Vérifier que le port UDP/123 est ouvert et en écoute ──────────
ss -ulnp | grep 123
netstat -ulnp | grep 123
# ── Vérifier les règles firewall ──────────────────────────────────
# iptables
iptables -L INPUT -n -v | grep 123
# firewalld
firewall-cmd --list-services | grep -i ntp
firewall-cmd --add-service=ntp --permanent # Si pas déjà présent
firewall-cmd --reload
# nftables
nft list ruleset | grep 123
# ── Pour ntpd : vérifier les ACL (restrict) ───────────────────────
ntpq -c reslist
# ── Monitoring continu : offset en temps réel ─────────────────────
watch -n 2 'chronyc tracking && chronyc sources'
# ── Vérifier le fichier de dérive (drift) ─────────────────────────
cat /var/lib/chrony/drift
# Une valeur >500 ppm indique une horloge matérielle dégradée ou une VM instable
# ── Test depuis un client externe ─────────────────────────────────
# Depuis un autre hôte Linux, vérifier que ce serveur répond :
chronyc -h 192.168.1.10 tracking
sntp -K /dev/null 192.168.1.10
ntpdate -q 192.168.1.10
# ── Analyse des performances longue durée ─────────────────────────
# Avec gnuplot si log stats activé dans chrony.conf
# Le fichier /var/log/chrony/statistics.log contient l'historique complet
ls -la /var/log/chrony/
tail -20 /var/log/chrony/measurements.log
5. Conclusion — NTP à l'Ère de l'IA et de l'Observabilité
NTP est un protocole quasi-invisible quand il fonctionne, et catastrophique quand il ne fonctionne pas. Après 40 ans d'existence, il reste l'épine dorsale temporelle de toute infrastructure digne de ce nom.
Ce qui change avec l'IA et les outils modernes
Observabilité intelligente du NTP
Les stacks d'observabilité modernes commencent à traiter NTP comme un signal de première classe. Des exporters Prometheus (prometheus-ntp-exporter, chrony_exporter) permettent de tracker offset, stratum, dispersion et reachability dans Grafana. Des alertes AIOps (Dynatrace, Datadog, New Relic) peuvent désormais corréler automatiquement une dégradation de la qualité des logs avec une dérive NTP détectée sur les agents — sans intervention humaine.
SIEM de nouvelle génération
Les SIEM modernes (Microsoft Sentinel, Elastic Security, Exabeam) intègrent des moteurs de Machine Learning capables de détecter des anomalies temporelles dans les flux de logs — un comportement qui était invisible sans synchronisation parfaite devient détectable même avec un léger décalage, car l'IA modélise la variance temporelle attendue par type d'équipement. Cela ne remplace pas une bonne synchronisation NTP, mais compense en partie les insuffisances.
Sécurité de NTP elle-même
Les attaques sur NTP (NTP amplification DDoS, time poisoning) ont conduit à des évolutions importantes : NTPv4 avec NTS (Network Time Security, RFC 8915) apporte enfin une authentification cryptographique robuste basée sur TLS 1.3, sans la complexité de l'ancien Autokey. Chrony supporte NTS depuis la version 4.0. C'est l'avenir pour les serveurs NTP exposés ou les infrastructures sensibles.
Virtualisation, containers et time
Dans un environnement Kubernetes/conteneurs, la synchronisation NTP est gérée au niveau du nœud hôte. Les containers héritent de l'horloge de l'hôte — mais des outils comme tsc clocksource peuvent causer des dérives dans certaines configurations de virtualisation imbriquée. Les hyperviseurs modernes (VMware vSphere 8, Hyper-V 2022, KVM avec ptp_kvm) proposent des mécanismes de synchronisation para-virtualisée (VMware Tools time sync, ptp_kvm + phc2sys + ptp4l) qui peuvent se combiner avec chrony pour atteindre des précisions sub-milliseconde en VM — sujet qui mérite son propre article.
La recommandation finale
Traitez NTP comme une infrastructure de sécurité, pas comme un service de commodité. Déployez des serveurs internes dédiés, supervisez-les activement, intégrez les métriques NTP dans votre observabilité, et planifiez la migration vers NTS pour vos serveurs publics. Votre équipe SOC vous en remerciera.