OVH Cloud OVH Cloud

ntp : configurer une machine pour être « client uniquement »

4 réponses
Avatar
Francois Lafont
Bonjour à tous,

Je voudrais configurer ntp sur une Debian Wheezy (mais je suppose
que mon problème sera le même sur toute autre distribution utilisant
ntp) de manière à ce que la machine se synchronise bien sur les
serveurs de temps que j'indiquerai dans le fichier /etc/ntp.conf
mais qu'en revanche on ne puisse pas se synchroniser sur la
machine en question. C'est en ce sens là que j'entends « client
uniquement » (la machine ne propose pas le service ntp aux autres,
elle utilise ce service seulement pour se mettre à l'heure elle
et c'est tout).

Ma question précisément est : peut-on faire cela en passant par la
configuration de ntp uniquement ?

Si la réponse est non alors j'imagine qu'il faut forcément passer
par une mise en place de règles iptables ?

Au départ, je pensais que ces instructions dans le fichier
/etc/ntp.conf allaient faire ce que je souhaite :

interface ignore wildcard
interface listen 127.0.0.1

où après un restart du service ntp, j'ai :

~# netstat -lnup | grep ntp
udp 0 0 127.0.0.1:123 0.0.0.0:* 4718/ntpd

On voit bien que le service ntp n'écoute plus que sur l'interface lo.
Mais seulement, ça ne marche pas car ntp ne joue même plus son
rôle de « client » et la machine ne se synchronise plus sur les
serveurs :

~# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
5.135.182.139 .INIT. 16 - - 64 0 0.000 0.000 0.000
212.83.174.163 .INIT. 16 - - 64 0 0.000 0.000 0.000
81.64.24.147 .INIT. 16 - - 64 0 0.000 0.000 0.000
178.33.111.47 .INIT. 16 - - 64 0 0.000 0.000 0.000

Comme si, pour être « client » ntp, le service devait malgré tout être
à l'écoute sur des adresses accessibles aux serveurs de temps sur lesquels
on souhaite se synchroniser. Je pensais que, pour être un simple client,
il n'était pas nécessaire que le service écoute sur telle ou telle adresse.
Les choses sont manifestement pour compliquées que ça.

Merci d'avance pour votre aide.


--
François Lafont

4 réponses

Avatar
Eric Masson
Francois Lafont writes:

'Lut,

Ma question précisément est : peut-on faire cela en passant par la
configuration de ntp uniquement ?



http://support.ntp.org/bin/view/Support/AccessRestrictions

--
Qui pourrait me dire s'il y a un astuce afin d'utiliser outlook pour
envoyer un email automatiquement à partir d'un formulaire crée dans une
page html, ouvert avec ie4.
-+- E in Guide du Neuneu Usenet : Jusqu'où ira neuneu avec Micro$oft -+-
Avatar
Joe The Smoe
Le 09/09/2014 12:31, Francois Lafont a écrit :
Bonjour à tous,

Je voudrais configurer ntp sur une Debian Wheezy (mais je suppose
que mon problème sera le même sur toute autre distribution utilisant
ntp) de manière à ce que la machine se synchronise bien sur les
serveurs de temps que j'indiquerai dans le fichier /etc/ntp.conf
mais qu'en revanche on ne puisse pas se synchroniser sur la
machine en question. C'est en ce sens là que j'entends « client
uniquement » (la machine ne propose pas le service ntp aux autres,
elle utilise ce service seulement pour se mettre à l'heure elle
et c'est tout).

Ma question précisément est : peut-on faire cela en passant par la
configuration de ntp uniquement ?



oui:

#> cat /etc/ntp.conf

# par défaut on configure toutes les interfaces IPv4 et IPv6
# pour qu'elles ignorent tous les paquets NTP (sauf ceux reçu en réponse
# à une requete)
restrict -4 default notrap nomodify nopeer noquery
restrict -6 default notrap nomodify nopeer noquery

# dérogation pour les interfaces loopback en IPv4 et IPv6, on autorise
# uniquement les requêtes ntpq et ntpdc depuis l'hôte local (noserve)
# et uniquement celles qui ne modifient pas la configuration (nomodify)
restrict 127.0.0.1 noserve nomodify
restrict ::1 noserve nomodify

# soit on configure un ou plusieurs serveurs en dur xxxx = nom ou IP
server xxxxx iburst

# sinon un jeu de serveurs dynamiquement choisis dans un réservoir,
# par exemple:
pool fr.pool.ntp.org

# toujours utile lors du prochain redémarrage de partir sur la
# dernière valeur de dérive :
driftfile /var/lib/ntp/ntp.drift

# après on pourra éventuellement jouer avec la commande 'tos' pour
# peaufiner le comportement de ntpd:
#tos maxclock 6
#tos ceiling 4
#tos floor 2
#tos orphan 14
#tos ...etc.

#>



Si la réponse est non alors j'imagine qu'il faut forcément passer
par une mise en place de règles iptables ?



iptables permettra serait un plus : les paquets reçus sont ignorés par
ntpd mais reçus quand même, si ntpd a une vulnérabilité on peut imaginer
qu'une personne mal intentionnée puisse à distance envoyer une séquence
de paquet d'une certaine sorte pour planter le serveur (deni de service)
ou pire faire exécuter du code à ntp, comme ntp tourne en tant que root
(pour pouvoir modifier l'horloge), c'est une risque à ne pas négliger.

avec iptables en place, les paquets ne sont même pas vu par ntpd....
ceci dit si iptables avait un bug, ils pourraient arriver au daemon
ntpd, qui s'il est bien configuré ignorera les paquets.... à moins qu'il
soit buggé lui aussi, ... mais là ca fait double bug donc c'est encore
moins probable... mais comme en matière de sécurité on ne peut jamais
dire c'est sécurisé,... mieux vaut être prudent, ceinture et bretelles. :)


Au départ, je pensais que ces instructions dans le fichier
/etc/ntp.conf allaient faire ce que je souhaite :

interface ignore wildcard



la directive "ignore", ignore tous les paquets reçus, même les réponses
aux requêtes...

interface listen 127.0.0.1

où après un restart du service ntp, j'ai :

~# netstat -lnup | grep ntp
udp 0 0 127.0.0.1:123 0.0.0.0:* 4718/ntpd

On voit bien que le service ntp n'écoute plus que sur l'interface lo.
Mais seulement, ça ne marche pas car ntp ne joue même plus son
rôle de « client » et la machine ne se synchronise plus sur les
serveurs :

~# ntpq -pn
remote refid st t when poll reach delay offset jitter
============================================================================= > 5.135.182.139 .INIT. 16 - - 64 0 0.000 0.000 0.000
212.83.174.163 .INIT. 16 - - 64 0 0.000 0.000 0.000
81.64.24.147 .INIT. 16 - - 64 0 0.000 0.000 0.000
178.33.111.47 .INIT. 16 - - 64 0 0.000 0.000 0.000

Comme si, pour être « client » ntp, le service devait malgré tout être
à l'écoute sur des adresses accessibles aux serveurs de temps sur lesquels
on souhaite se synchroniser. Je pensais que, pour être un simple client,
il n'était pas nécessaire que le service écoute sur telle ou telle adresse.
Les choses sont manifestement pour compliquées que ça.



ntp utilise UDP, il n'y a pas de notion de session, la socket ouverte
doit recevoir des paquets individuellement, c'est le contenu de chaque
paquet qui détermine si c'est une réponse à une requête ou une requête à
laquelle il faut répondre.

iptable sait heureusement lire le contenu applicatif ntp est peut
rejeter les requêtes entrantes et laisser passer les réponses aux
requêtes émises.


Merci d'avance pour votre aide.





Do rien :)
Avatar
Pascal
Le 09/09/2014 12:31, Francois Lafont a écrit :
Bonjour à tous,

Je voudrais configurer ntp sur une Debian Wheezy (mais je suppose
que mon problème sera le même sur toute autre distribution utilisant
ntp) de manière à ce que la machine se synchronise bien sur les
serveurs de temps que j'indiquerai dans le fichier /etc/ntp.conf
mais qu'en revanche on ne puisse pas se synchroniser sur la
machine en question. C'est en ce sens là que j'entends « client
uniquement » (la machine ne propose pas le service ntp aux autres,
elle utilise ce service seulement pour se mettre à l'heure elle
et c'est tout).

Ma question précisément est : peut-on faire cela en passant par la
configuration de ntp uniquement ?

Si la réponse est non alors j'imagine qu'il faut forcément passer
par une mise en place de règles iptables ?

Au départ, je pensais que ces instructions dans le fichier
/etc/ntp.conf allaient faire ce que je souhaite :

interface ignore wildcard
interface listen 127.0.0.1

où après un restart du service ntp, j'ai :

~# netstat -lnup | grep ntp
udp 0 0 127.0.0.1:123 0.0.0.0:* 4718/ntpd

On voit bien que le service ntp n'écoute plus que sur l'interface lo.
Mais seulement, ça ne marche pas car ntp ne joue même plus son
rôle de « client » et la machine ne se synchronise plus sur les
serveurs :

~# ntpq -pn
remote refid st t when poll reach delay offset jitter
============================================================================= > 5.135.182.139 .INIT. 16 - - 64 0 0.000 0.000 0.000
212.83.174.163 .INIT. 16 - - 64 0 0.000 0.000 0.000
81.64.24.147 .INIT. 16 - - 64 0 0.000 0.000 0.000
178.33.111.47 .INIT. 16 - - 64 0 0.000 0.000 0.000

Comme si, pour être « client » ntp, le service devait malgré tout être
à l'écoute sur des adresses accessibles aux serveurs de temps sur lesquels
on souhaite se synchroniser. Je pensais que, pour être un simple client,
il n'était pas nécessaire que le service écoute sur telle ou telle adresse.
Les choses sont manifestement pour compliquées que ça.

Merci d'avance pour votre aide.




openntpd ?
Avatar
Francois Lafont
Bonjour à tous,

Désolé pour ma réponse tardive, je n'ai pas eu temps de répondre
plus tôt. Merci à vous 3 pour vos réponses qui m'ont permis de
résoudre mon problème.

Bon j'avoue, je n'ai pas regardé openntpd car avec les éléments
précédents sur ntp, j'ai pu arriver à ce que je veux. C'est
donc avec l'instruction "restrict" que j'ai pu faire ça (au
passage, sur ma Wheezy, je n'ai rien trouvé sur cette instruction
quand même assez importante dans la page man de ntp.conf).

Voici une conf qui fait ce que je veux :

---------------------------------------
# En supposant que mon hôte a plusieurs interfaces, je
# force ntpd à n'écouter que sur eth1 (et lo).
interface ignore wildcard
interface listen eth1

driftfile /var/lib/ntp/ntp.drift


# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# Ici je choisis un serveur sur lequel mon hôte va
# se synchroniser. Je pourrais en prendre plusieurs.
server 192.168.0.254 iburst

# La règle par défaut est d'ignorer tous les paquets
# ntp (aussi bien en ipv4 qu'en ipv6).
restrict -4 default ignore
restrict -6 default ignore


# À ce stade, mon hôte n'arrivera même pas à communiquer
# avec le serveur ntp sur lequel il est censé se synchroniser
# à cause des règles par défaut ci-dessus. Un peu comme avec
# iptables, on autorise rien par défaut et toute ce qui est
# autorisé devra être explicitement indiqué.
# Il faut donc ajouter une exception pour chaque serveur de
# référence (dans mon cas j'en ai qu'un seul 192.168.0.254).

# Autorisation d'une communication avec 192.168.0.254
# afin que mon hôte puis se synchroniser sur lui.
restrict 192.168.0.254 kod notrap nomodify nopeer noquery

# Pour qu'on puisse faire du monitoring de ntp (via ntpq etc.)
# en étant sur l'hôte lui-même.
restrict 127.0.0.1
restrict ::1
---------------------------------------

Et voilà. J'aurais alors un service ntpd qui se synchronisera
sur 192.168.0.254 mais aucune machine ne pourra synchroniser
son heure sur mon service ntp.

Merci pour votre aide.

--
François Lafont