为什么 ntpd 要监听这么多端口/地址?

为什么 ntpd 要监听这么多端口/地址?

我注意到这一点已经有一段时间了,但我始终不明白:

为什么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 [局域网]:123 0.0.0.0:* ntpd
udp [IPv4]:123 0.0.0.0:* ntpd
udp6 :::123 :::* ntpd
udp6 ::1:123 :::* ntpd
udp6 [本地链接] :::* ntpd
udp6 [IPv6] :::* ntpd

此(已删除)netstat列表显示了nptd对 IPv4 和 IPv6 的广播、本地、LAN 和全局地址的监听。

为何ntpd这么滥交?

答案1

从我的阅读此页面,看来 ntp 不0.0.0.0专门使用 INADDR_ANY 地址,部分是出于安全原因,部分是出于身份验证原因。

第一个端口 123 低于 1024,因此被视为特权端口,只有 root 才能绑定到该端口。ntp 通常设置为在启动后放弃特权。根据我从邮件列表和文章中了解到的情况,一旦放弃特权,就无法打开套接字以从正确的源端口 123 回复,因此 ntp 在放弃特权之前会为每个分配的地址打开套接字。

据我所知,ntp 的一些身份验证机制基本上要求源端口和目标端口为 123,而不需要其他任何内容。

事情还不完全清楚。请参阅关于通配符地址 0.0.0.0,它由于某种原因被 ntpd 打开,但从评论来看它实际上不应该被使用,除非在某些特殊的罕见情况下,开发人员并不完全确定,但是,他们不想移除套接字,以防他们破坏东西。

请注意,通常 ntpd 不应接受通配符地址上的数据包,因为这样做会产生许多问题,包括将返回数据包发送到与发送者请求的地址不同的地址。DannyMayer - 2009 年 4 月 27 日

我认为您问题的主要答案就在上面的评论中。

答案2

它根本不是混杂的。它只是绑定到接口 IP 地址和本地主机,两者都在 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

相关内容