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

17

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

Por que o ntpd precisa ouvir em tantos endereços?

Por exemplo, uma máquina Debian:

$ netstat
Proto Local Address Foreign Address Program name
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 netstat mostra nptd de escuta nos endereços broadcast, local, LAN e global, para IPv4 e IPv6.

Por que ntpd é tão promíscuo?

    
por Abraham Vegh 03.01.2013 / 15:45

2 respostas

15

A partir da minha leitura desta página , parece que o ntp não usa o INADDR_ANY 0.0.0.0 endereço exclusivamente em parte por razões 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 se ligar a essa porta. Normalmente, o NTP é configurado para descartar privilégios após ser iniciado. Pelo que eu entendo das listas de e-mail, e o artigo uma vez que os privilégios são descartados não é possível abrir um soquete para responder da porta de origem correta de 123, então o ntp abre soquetes para cada endereço atribuído antes de descartar privilégios.

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

O assunto não está totalmente claro. Veja a seção sobre o endereço curinga 0.0.0.0 , ele é aberto pelo ntpd por algum motivo, mas os comentários nunca devem ser realmente usados, exceto possíveis em alguns casos raros especiais, que os devs não têm certeza, mas eles não querem remover o soquete, caso eles quebrem as coisas.

Note that normally ntpd should not be accepting packets on the wildcard addresses since there are a number of problems if you do so including sending return packets on a different address from the sender's requested address. DannyMayer - 27 Apr 2009

Acho que a principal resposta à sua pergunta está no comentário acima aqui.

    
por 03.01.2013 / 19:28
16

Não é nada promíscuo. É apenas vinculativo para os endereços IP da interface e para o localhost, ambos nos protocolos ipv4 e ipv6. Se você acha que não deveria estar ouvindo alguns deles, apenas mude o listen config como 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 daemon ntpd para alterar os protocolos / interfaces a serem ouvidos (opções como -4 , -6 , -I )

    
por 03.01.2013 / 15:55