Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| sysadmin:linux:serveur-ntp [2017/08/24 14:46] – créée yoann | sysadmin:linux:serveur-ntp [2025/11/10 14:57] (Version actuelle) – yoann | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| {{tag> | {{tag> | ||
| - | ====== Installer serveur ntp ====== | + | ====== Installer |
| **NTP**((**N**etwork **T**ime **P**rotocol)) permet de distribuer l' | **NTP**((**N**etwork **T**ime **P**rotocol)) permet de distribuer l' | ||
| Ligne 9: | Ligne 9: | ||
| Le système est pyramidal pour éviter la surcharge des serveurs. Les sources sont de niveau 0 (strate), Chaque serveur est configuré sur un serveur parent | Le système est pyramidal pour éviter la surcharge des serveurs. Les sources sont de niveau 0 (strate), Chaque serveur est configuré sur un serveur parent | ||
| - | ==== Installation ===== | + | ===== Installation ===== |
| + | |||
| + | Sur les systèmes de type Debian : | ||
| <code bash> | <code bash> | ||
| $ sudo apt-get install ntp | $ sudo apt-get install ntp | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Sur les versions récentes de Debian (bullseye, bookworm) la version historique du serveur ntp est remplacée par le projet NTPsec : une implémentation sécurisée, | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | apt install -y ntpsec{, | ||
| </ | </ | ||
| Ligne 19: | Ligne 29: | ||
| Le protocole NTP communique en **UDP** sur le **port 123** pour se synchroniser avec les serveurs distants. | Le protocole NTP communique en **UDP** sur le **port 123** pour se synchroniser avec les serveurs distants. | ||
| - | La configuration du serveur se fait via **/ | + | La configuration du serveur se fait via '' |
| - | Une machine | + | < |
| + | server 0.fr.pool.ntp.org | ||
| + | server 1.fr.pool.ntp.org | ||
| + | server 2.fr.pool.ntp.org | ||
| + | server 3.fr.pool.ntp.org | ||
| + | #server 4.ntp.exemple iburst | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Chaque entrée server ou pool peut avoir une option **iburst** qui autorise le service à rattraper rapidement le temps de référence. | ||
| + | </ | ||
| + | |||
| + | La machine exécutant le service est à la fois serveur de temps et cliente de son propre service. On peut avoir également besoin du client | ||
| La configuration du client ntp se fait via / | La configuration du client ntp se fait via / | ||
| Ligne 34: | Ligne 56: | ||
| </ | </ | ||
| - | Pour vérifier l' | + | Pour vérifier l' |
| + | <code bash> | ||
| + | ss -nlpu | ||
| + | </ | ||
| + | |||
| + | La commande **ntpq** (**NTPQ**uery) permet d' | ||
| <code bash> | <code bash> | ||
| $ ntpq -p | $ ntpq -p | ||
| Ligne 51: | Ligne 78: | ||
| interface listen lan | interface listen lan | ||
| </ | </ | ||
| + | |||
| + | ===== Le client ntpdate ===== | ||
| + | |||
| + | Le daemon ntpd resynchronise progressivement le temps du système local par rapport au temps de référence. Si un gros écart est constaté, on peut utiliser l' | ||
| + | |||
| + | < | ||
| + | ntpdate n' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ntpdate ne peut pas s' | ||
| + | <code bash> | ||
| + | [root@www etc]# ntpdate 192.9.200.9 | ||
| + | 24 Apr 17:31:57 ntpdate[9183]: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Pour resynchroniser directement le système, arrêter le daemon ntpd, faire la synchronisation en invoquant ntpdate et relancer le daemon : | ||
| + | |||
| + | <code bash> | ||
| + | [root@www etc]# / | ||
| + | Arrêt de ntpd : [ OK ] | ||
| + | |||
| + | [root@www etc]# ntpdate ntp-server.domain | ||
| + | 24 Apr 17:46:23 ntpdate[12874]: | ||
| + | |||
| + | [root@www etc]# / | ||
| + | Démarrage de ntpd : [ OK ] | ||
| + | </ | ||
| + | |||
| + | ===== Le client sntp ===== | ||
| + | |||
| + | Pour tester la communication avec le serveur depuis le bash, on peut installer le client **sntp**: | ||
| + | <code bash> | ||
| + | # installation du client | ||
| + | sudo apt-install sntp | ||
| + | |||
| + | # test de connexion au serveur | ||
| + | sntp server.fqdn | ||
| + | </ | ||
| + | |||
| + | Toute requête vers le serveur retourne le message: | ||
| + | < | ||
| + | sntp 4.2.8p12@1.3728-o (1) | ||
| + | Can't open KOD db file / | ||
| + | sock_cb: 192.168.33.254 not in sync, skipping this server | ||
| + | </ | ||
| + | |||
| + | Le client n' | ||
| + | |||
| + | < | ||
| + | sntp ntp.phobos.lan | ||
| + | sntp 4.2.8p12@1.3728-o (1) | ||
| + | Can't open KOD db file / | ||
| + | 2022-01-06 19: | ||
| + | </ | ||
| + | |||
| + | ===== Le client sntp de systemd ===== | ||
| + | |||
| + | systemd intègre un client sntp, voir le wiki [[sysadmin: | ||
| + | |||
| + | ===== Paramétrage du pare-feu ===== | ||
| + | |||
| + | Si l'on souhaite contrôler précisément le trafic NTP au travers d'un pare-feu restrictif, il est possible de créer des règles exploitant les ensembles (ipsets). | ||
| + | |||
| + | création d'un ensemble ipset | ||
| + | |||
| + | <code bash> | ||
| + | # création de l' | ||
| + | ipset create set_ntp_servers hash:ip maxelem 64 | ||
| + | |||
| + | # peuplement de l' | ||
| + | dig +short 0.fr.pool.ntp.org | xargs --max-args=1 ipset add set_ntp_servers | ||
| + | dig +short 1.fr.pool.ntp.org | xargs --max-args=1 ipset add set_ntp_servers | ||
| + | dig +short 2.fr.pool.ntp.org | xargs --max-args=1 ipset add set_ntp_servers | ||
| + | dig +short 3.fr.pool.ntp.org | xargs --max-args=1 ipset add set_ntp_servers | ||
| + | |||
| + | </ | ||
| + | |||
| + | Création/ | ||
| + | <code bash> | ||
| + | # Journalise le trafic NTP sortant | ||
| + | iptables -A ufw-after-output -o wan -m set --match-set set_ntp_servers dst -p udp --dport 123 -j ufw-logging-allow | ||
| + | |||
| + | # Autorise le trafic NTP sortant | ||
| + | iptables -A ufw-after-output -o wan -m set --match-set set_ntp_servers dst -p udp --dport 123 -j ACCEPT | ||
| + | </ | ||
| + | |||
| + | Si le système utilise **UFW**, on ne peut pas créer directement de règle exploitant les ipset via la commande **ufw**. Néanmoins il est possible d' | ||
| + | |||
| + | <code bash> | ||
| + | # Rendre le script exécutable pour qu'il soit automatiquement appelé par ufw-init | ||
| + | chmod ug+x / | ||
| + | |||
| + | # Sauvegarder les ensembles existants pour qu'ils puissent être rechargés | ||
| + | ipset save > / | ||
| + | </ | ||
| + | |||
| + | Modifier le fichier **/ | ||
| + | |||
| + | <file bash after.rules> | ||
| + | # | ||
| + | # Copyright 2013 Canonical Ltd. | ||
| + | # | ||
| + | # This program is free software: you can redistribute it and/or modify | ||
| + | # it under the terms of the GNU General Public License version 3, | ||
| + | # as published by the Free Software Foundation. | ||
| + | # | ||
| + | # This program is distributed in the hope that it will be useful, | ||
| + | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| + | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
| + | # GNU General Public License for more details. | ||
| + | # | ||
| + | # You should have received a copy of the GNU General Public License | ||
| + | # along with this program. | ||
| + | # | ||
| + | set -e | ||
| + | |||
| + | case " | ||
| + | start) | ||
| + | # typically required | ||
| + | if [ -r / | ||
| + | then | ||
| + | ipset -f / | ||
| + | # Journalise et autorise le trafic NTP a destination des serveurs des pools *.fr.pool.ntp.org | ||
| + | iptables -A ufw-after-output -o wan -m set --match-set set_ntp_servers dst -p udp --dport 123 -j ufw-logging-allow -m comment --comment " | ||
| + | iptables -A ufw-after-output -o wan -m set --match-set set_ntp_servers dst -p udp --dport 123 -j ACCEPT -m comment --comment " | ||
| + | fi | ||
| + | ;; | ||
| + | stop) | ||
| + | # typically required | ||
| + | ipset destroy | ||
| + | ;; | ||
| + | status) | ||
| + | # optional | ||
| + | ;; | ||
| + | flush-all) | ||
| + | # optional | ||
| + | ;; | ||
| + | *) | ||
| + | echo "' | ||
| + | echo " | ||
| + | ;; | ||
| + | esac | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Troubleshooting ===== | ||
| + | |||
| + | Même après redémarrage du service, le serveur ne semble pas prendre en compte les modifications apportées dans le fichier de configuration **/ | ||
| + | |||
| + | En consultant les traces dans les journaux système, dans ce cas, la ligne de commande indique que le fichier de configuration effectivement utilisé est celui généré par le client DHCP: | ||
| + | < | ||
| + | janv. 06 21:47:56 nucleus systemd[1]: Starting Network Time Service... | ||
| + | janv. 06 21:47:56 nucleus ntpd[14576]: | ||
| + | janv. 06 21:47:56 nucleus ntpd[14576]: | ||
| + | . . . | ||
| + | </ | ||
| + | |||
| + | systemd exécute le script ''/ | ||
| + | |||
| + | Si on stoppe le service, qu'on supprime le fichier et qu'on relance le service, le serveur se comporte comme souhaité et charge le fichier de configuration ''/ | ||
| + | |||
| + | <code bash> | ||
| + | # Arret du serveur NTP | ||
| + | systemctl stop ntp.service | ||
| + | |||
| + | # suppression du fichier de configuration ntp généré par le client DHCP | ||
| + | rm / | ||
| + | |||
| + | # Redémarra du serveur NTP | ||
| + | systemctl start ntp.service | ||
| + | </ | ||
| + | |||
| + | Ci dessous les traces au redémarrage: | ||
| + | < | ||
| + | janv. 06 22:39:52 nucleus systemd[1]: Starting Network Time Service... | ||
| + | janv. 06 22:39:52 nucleus ntpd[20816]: | ||
| + | janv. 06 22:39:52 nucleus ntpd[20816]: | ||
| + | . . . | ||
| + | </ | ||
| + | |||
| + | via la commande **ntpq** on s' | ||
| + | < | ||
| + | ntpq -p -n | ||
| + | | ||
| + | ============================================================================== | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Les pools définis dans le fichier de configuration / | ||
| + | |||
| + | |||
| + | |||
| + | * redéfinir le comportement du client DHCP pour empêcher qu'il modifie le serveur NTP | ||
| + | * redéfinir le service via systemd | ||
| ===== Références ===== | ===== Références ===== | ||
| * https:// | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * [[https:// | ||