{{tag>sysadmin netadmin linux ntp service config}} ====== Installer serveur ntp ====== **NTP**((**N**etwork **T**ime **P**rotocol)) permet de distribuer l'heure sur le réseau. L'heure du système impacte le fonctionnement de nombreux services. Une heure locale fortement décalée peut perturber/interrompre le fonctionnement normal de certains services notamment: * https * cache DNS 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 ===== $ sudo apt-get install ntp ===== Configuration ===== Le protocole NTP communique en **UDP** sur le **port 123** pour se synchroniser avec les serveurs distants. La configuration du serveur se fait via **/etc/ntp.conf**. Ici on définit les serveurs de référence: 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. Une machine peut être à la fois serveur de temps et cliente de son propre service, dans ce cas **ntpd** assure le service et **ntpdate** le rôle de client. La configuration du client ntp se fait via /etc/ntpdate.conf ===== Gestion du service ===== Après modification du fichier de configuration, redémarrer le service ntp à l'aide de la commande service: $ sudo service ntp restart Pour vérifier l'état du serveur NTP: ss -nlpu La commande **ntpq** (**NTPQ**uery) permet d'afficher la liste des serveurs distants $ ntpq -p L'option **-p** permet de lister les serveurs pairs. Si les valeurs des colonnes reach, delay offset, jitter sont à 0, la communication avec les serveurs n'est pas établie. Vérifier la configuration du serveur et du réseau. Si le serveur écoute sur toutes les interfaces, vérifier la présence de la directive **interface**: 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'utilitaire **ntpdate** qui se chargera de resynchroniser directement le temps du système local. ntpdate n'utilise pas le fichier de configuration /etc/ntp.conf, il faut donc préciser avec quel serveur on souhaite synchroniser le système. Sans cet argument on obtient une erreur. ntpdate ne peut pas s'utiliser si le daemon ntpd s'exécute, on obtient alors le message suivant : [root@www etc]# ntpdate 192.9.200.9 24 Apr 17:31:57 ntpdate[9183]: the NTP socket is in use, exiting Pour resynchroniser directement le système, arrêter le daemon ntpd, faire la synchronisation en invoquant ntpdate et relancer le daemon : [root@www etc]# /etc/init.d/ntpd stop Arrêt de ntpd : [ OK ] [root@www etc]# ntpdate ntp-server.domain 24 Apr 17:46:23 ntpdate[12874]: step time server ntp-server.domain offset 499.818895 sec [root@www etc]# /etc/init.d/ntpd start Démarrage de ntpd : [ OK ] ===== Le client sntp ===== Pour tester la communication avec le serveur depuis le bash, on peut installer le client **sntp**: # 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 /var/lib/sntp/kod for writing: Permission denied sock_cb: 192.168.33.254 not in sync, skipping this server Le client n'utilise pas le serveur car celui-ci n'est pas correctement synchronisé. Revoir les paramétrages du serveur. sntp ntp.phobos.lan sntp 4.2.8p12@1.3728-o (1) Can't open KOD db file /var/lib/sntp/kod for writing: Permission denied 2022-01-06 19:35:32.058110 (-0100) +0.906487 +/- 0.678315 ntp.phobos.lan 192.168.33.254 s4 no-leap ===== Le client sntp de systemd ===== systemd intègre un client sntp, voir le wiki [[sysadmin:linux:systemd:synchronisation-du-temps| synchronisation du temps par systemd]]. ===== 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 # création de l'ensemble ipset create set_ntp_servers hash:ip maxelem 64 # peuplement de l'ensemble avec les adresses des serveurs 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/test des règles netfilter # 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'intégrer des règles iptables au framework UFW en les ajoutant dans le fichier **/etc/ufw/after.rules**. Ce fichier script, s'il est exécutable est utilisé par lors du démarrage/arrêt du pare-feu UFW. # Rendre le script exécutable pour qu'il soit automatiquement appelé par ufw-init chmod ug+x /etc/ufw/after.rules # Sauvegarder les ensembles existants pour qu'ils puissent être rechargés ipset save > /etc/ufw/sets.ipset Modifier le fichier **/etc/ufw/after.rules**, dans la section start, on reconstruit les ensembles ipset à partir du fichier de sauvegarde puis on crée les règles via les appels **iptable**. Dans la section stop, les ensembles sont détruits. # # 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. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # set -e case "$1" in start) # typically required if [ -r /etc/ufw/sets.ipset ] then ipset -f /etc/ufw/sets.ipset restore # 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 "Autorise trafic NTP vers fr.pool.ntp.org" iptables -A ufw-after-output -o wan -m set --match-set set_ntp_servers dst -p udp --dport 123 -j ACCEPT -m comment --comment "Autorise trafic NTP vers fr.pool.ntp.org" fi ;; stop) # typically required ipset destroy ;; status) # optional ;; flush-all) # optional ;; *) echo "'$1' not supported" echo "Usage: after.init {start|stop|flush-all|status}" ;; 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 **/etc/ntp.conf** 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]: ntpd 4.2.8p15@1.3728-o Wed Sep 23 11:46:38 UTC 2020 (1): Starting janv. 06 21:47:56 nucleus ntpd[14576]: Command line: /usr/sbin/ntpd -p /var/run/ntpd.pid -g -c /run/ntp.conf.dhcp -u 116:122 . . . systemd exécute le script ''/usr/lib/ntp/ntp-systemd-wrapper''. Dans ce script, si un fichier ''/run/ntp.conf.dhcp'' existe, il est utilisé comme fichier de configuration. 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 ''/etc/ntp.conf''. # Arret du serveur NTP systemctl stop ntp.service # suppression du fichier de configuration ntp généré par le client DHCP rm /run/ntp.conf.dhcp # 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]: ntpd 4.2.8p15@1.3728-o Wed Sep 23 11:46:38 UTC 2020 (1): Starting janv. 06 22:39:52 nucleus ntpd[20816]: Command line: /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 116:122 . . . via la commande **ntpq** on s'assure que les pools définis dans la configuration sont à présent utilisés: ntpq -p -n remote refid st t when poll reach delay offset jitter ============================================================================== 0.fr.pool.ntp.o .POOL. 16 p - 64 0 0.000 +0.000 0.000 1.fr.pool.ntp.o .POOL. 16 p - 64 0 0.000 +0.000 0.000 2.fr.pool.ntp.o .POOL. 16 p - 64 0 0.000 +0.000 0.000 3.fr.pool.ntp.o .POOL. 16 p - 64 0 0.000 +0.000 0.000 162.159.200.1 10.19.12.255 3 u 31 64 1 13.507 -396.96 0.000 37.187.5.167 131.188.3.222 2 u 31 64 1 17.812 -397.75 0.000 151.80.211.8 212.83.158.83 3 u 32 64 1 16.706 -396.85 0.000 Les pools définis dans le fichier de configuration /etc/ntp.conf sont bien utilisés après suppression du fichier /run/ntp.conf.dhcp cependant la modification n'est que temporaire car il sera recréé et reutilisé au prochain démarrage. * 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 ===== * https://doc.ubuntu-fr.org/ntp * https://www.pool.ntp.org/zone/fr * https://docs.ntpsec.org/latest/ntp_conf.html