Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
sysadmin:linux:serveur-ntp [2018/07/18 12:25] – yoann | sysadmin:linux:serveur-ntp [2022/01/08 18:48] (Version actuelle) – yoann | ||
---|---|---|---|
Ligne 19: | Ligne 19: | ||
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 **/ |
+ | |||
+ | < | ||
+ | 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. | 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. | ||
Ligne 34: | Ligne 46: | ||
</ | </ | ||
- | 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 52: | Ligne 69: | ||
</ | </ | ||
- | ===== ntpdate ===== | + | ===== Le client |
- | 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 peu utiliser l' | + | 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' |
< | < | ||
Ligne 80: | Ligne 97: | ||
Démarrage de ntpd : [ OK ] | 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:// |