NTP 服务中的 monlist 查询本来是给管理员调试连接状态用的,它可以列出最近与服务器通信过的客户端地址。但该命令属于模式 7 的私有控制消息,不需要身份认证,响应大小远大于请求,且默认在部分老旧 ntpd 版本中对外开放,因此被大量用于反射放大攻击。要降低风险,最直接的办法就是在配置文件中关闭 monitor 功能,并配合访问控制策略限制查询来源。

一、为什么必须禁用 monlist
monlist 请求本身是一个很小的 UDP 数据包,攻击者把源 IP 伪造成受害者的地址,再向大量开放 NTP 服务的服务器发送该请求。服务器会按照自己的记录,把最近访问过的最多 600 个客户端 IP 返回给伪造源地址。请求可能只有几十字节,而响应通常能达到几千字节,放大倍率可以达到几十倍甚至更高。攻击者利用大量 NTP 服务器,就能把少量攻击流量汇聚成足以打满目标带宽的反射流量。
更麻烦的是,这种攻击不需要控制服务器,也不需要植入木马,只要服务器开放了 monlist 查询,就可能被当成放大器。很多早期安装的 ntpd 使用默认配置,没有关闭监控,也没有严格限制查询来源,因此长期成为互联网上的滥用点。即便服务器本身不直接受害,安全团队也可能收到来自目标网络运营商的投诉。
从检测角度看,如果一台主机对外提供 NTP 服务,而且使用 ntpdc 的 monlist 命令能够返回地址列表,那么它基本就可以被认定为存在被滥用风险。关闭 monlist 不会影响正常的时间同步,因为时间同步走的是模式 3 和模式 4 的标准协议路径,与模式 7 管理查询无关。
二、在 ntpd 中禁用 monlist 的配置
对于使用 ntpd 的场景,最常见的配置文件是 /etc/ntp.conf。要关闭 monlist,可以在文件末尾加入一行 disable monitor。它会让 ntpd 停止响应模式 7 的监控查询,从而阻断攻击者获取客户端列表。修改完成后需要重启服务,例如在 systemd 系统中执行 systemctl restart ntp 或 systemctl restart ntpd,具体服务名取决于发行版。
仅关闭 monitor 不一定足够,还应当配合 restrict 指令限制谁可以查询服务器。下面是一个经过加固的 /etc/ntp.conf 示例,其中默认策略使用了 kod、nomodify、notrap、nopeer、noquery 和 limited。noquery 会禁止所有模式 6 和模式 7 查询,limited 则会限制响应速率,进一步降低被用于放大攻击的概率。
# /etc/ntp.conf 加固示例 # 禁止响应 monlist 等模式 7 查询 disable monitor # 默认拒绝所有查询,并限制速率 restrict default kod nomodify notrap nopeer noquery limited restrict -6 default kod nomodify notrap nopeer noquery limited # 允许本机管理 restrict 127.0.0.1 restrict -6 ::1 # 如果需要向特定网段提供时间同步,可以单独允许 # restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
需要提醒的是,noquery 会同时影响 ntpq 和 ntpdc 的远程查询能力。如果管理员需要通过远程工具检查 NTP 状态,可以只对可信任管理网段开放查询,而不要使用 restrict default noquery 以外的宽松策略。对于不需要对外提供时间服务的服务器,最安全的做法是仍然配置默认拒绝,并通过防火墙直接屏蔽 UDP 123 端口的入站流量。
三、验证 monlist 状态
配置完成后,需要确认 monlist 是否真的不再响应。最直接的工具是 ntpdc,它属于旧版 NTP 工具集,在很多发行版中由 ntp 软件包提供。执行 ntpdc -c monlist 目标IP 后,如果返回 Server reports data not found、Server disallowed request 或者请求超时,说明 monlist 已不再提供有效数据。若仍能看到大量客户端地址,则可能配置未生效或服务没有重启。
还可以使用 nmap 的 ntp-monlist 脚本进行远程检测。该脚本会发送模式 7 请求,并判断目标是否返回客户端列表。检测命令如下,执行时可能需要管理员权限。
ntpdc -c monlist 192.168.1.10 # 使用 nmap 脚本远程测试 nmap -sU -p 123 --script ntp-monlist 192.168.1.10
不同工具对已禁用的返回信息不完全相同。有的服务器会直接不响应,有的会返回错误码,这并不影响判断,只要无法获取客户端列表即可。对于使用 NTPsec 的系统,ntpdc 的 monlist 子命令可能已经被移除,此时可以通过查看服务日志或尝试 ntpq -c rv 来确认版本和状态。
四、不同 NTP 实现的差异与注意事项
并不是所有 NTP 实现都受到 monlist 问题影响。chrony 在现代 Linux 发行版中逐渐取代 ntpd,它默认不提供 monlist 或其他模式 7 管理接口,因此风险较低。openntpd 的设计目标更轻量,也没有实现这一查询。风险主要集中在旧版 ntpd 以及使用默认配置长期运行的服务器上。
NTPsec 是对经典 ntpd 代码进行安全加固的分支,它默认禁用 monlist 和大部分模式 6 查询,并且对模式 7 的响应做了限制。即便如此,仍建议管理员查看自己使用的发行版文档,确认默认配置是否已经足够安全。尤其是在容器镜像或云市场模板中,可能仍内置较老的 ntpd 配置,需要手动添加 disable monitor。
对于必须继续使用旧版 ntpd 的环境,除了配置文件和访问控制,还应当在网络边界做过滤。例如只允许信任的 NTP 客户端访问 UDP 123 端口,禁止来自公网的任意主机查询该服务器。这样即使配置遗漏,攻击者也无法直接触达 monlist 接口。防火墙和主机配置应作为纵深防御的两层同时使用。
五、长期加固与监控建议
禁用 monlist 只是 NTP 安全加固的第一步。管理员还应当定期检查 NTP 服务版本,及时更新到修复已知漏洞的版本;对公开提供时间同步的服务器,建议在防火墙或路由器上启用源地址验证,配合 BCP38 入口过滤,减少伪造源 IP 攻击的可能。
监控层面可以通过流量分析发现异常放大行为。如果一台 NTP 服务器的出站 UDP 流量远大于入站流量,或短时间内出现大量指向某个特定地址的响应,就可能正被利用为反射攻击放大器。使用 ntopng、Zeek 或简单按端口统计即可发现这类异常。
最后,关闭 monlist 不会影响内网设备通过 NTP 同步时间。只要客户端能够访问服务器的 123 端口,而服务器没有被完全禁止响应模式 3 和模式 4 请求,时间同步就不会中断。管理员可以放心执行 disable monitor 和默认 noquery 策略,它们是风险低、收益明显的加固措施。
NTP MONLIST禁用MONLISTNTP反射攻击修改时间:2026-08-30 07:57:55