Tại sao ntpd nghe trên rất nhiều cổng / địa chỉ?


18

Tôi đã nhận thấy điều này trong một thời gian và nó không bao giờ có ý nghĩa với tôi:

Tại sao ntpdcần phải nghe trên nhiều địa chỉ?

Ví dụ: máy Debian:

$ netstat
Địa chỉ Proto Địa chỉ địa chỉ Tên chương trình
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

Danh sách (được điều chỉnh lại) netstatnày hiển thị nptdnghe trên các địa chỉ quảng bá, địa phương, LAN và toàn cầu, cho IPv4 và IPv6.

Tại sao lại ntpdlăng nhăng như vậy?

Câu trả lời:


15

Từ việc tôi đọc trang này , có vẻ như ntp không sử dụng 0.0.0.0địa chỉ INADDR_ANY chỉ một phần vì lý do bảo mật và một phần vì lý do xác thực.

Cổng đầu tiên 123, dưới 1024 và do đó được coi là cổng đặc quyền và chỉ root mới có thể liên kết với cổng đó. Ntp thường được đặt để bỏ đặc quyền sau khi nó được bắt đầu. Từ những gì tôi hiểu từ danh sách thư và bài viết một khi các đặc quyền bị hủy không thể mở một ổ cắm để trả lời từ cổng nguồn chính xác của 123, vì vậy ntp mở ra các socket cho mọi địa chỉ được gán trước khi nó giảm đặc quyền.

Từ những gì tôi đã đọc, một số cơ chế xác thực cho ntp về cơ bản yêu cầu rằng cổng nguồn và cổng đích là 123, và không có gì khác.

Vấn đề không hoàn toàn rõ ràng. Xem phần về địa chỉ ký tự đại diện 0.0.0.0 , nó được mở bởi ntpd vì một số lý do, nhưng từ các bình luận không bao giờ thực sự được sử dụng, ngoại trừ có thể trong một số trường hợp đặc biệt hiếm hoi, các nhà phát triển không hoàn toàn chắc chắn về, nhưng, họ không ' T muốn tháo ổ cắm, chỉ trong trường hợp chúng phá vỡ mọi thứ.

Lưu ý rằng thông thường ntpd không nên chấp nhận các gói trên các địa chỉ ký tự đại diện vì có một số vấn đề nếu bạn làm như vậy bao gồm gửi các gói trả về trên một địa chỉ khác với địa chỉ yêu cầu của người gửi. DannyMayer - 27 tháng 4 năm 2009

Tôi nghĩ rằng câu trả lời chính cho câu hỏi của bạn là trong nhận xét ở trên.


16

Nó không phải là lăng nhăng chút nào. Nó chỉ liên kết với các địa chỉ IP giao diện và localhost, cả trên giao thức ipv4 và ipv6. Nếu bạn nghĩ rằng không nên nghe một vài trong số đó, chỉ cần thay đổi listencấu hình như được giải thích trong hướng dẫn sử dụng (đây có thể là phiên bản khác mà bạn đang sử dụng):

 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

Trong một số phiên bản khác, bạn sẽ cần phải thay đổi các tùy chọn để các ntpddaemon bản thân để thay đổi vào những gì các giao thức / interfaces để nghe (tùy chọn thích -4, -6, -I)



1
Tôi không nghĩ rằng điều này thực sự trả lời câu hỏi. Tôi nghĩ rằng câu hỏi về cơ bản là tại sao INADDR_ANYkhông được sử dụng như hầu hết các giao thức khác. Bài viết tôi liên kết đến trong câu trả lời của tôi dường như làm cho nó rõ ràng, đó là một phần tính năng bảo mật và một phần theo cách giao thức được thiết kế để mong đợi trả lời trên cổng 123.
Zoredache

Đây là thông tin rất hữu ích mà tôi muốn biết và tôi cảm ơn bạn vì điều đó, nhưng câu trả lời của @ Zoredache thực sự trả lời câu hỏi mà tôi đã hỏi, vì vậy tôi đã đánh dấu nó là câu trả lời. Nâng cao tất cả xung quanh, tuy nhiên. ;)
Abraham Vegh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.