13.4. chrony 中的网络时间安全概述(NTS)
Network Time Security(NTS)是用于网络时间协议(NTP)的身份验证机制,旨在扩展大量客户端。它将验证从服务器计算机接收的数据包在移到客户端机器时是否被取消处理。Network Time Security(NTS)包含 Key Establishment(NTS-KE)协议,该协议会自动创建在服务器及其客户端中使用的加密密钥。
NTS 与 FIPS 和 OSPP 配置文件不兼容。当您启用 FIPS 和 OSPP 配置文件时,使用 NTS 配置的 chronyd
可能会中止,并显示一条致命消息。您可以通过将 GNUTLS_FORCE_FIPS_MODE=0
添加到 /etc/sysconfig/chronyd
文件中,来为 chronyd
服务禁用 OSPP 配置文件和 FIPS 模式。
13.4.1. 在客户端配置文件中启用网络时间协议(NTS)
默认情况下不启用 Network Time Security(NTS)。您可以在 /etc/chrony.conf
中启用 NTS。为此,请执行以下步骤:
先决条件
- 带有 NTS 支持的服务器
流程
在客户端配置文件中:
除推荐的
iburst
选项外,使用nts
选项指定服务器。For example: server time.example.com iburst nts server nts.netnod.se iburst nts server ptbtime1.ptb.de iburst nts
要避免在系统引导时重复 Network Time Security-Key Establishment(NTS-KE)会话,请在
chrony.conf
中添加以下行(如果不存在):ntsdumpdir /var/lib/chrony
要禁用
DHCP
提供的网络时间协议(NTP)服务器的同步,注释掉或删除chrony.conf
中的以下行(如果存在):sourcedir /run/chrony-dhcp
- 保存您的更改。
重启
chronyd
服务:systemctl restart chronyd
验证
验证
NTS
密钥是否已成功建立:# chronyc -N authdata Name/IP address Mode KeyID Type KLen Last Atmp NAK Cook CLen ================================================================ time.example.com NTS 1 15 256 33m 0 0 8 100 nts.sth1.ntp.se NTS 1 15 256 33m 0 0 8 100 nts.sth2.ntp.se NTS 1 15 256 33m 0 0 8 100
KeyID
、Type
和KLen
应带有非零值。如果该值为零,请检查系统日志中来自chronyd
的错误消息。验证客户端是否正在进行 NTP 测量:
# chronyc -N sources MS Name/IP address Stratum Poll Reach LastRx Last sample ========================================================= time.example.com 3 6 377 45 +355us[ +375us] +/- 11ms nts.sth1.ntp.se 1 6 377 44 +237us[ +237us] +/- 23ms nts.sth2.ntp.se 1 6 377 44 -170us[ -170us] +/- 22ms
Reach
列中应具有非零值;理想情况是 377。如果值很少为 377 或永远不是 377,这表示 NTP 请求或响应在网络中丢失。
其他资源
-
chrony.conf(5)
手册页
13.4.2. 在服务器上启用网络时间安全性(NTS)
如果您运行自己的网络时间协议(NTP)服务器,您可以启用服务器网络时间协议(NTS)支持来促进其客户端安全地同步。
如果 NTP 服务器是其它服务器的客户端,即它不是 Stratum 1 服务器,它应使用 NTS 或对称密钥进行同步。
先决条件
-
以
PEM
格式的服务器私钥 -
带有
PEM
格式的所需中间证书的服务器证书
流程
在
chrony.conf
中指定私钥和证书文件。例如:ntsserverkey /etc/pki/tls/private/<ntp-server.example.net>.key ntsservercert /etc/pki/tls/certs/<ntp-server.example.net>.crt
通过设置组所有权,确保 chrony 系统用户可读密钥和证书文件。例如:
# chown :chrony /etc/pki/tls//<ntp-server.example.net>.
-
确保
chrony.conf
中存在ntsdumpdir /var/lib/chrony
指令。 重启
chronyd
服务:# systemctl restart chronyd
重要如果服务器具有防火墙,则需要允许 NTP 和 Network Time Security-Key Establishment(NTS-KE)的
UDP 123
和TCP 4460
端口。
验证
使用以下命令从客户端机器执行快速测试:
$ chronyd -Q -t 3 'server ntp-server.example.net iburst nts maxsamples 1' 2021-09-15T13:45:26Z chronyd version 4.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG) 2021-09-15T13:45:26Z Disabled control of system clock 2021-09-15T13:45:28Z System clock wrong by 0.002205 seconds (ignored) 2021-09-15T13:45:28Z chronyd exiting
System clock wrong
消息指示 NTP 服务器接受 NTS-KE 连接并使用 NTS 保护的 NTP 消息进行响应。验证 NTS-KE 连接并验证服务器中观察的 NTP 数据包:
# chronyc serverstats NTP packets received : 7 NTP packets dropped : 0 Command packets received : 22 Command packets dropped : 0 Client log records dropped : 0 NTS-KE connections accepted: 1 NTS-KE connections dropped : 0 Authenticated NTP packets: 7
如果
NTS-KE connections accepted
和Authenticated NTP packets
项带有一个非零值,这意味着至少有一个客户端能够连接到 NTS-KE 端口并发送经过身份验证的 NTP 请求。