¿Por qué ntpd escucha en tantos puertos / direcciones?

18

He notado esto por un tiempo, y nunca tuvo sentido para mí:

¿Por qué ntpdnecesita escuchar en tantas direcciones?

Por ejemplo, una máquina Debian:

$ netstat
Proto Dirección local Dirección extranjera Nombre del programa
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 [link-local] ::: * ntpd
udp6 [IPv6] ::: * ntpd

Esta lista (redactada) netstatmuestra la nptdescucha en la transmisión, local, LAN y direcciones globales, para IPv4 e IPv6.

¿Por qué es ntpdtan promiscuo?

Abraham Vegh
fuente

Respuestas:

15

Según mi lectura de esta página , parece que ntp no usa la 0.0.0.0dirección INADDR_ANY exclusivamente en parte por razones de seguridad y en parte por motivos de autenticación.

El primer puerto 123, está por debajo de 1024, por lo que se considera un puerto privilegiado, y solo el root puede unirse a ese puerto. Ntp generalmente está configurado para quitar privilegios después de que se inicia. Por lo que entiendo de las listas de correo, y el artículo una vez que se eliminan los privilegios no se puede abrir un socket para responder desde el puerto de origen correcto de 123, por lo que ntp abre sockets para cada dirección asignada antes de que se caigan los privilegios.

Por lo que he leído, algunos de los mecanismos de autenticación para ntp básicamente requieren que el puerto de origen y destino sea 123, y nada más.

El asunto no está del todo claro. Consulte la sección sobre la dirección comodín 0.0.0.0 , ntpd la abre por algún motivo, pero a partir de los comentarios nunca debería usarse, excepto posible en algunos casos especiales especiales, de los que los desarrolladores no están completamente seguros, pero no lo hacen. No quiero quitar el zócalo, en caso de que rompan cosas.

Tenga en cuenta que normalmente ntpd no debería aceptar paquetes en las direcciones comodín, ya que existen varios problemas si lo hace, incluido el envío de paquetes de devolución en una dirección diferente de la dirección solicitada por el remitente. DannyMayer - 27 abr 2009

Creo que la respuesta principal a su pregunta está en el comentario anterior aquí.

Zoredache
fuente
16

No es promiscuo en absoluto. Simplemente se vincula a las direcciones IP de la interfaz y al host local, tanto en los protocolos ipv4 como ipv6. Si cree que no debería estar escuchando algunos de ellos, simplemente cambie la listenconfiguración como se explica en el manual (esto puede ser para una versión diferente que está utilizando):

 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

En algunas otras versiones que tendrá que cambiar las opciones para el ntpdmismo demonio a cambio de qué protocolos / interfaces para escuchar (opciones como -4, -6, -I)

volcado de memoria
fuente
1
Feliz Ano Novo!
user9517
1
No creo que esto realmente responda la pregunta. Creo que la pregunta es básicamente por qué INADDR_ANYno se usa como casi cualquier otro protocolo. El artículo al que enlazo en mi respuesta parece aclarar que es en parte una característica de seguridad y en parte la forma en que el protocolo está diseñado para esperar respuestas en el puerto 123.
Zoredache
Esta es una información muy útil que quería saber, y se lo agradezco, pero la respuesta de @ Zoredache en realidad responde a la pregunta que hice, así que la marqué como la respuesta. Votos a favor, sin embargo. ;)
Abraham Vegh