Mengapa ntpd mendengarkan banyak port / alamat?

18

Saya telah memperhatikan ini untuk sementara waktu, dan itu tidak pernah masuk akal bagi saya:

Mengapa ntpdperlu mendengarkan banyak alamat?

Misalnya, mesin Debian:

$ netstat
Proto Local Address Alamat Asing Nama program
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 [tautan-lokal] ::: * ntpd
udp6 [IPv6] ::: * ntpd

Daftar ini (dihapus) netstatmenunjukkan nptdmendengarkan pada siaran, alamat lokal, LAN, dan global, untuk IPv4 dan IPv6.

Mengapa ntpdbegitu bebas memilih?

Abraham Vegh
sumber

Jawaban:

15

Dari pembacaan saya tentang halaman ini , ntp tampaknya tidak menggunakan 0.0.0.0alamat INADDR_ANY sebagian karena alasan keamanan, dan sebagian untuk alasan otentikasi.

Port pertama 123, di bawah 1024, dan dianggap sebagai port istimewa, dan hanya root yang dapat mengikat ke port itu. Ntp biasanya diatur untuk menjatuhkan hak istimewa setelah dimulai. Dari apa yang saya pahami dari daftar mail, dan artikel setelah privilege dijatuhkan tidak dapat membuka soket untuk membalas dari port sumber yang benar dari 123, jadi ntp membuka soket untuk setiap alamat yang ditugaskan sebelum menjatuhkan privilege.

Dari apa yang saya baca beberapa mekanisme otentikasi untuk ntp pada dasarnya mengharuskan sumber dan port tujuan menjadi 123, dan tidak ada yang lain.

Masalahnya tidak sepenuhnya jelas. Lihat bagian tentang alamat wildcard 0.0.0.0 , dibuka oleh ntpd untuk beberapa alasan, tetapi dari komentar seharusnya tidak pernah benar-benar digunakan, kecuali mungkin dalam beberapa kasus langka yang khusus, bahwa para devs tidak sepenuhnya yakin tentang, tetapi, mereka tidak t ingin melepas soket, kalau-kalau mereka merusak barang-barang.

Perhatikan bahwa biasanya ntpd tidak boleh menerima paket pada alamat wildcard karena ada sejumlah masalah jika Anda melakukannya termasuk mengirim paket kembali pada alamat yang berbeda dari alamat yang diminta pengirim. DannyMayer - 27 Apr 2009

Saya pikir jawaban utama untuk pertanyaan Anda ada di komentar di atas di sini.

Sakit kepala
sumber
16

Sama sekali tidak sembarangan. Ini hanya mengikat ke alamat IP antarmuka dan localhost, baik pada protokol ipv4 dan ipv6. Jika Anda pikir itu seharusnya tidak mendengarkan beberapa dari mereka, cukup ubah listenkonfigurasi seperti yang dijelaskan dalam manual (ini mungkin untuk versi lain yang Anda gunakan):

 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

Dalam beberapa versi lain Anda akan perlu mengubah pilihan ke ntpddaemon sendiri perubahan apa protokol / interface untuk mendengarkan (pilihan seperti -4, -6, -I)

coredump
sumber
1
Feliz Ano Novo!
user9517 didukung GoFundMonica
1
Saya tidak berpikir ini benar-benar menjawab pertanyaan itu. Saya pikir pertanyaannya pada dasarnya adalah bertanya mengapa INADDR_ANYtidak digunakan seperti hampir setiap protokol lainnya. Artikel yang saya tautkan dalam jawaban saya tampaknya memperjelas, bahwa itu sebagian merupakan fitur keamanan, dan sebagian cara protokol dirancang untuk mengharapkan balasan pada port 123.
Zoredache
Ini adalah informasi yang sangat berguna yang ingin saya ketahui, dan saya berterima kasih untuk itu, tetapi jawaban @ Zoredache sebenarnya menjawab pertanyaan yang saya tanyakan, jadi saya telah menandainya sebagai jawabannya. Namun, ada banyak hal yang berubah. ;)
Abraham Vegh