Por que o ntpd escuta em tantas portas / endereços?

18

Eu notei isso por um tempo, e isso nunca fez sentido para mim:

Por que ntpdprecisa ouvir em tantos endereços?

Por exemplo, uma máquina Debian:

$ netstat
Proteger endereço local Endereço estrangeiro Nome do 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

Essa lista (editada) netstatmostra a nptdescuta nos endereços de broadcast, local, LAN e global, para IPv4 e IPv6.

Por que é ntpdtão promíscuo?

Abraham Vegh
fonte

Respostas:

15

Pela minha leitura desta página , parece que o ntp não usa o 0.0.0.0endereço INADDR_ANY exclusivamente em parte por motivos de segurança e em parte por motivos de autenticação.

A primeira porta 123 está abaixo de 1024 e, portanto, é considerada uma porta privilegiada, e somente o root pode ligar-se a essa porta. O NTP normalmente está definido para eliminar privilégios após o início. Pelo que entendi nas listas de e-mail, e o artigo depois que os privilégios são eliminados não é possível abrir um soquete para responder da porta de origem correta 123, então o ntp abre soquetes para todos os endereços atribuídos antes que eles eliminem privilégios.

Pelo que li, alguns dos mecanismos de autenticação para o ntp exigem basicamente que a porta de origem e destino seja 123 e nada mais.

O assunto não está totalmente claro. Consulte a seção sobre o endereço curinga 0.0.0.0 , que é aberto pelo ntpd por algum motivo, mas a partir dos comentários nunca deve ser realmente usado, exceto possível em alguns casos raros especiais, sobre os quais os desenvolvedores não têm certeza, mas não sabem ' não quero remover o soquete, para o caso de quebrar coisas.

Observe que normalmente o ntpd não deve aceitar pacotes nos endereços curinga, pois existem vários problemas, se você o fizer, incluindo o envio de pacotes de retorno em um endereço diferente do endereço solicitado pelo remetente. DannyMayer - 27 de abril de 2009

Eu acho que a principal resposta para sua pergunta está no comentário acima aqui.

Zoredache
fonte
16

Não é nada promíscuo. É apenas vinculativo aos endereços IP da interface e ao host local, ambos nos protocolos ipv4 e ipv6. Se você acha que não deve ouvir algumas delas, basta alterar a listenconfiguração conforme explicado no manual (pode ser para uma versão diferente que você está usando):

 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

Em algumas outras versões você precisará alterar as opções para o ntpdpróprio daemon à mudança no que protocolos / interfaces para ouvir (opções como -4, -6, -I)

coredump
fonte
1
Feliz Ano Novo!
precisa saber é o seguinte
1
Eu não acho que isso realmente responda à pergunta. Eu acho que a pergunta é basicamente perguntar por que INADDR_ANYnão está sendo usado como quase todos os outros protocolos. O link para o artigo I na minha resposta parece deixar claro, que é em parte um recurso de segurança, e em parte a forma como o protocolo é o projeto que esperar respostas sobre porta 123.
Zoredache
Esta é uma informação muito útil que eu queria saber, e agradeço por isso, mas a resposta do @ Zoredache realmente responde à pergunta que eu fiz, então a marquei como resposta. Upvotes ao redor, no entanto. ;)
Abraham Vegh