Pourquoi ntpd écoute-t-il sur autant de ports / adresses?

18

Je l'ai remarqué depuis un moment, et cela n'a jamais eu de sens pour moi:

Pourquoi ntpdfaut-il écouter autant d'adresses?

Par exemple, une machine Debian:

$ netstat
Adresse locale de Proto Adresse étrangère Nom du programme
udp 0.0.0.0:123 0.0.0.0:* ntpd
udp 127.0.0.1:123 0.0.0.0:* ntpd
udp [LAN]: 123 0.0.0.0:* ntpd
udp [IPv4]: 123 0.0.0.0:* ntpd
udp6 ::: 123 ::: * ntpd
udp6 :: 1: 123 ::: * ntpd
udp6 [lien-local] ::: * ntpd
udp6 [IPv6] ::: * ntpd

Cette liste (expurgée) netstatmontre l' nptdécoute sur les adresses de diffusion, locale, LAN et globale, pour IPv4 et IPv6.

Pourquoi est-ce ntpdsi promiscuité?

Abraham Vegh
la source

Réponses:

15

D'après ma lecture de cette page , il semble que ntp n'utilise pas l' 0.0.0.0adresse INADDR_ANY exclusivement en partie pour des raisons de sécurité et en partie pour des raisons d'authentification.

Le premier port 123 est inférieur à 1024 et est donc considéré comme un port privilégié, et seul root peut se lier à ce port. Ntp est généralement défini pour supprimer les privilèges après son démarrage. D'après ce que je comprends des listes de diffusion, et l'article une fois que les privilèges sont supprimés ne peut pas ouvrir un socket pour répondre à partir du port source correct de 123, donc ntp ouvre des sockets pour chaque adresse affectée avant de supprimer les privilèges.

D'après ce que j'ai lu, certains des mécanismes d'authentification pour ntp nécessitent essentiellement que le port source et de destination soit 123, et rien d'autre.

La question n'est pas tout à fait claire. Voir la section sur l' adresse générique 0.0.0.0 , elle est ouverte par ntpd pour une raison quelconque, mais à partir des commentaires ne devrait jamais être réellement utilisé, sauf dans certains cas rares, dont les développeurs ne sont pas entièrement sûrs, mais ils ne le font pas '' Je ne veux pas retirer la prise, juste au cas où ils casseraient des choses.

Notez que normalement ntpd ne devrait pas accepter de paquets sur les adresses génériques car il y a un certain nombre de problèmes si vous le faites, y compris l'envoi de paquets de retour sur une adresse différente de l'adresse demandée par l'expéditeur. DannyMayer - 27 avr.2009

Je pense que la réponse principale à votre question se trouve dans le commentaire ci-dessus ici.

Zoredache
la source
16

Ce n'est pas du tout une promiscuité. Il se lie simplement aux adresses IP de l'interface et à l'hôte local, à la fois sur les protocoles ipv4 et ipv6. Si vous pensez qu'il ne devrait pas en écouter certains, changez simplement la listenconfiguration comme expliqué dans le manuel (cela peut être pour une version différente que vous utilisez):

 listen on address
         Specify a local IP address or a hostname the ntpd(8) daemon
         should listen on. If it appears multiple times, ntpd(8) will
         listen on each given address. If the exact string '*' is given as
         an address, ntpd(8) will listen on all local addresses. Other-
         wise, address can be followed by an asterisk ('*') and a UDP port
         number to listen on instead of the default 123. ntpd(8) does not
         listen on any address by default. For example:

               listen on *
               listen on 127.0.0.1
               listen on ::1

Dans d'autres versions , vous devrez modifier les options du ntpddémon lui - même au changement de ce que les protocoles / interfaces pour écouter (options comme -4, -6, -I)

coredump
la source
1
Feliz Ano Novo!
user9517
1
Je ne pense pas que cela réponde vraiment à la question. Je pense que la question est essentiellement de savoir pourquoi INADDR_ANYn'est pas utilisé comme presque tous les autres protocoles. L'article
auquel je renvoie
Ce sont des informations très utiles que je voulais savoir, et je vous en remercie, mais la réponse de @ Zoredache répond en fait à la question que j'ai posée, donc je l'ai marquée comme réponse. Des votes positifs tout autour, cependant. ;)
Abraham Vegh