Warum hört ntpd so viele Ports / Adressen ab?

18

Das ist mir schon eine Weile aufgefallen und hat für mich nie einen Sinn ergeben:

Warum ntpdmüssen so viele Adressen abgehört werden?

Zum Beispiel eine Debian-Maschine:

$ netstat
Proto Local Address Fremde Adresse Programmname
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

Diese (überarbeitete) netstatAuflistung zeigt das nptdAbhören von Broadcast-, lokalen, LAN- und globalen Adressen für IPv4 und IPv6.

Warum ist ntpdso promiskuitiv?

Abraham Vegh
quelle

Antworten:

15

Aus meiner Lektüre dieser Seite geht hervor , dass ntp die 0.0.0.0Adresse INADDR_ANY nicht ausschließlich zum Teil aus Sicherheitsgründen und zum Teil aus Gründen der Authentifizierung verwendet.

Der erste Port 123 liegt unter 1024 und wird daher als privilegierter Port betrachtet, und nur Root kann eine Bindung an diesen Port herstellen. Ntp ist normalerweise so eingestellt, dass Berechtigungen nach dem Start gelöscht werden. Nach dem, was ich aus den Mail-Listen verstehe, und dem Artikel, in dem die Berechtigungen gelöscht wurden, kann kein Socket geöffnet werden, um vom richtigen Quellport 123 aus zu antworten. Daher öffnet ntp Sockets für jede zugewiesene Adresse, bevor Berechtigungen gelöscht werden.

Nach dem, was ich gelesen habe, setzen einige der Authentifizierungsmechanismen für ntp grundsätzlich voraus, dass der Quell- und Zielport 123 ist, und sonst nichts.

Die Sache ist nicht ganz klar. Siehe den Abschnitt über die Wildcard-Adresse 0.0.0.0 , die aus irgendeinem Grund von ntpd geöffnet wird, aber aus den Kommentaren sollte eigentlich nie verwendet werden, es sei denn, dies ist in einigen besonderen seltenen Fällen möglich, bei denen sich die Entwickler nicht ganz sicher sind, aber sie tun es nicht. Ich möchte den Sockel nicht entfernen, nur für den Fall, dass etwas kaputt geht.

Beachten Sie, dass ntpd normalerweise keine Pakete auf den Platzhalteradressen akzeptieren sollte, da es eine Reihe von Problemen gibt, wenn Sie dies tun, einschließlich des Sendens von Rückpaketen auf einer anderen Adresse als der vom Absender angeforderten Adresse. DannyMayer - 27. April 2009

Ich denke, die Hauptantwort auf Ihre Frage ist der obige Kommentar hier.

Zoredache
quelle
16

Es ist überhaupt nicht promiskuitiv. Es ist nur an die Schnittstellen-IP-Adressen und den Localhost gebunden, sowohl bei IPv4- als auch bei IPv6-Protokollen. Wenn Sie der Meinung sind, dass einige von ihnen nicht zu hören sind, ändern Sie einfach die listenKonfiguration wie im Handbuch beschrieben (dies kann für eine andere Version gelten, die Sie verwenden):

 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

In einigen anderen Versionen müssen Sie die Optionen , um die sich ändern ntpdDaemon selbst zu ändern, was Protokolle / Schnittstellen zu hören (Optionen wie -4, -6, -I)

Core-Dump
quelle
1
Feliz Ano Novo!
user9517 unterstützt GoFundMonica
1
Ich denke, das beantwortet die Frage nicht wirklich. Ich denke, die Frage ist im Grunde, warum INADDR_ANYnicht wie bei fast jedem anderen Protokoll verwendet wird. Der Artikel, auf den ich in meiner Antwort verweise, scheint zu verdeutlichen, dass es sich zum Teil um ein Sicherheitsmerkmal handelt und zum Teil so, wie das Protokoll Antworten auf Port 123 erwartet.
Zoredache,
Dies sind sehr nützliche Informationen, die ich wissen wollte, und ich danke Ihnen dafür, aber die Antwort von @ Zoredache beantwortet tatsächlich die Frage, die ich gestellt habe, und ich habe sie als Antwort markiert. Upvotes jedoch überall. ;)
Abraham Vegh