Чому ntpd слухає стільки портів / адрес?


18

Я це помічав деякий час, і мені це ніколи не було сенсу:

Чому ntpdпотрібно слухати стільки адрес?

Наприклад, машина Debian:

$ netstat
Назва місцевої адреси іноземної адреси прото
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

Цей (відредагований) netstatперелік показує nptdпрослуховування трансляцій, локальних, локальних та глобальних адрес для IPv4 та IPv6.

Чому ntpdтак розбещено?

Відповіді:


15

З мого читання цієї сторінки виходить, що ntp не використовує адресу INADDR_ANY 0.0.0.0виключно частково з міркувань безпеки та частково з міркувань автентичності.

Перший порт 123 знаходиться нижче 1024, і тому вважається привілейованим портом, і лише корінь може прив'язуватися до цього порту. Ntp, як правило, встановлюється для скидання привілеїв після його запуску. З того, що я розумію з списків пошти, і стаття, коли привілеї скасовані, не може відкрити сокет для відповіді з правильного порту джерела 123, тому ntp відкриває сокети для кожної призначеної адреси, перш ніж вона скасує привілеї.

З того, що я прочитав деякі механізми аутентифікації для ntp, в основному потрібно, щоб вихідний порт і порт призначення були 123, і більше нічого.

Справа не зовсім зрозуміла. Дивіться розділ про підстановочну адресу 0.0.0.0 , він відкривається ntpd чомусь, але з коментарів насправді ніколи не слід використовувати, за винятком можливих в деяких особливих рідкісних випадках, про те, що розробники не зовсім впевнені, але вони не роблять ' не хочете вийняти розетку, на всякий випадок, якщо вони зламають щось.

Зауважте, що, як правило, ntpd не повинен приймати пакети за адресами підстановки, оскільки це є низка проблем, якщо ви робите це, включаючи відправлення зворотних пакетів за іншою адресою від запитуваної адреси відправника. DannyMayer - 27 квітня 2009 року

Я думаю, що головна відповідь на ваше запитання - у вищенаведеному коментарі тут.


16

Це зовсім не розбещено. Це просто прив'язка до IP-адрес інтерфейсу та localhost, як у протоколах ipv4, так і ipv6. Якщо ви вважаєте, що не слід слухати деякі з них, просто змініть listenконфігурацію, як пояснено в посібнику (це може бути для іншої версії, яку ви використовуєте):

 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

У деяких інших версіях вам потрібно буде змінити параметри для ntpdсамого демона до зміни на те , що протоколи / інтерфейси для прослуховування ( такі опції , як -4, -6, -I)


1
Феліз Ано Ново!
користувач9517

1
Я не думаю, що це дійсно відповідає на питання. Я думаю, що в основному питання задає, чому INADDR_ANYйого не використовують, як майже кожен інший протокол. Стаття, на яку я посилаюсь у своїй відповіді, начебто дає зрозуміти, що це частково функція захисту, а почасти так, як розроблено протокол, щоб очікувати відповідей на порт 123.
Zoredache

Це дуже корисна інформація, яку я хотів знати, і я дякую вам за це, але відповідь @ Зоредаче насправді відповідає на запитання, яке я задав, тому я позначив її як відповідь. Однак оновлює все навколо. ;)
Авраам Вег
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.