RHEL chrony 中的网络时间安全 (NTS) 概述
网络时间安全性 (NTS) 是网络时间协议 (NTP) 的一种身份验证机制,旨在扩展大量客户端。它验证从服务器计算机接收的数据包在移动到客户端计算机时是否保持不变。网络时间安全性 (NTS) 包括密钥建立 (NTS-KE) 协议,该协议可自动创建服务器与其客户端之间使用的加密密钥。
NTS 与 FIPS 和 OSPP 配置文件不兼容。启用 FIPS 和 OSPP 配置文件时,配置了 NTS 的配置文件可能会中止并显示致命消息。您可以通过将设置添加到文件中来禁用 OSPP 配置文件和 FIPS 模式以进行服务。chronyd
chronyd
GNUTLS_FORCE_FIPS_MODE=0
/etc/sysconfig/chronyd
在客户端上启用网络时间安全 (NTS)
默认情况下,网络时间安全性 (NTS) 未启用。您可以在 .为此,请执行以下步骤:/etc/chrony.conf
程序
编辑文件,并进行以下更改:/etc/crony.conf
-
除了 recommended 选项外,还使用 option 指定服务器。
nts
iburst
For example: server time.example.com iburst nts server nts.netnod.se iburst nts server ptbtime1.ptb.de iburst nts
-
添加以下设置以避免在系统引导期间重复网络时间安全密钥建立 (NTS-KE) 会话:
ntsdumpdir /var/lib/chrony
-
如果存在,请注释掉或删除以下设置,以禁用与提供的网络时间协议 (NTP) 服务器的同步:
DHCP
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.netnod.se NTS 1 15 256 33m 0 0 8 100 ptbtime1.ptb.de 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.netnod.se 1 6 377 44 +237us[ +237us] +/- 23ms ptbtime1.ptb.de 1 6 377 44 -170us[ -170us] +/- 22ms
该列应具有非零值;理想情况下是 377。如果该值很少达到 377 或从未达到 377,则表示 NTP 请求或响应在网络中丢失。
Reach
在时间服务器上启用网络时间安全 (NTS)
如果您运行自己的网络时间协议 (NTP) 服务器,则可以启用服务器网络时间安全性 (NTS) 支持,以便其客户端安全地同步。
如果 NTP 服务器是其他服务器的客户端,即不是 Stratum 1 服务器,则应使用 NTS 或对称密钥进行同步。
程序
-
编辑文件,并进行以下更改:
/etc/chrony.conf
ntsserverkey /etc/pki/tls/private/<ntp-server.example.net>.key ntsservercert /etc/pki/tls/certs/<ntp-server.example.net>.crt
-
对私钥和证书文件设置权限,以允许 chrony 用户读取文件,例如
# chown root:chrony /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt # chmod 644 /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt
- 确保该设置存在。
ntsdumpdir /var/lib/chrony
-
在 firewalld 中打开所需的端口:
# firewall-cmd –permannent --add-port={323/udp,4460/tcp} # firewall-cmd --reload
-
重新启动服务:
chronyd
# systemctl restart chronyd
验证
-
从客户端计算机执行测试:
$ 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
该消息指示 NTP 服务器正在接受 NTS-KE 连接,并使用受 NTS 保护的 NTP 消息进行响应。
System clock wrong
-
验证服务器上观察到的 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
如果 and 字段的值为非零值,则表示至少有一个客户端能够连接到 NTS-KE 端口并发送经过身份验证的 NTP 请求。
NTS-KE connections accepted
Authenticated NTP packets