欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 内网搭建NTS服务器

内网搭建NTS服务器

2025/5/29 4:53:08 来源:https://blog.csdn.net/mosaicwang/article/details/148219650  浏览:    关键词:内网搭建NTS服务器

内网搭建NTS服务器

关键字 : ntp nts ipv6

NTS 是 Network Time Security(网络时间安全)的缩写,是 NTP 的一种安全扩展机制。它利用传输层安全(TLS)和相关数据的认证加密(AEAD),为 NTP 的客户端 - 服务器模式提供加密安全保障,以防止时间同步过程中的中间人攻击等安全问题

环境 :

  • Centos 9 两台 (一台做NTP服务端,另一台做NTP客户端)
  • IP :
    • NTP服务端
      • IP :192.168.132.11fd15:4ba5:5a2b:1008:192:168:132:11
      • 主机名 : ntpserver
    • NTP客户端 : 192.168.132.12fd15:4ba5:5a2b:1008:192:168:132:12

本文是模拟在内网中搭建NTS服务端,以便让网内的服务器同步时间

一。前置任务 :

1.创建自签名服务端证书.

  • 本例中,服务端证书和私钥的文件名是 : ntpserver.crtntpserver.key
  • 根CA和中介CA的文件名是 : imca.crtrootca.crt
  • 服务端证书中SAN的DNS必须包含 NTP服务端的主机名.在本例中,DNS有2个 : ntpserverntpserver-ipv6
  • 如果服务端证书是通过中介CA签署,则服务端证书必须包含中介CA证书。顺序是 : 服务端证书+中介CA证书
cat ntpserver.crt imca.crt >new-ntpserver.crt
  • 证书和私钥以及CA证书需设置属性,以便被chrony用户读取
# 本例中包含 中介CA的服务端证书 和 私钥 以及 根CA证书 拷贝到 /etc/pki目录下了
chown :chrony /etc/pki/new-ntpserver.crt /etc/pki/rootca.crt
chown chrony /etc/pki/ntpserver.key

结果如下 :

-rw-r-----. 1 root   chrony 1587 May 25 20:15 new-ntpserver.crt
-rw-------. 1 chrony root    241 May 25 20:13 ntpserver.key	# 仅允许chrony用户读取私钥
-rw-r-----. 1 root   chrony  768 May  6 12:27 rootca.crt

二。安装和配置NTS服务端

2.1 安装chrony

dnf install chrony

安装完毕后,会得到系统服务 chronyd.service 以及 客户端软件 chronyc

2.2 配置NTS服务端

配置文件是/etc/chrony.conf

2.2.1修改 /etc/chrony.conf ,增加如下内容 :

initstepslew 1
manual
# 允许IPV4 和 IPV6的网络范围
allow 192.168.132.0/24
allow fd15:4ba5:5a2b:1008:192:168::/64# 启用NTS 私钥和公钥要能被系统用户chrony读取
ntsserverkey /etc/pki/ntpserver.key
ntsservercert /etc/pki/new-ntpserver.crt
ntstrustedcerts /etc/pki/rootca.crt# 处理NTS请求的进程数量.缺省是1
ntsprocesses 3# 服务端生成新密钥的周期(单位:秒,缺省是1周).每天一次
ntsrotate 86400smoothtime 400 0.01

2.2.2 修改 /etc/chrony.conf ,注释如下内容 :

  • serverpool开头的行。因为假设场景是以本机作为NTP服务端,所以屏蔽上游的NTP源
  • sourcedir 开头的行
    注释后的效果如下 :
# server ntp1.aliyun.com iburst
# pool 2.centos.pool.ntp.org iburst
# sourcedir /run/chrony-dhcp

2.3 开放防火墙

firewall-cmd --permanent --add-port=123/udp
# TCP 4460 是NTS-KE协议的端口
firewall-cmd --permanent --add-port=4460/tcp
firewall-cmd --reload

2.4 重启chronyd

systemctl restart chronyd

然后检查服务状态,确保启动成功

systemctl status chronyd

如下为启动成功的日志:

May 25 20:30:55 myserver1 systemd[1]: Starting NTP client/server...
May 25 20:30:55 myserver1 chronyd[3887]: chronyd version 4.6.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASY>
May 25 20:30:55 myserver1 chronyd[3887]: Loaded 0 symmetric keys
May 25 20:30:55 myserver1 chronyd[3887]: Using right/UTC timezone to obtain leap second data
May 25 20:30:55 myserver1 chronyd[3887]: Frequency -6.921 +/- 0.581 ppm read from /var/lib/chrony/drift
May 25 20:30:55 myserver1 chronyd[3887]: Loaded seccomp filter (level 2)
May 25 20:30:55 myserver1 systemd[1]: Started NTP client/server.

特别说明 :

  • 由于chronyd 是由操作系统用户chrony启动,因此必须确保证书、私钥、根证书文件能被用户chrony读取
  • 查看chronyd的进程情况
ps -ef |grep chronyd

输出类似如下 :

chrony       846       1  0 08:34 ?        00:00:00 /usr/sbin/chronyd -F 2
chrony       847     846  0 08:34 ?        00:00:00 /usr/sbin/chronyd -F 2
chrony       848     846  0 08:34 ?        00:00:00 /usr/sbin/chronyd -F 2
chrony       849     846  0 08:34 ?        00:00:00 /usr/sbin/chronyd -F 2

至此,NTS的服务端搭建完成

三。安装和配置NTS客户端

3.0 将根证书(rootca.crt)拷贝到/etc/pki目录下并设置属性

scp -p 192.168.132.11:/etc/pki/rootca.crt /etc/pki/
chown :chrony /etc/pki/rootca.crt

3.1 安装chrony

dnf install chrony

安装完毕后,会得到系统服务 chronyd.service 以及 客户端软件 chronyc

3.2 配置NTS客户端

配置文件是/etc/chrony.conf

3.2.1修改 /etc/chrony.conf ,增加如下内容 :

# server最后的nts表示服务端启用nts。且使用域名(不用使用IP地址)
server ntpserver iburst nts
server ntpserver-ipv6 iburst nts# 根据情况决定是否在客户端设置此选项
allow 192.168.132.0/24
allow fd15:4ba5:5a2b:1008:192:168::/64# 指定NTS的信任证书
ntstrustedcerts /etc/pki/rootca.crt

3.2.2 修改 /etc/chrony.conf ,注释如下内容 :

  • serverpool开头的行。因为假设场景是以步骤二的服务器作为NTP时间源,所以屏蔽其他的NTP源
  • sourcedir 开头的行
    注释后的效果如下 :
# server ntp1.aliyun.com iburst
# pool 2.centos.pool.ntp.org iburst
# sourcedir /run/chrony-dhcp

3.3 开放防火墙

firewall-cmd --permanent --add-port=123/udp
# TCP 4460 是NTS-KE协议的端口
firewall-cmd --permanent --add-port=4460/tcp
firewall-cmd --reload

3.4 设置域名与IP的对应关系

编辑/etc/hosts,增加如下内容 :

# NTS 服务端的IP地址和主机名
192.168.132.11 ntpserver
fd15:4ba5:5a2b:1008:192:168:132:11 ntpserver-ipv6

3.4 重启chronyd

systemctl restart chronyd

然后检查服务状态,确保启动成功

systemctl status chronyd

成功启动日志如下 :

May 25 23:19:40 myclient systemd[1]: Starting NTP client/server...
May 25 23:19:40 myclient chronyd[1223]: chronyd version 4.6.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG)
May 25 23:19:40 myclient chronyd[1223]: Loaded 0 symmetric keys
May 25 23:19:40 myclient chronyd[1223]: Using right/UTC timezone to obtain leap second data
May 25 23:19:40 myclient chronyd[1223]: Frequency 14.467 +/- 5.921 ppm read from /var/lib/chrony/drift
May 25 23:19:40 myclient chronyd[1223]: Loaded seccomp filter (level 2)
May 25 23:19:40 myclient systemd[1]: Started NTP client/server.

特别说明 :

  • 重启服务后,容易出现"证书发行人不可信任的错误"。可能原因有2个,1是根证书(rootca.crt)的属性,即chrony用户要有读取根证书的权限;2是服务端证书中SAN没有包含NTS服务端的主机名(因为客户端是通过域名访问服务端)

#四。验证

4.1 在客户端查看时间源信息

chronyc sources

输出如下 :

210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* ntpserver                     8   8   377     6   +117us[ +124us] +/-  524us
^+ ntpserver-ipv6                8   8   377   142    +30us[  +36us] +/-  373us

4.2 在服务端查看认证情况

chronyc serverstats

输出如下 :

NTP packets received       : 5
NTP packets dropped        : 0
Command packets received   : 1
Command packets dropped    : 0
Client log records dropped : 0
NTS-KE connections accepted: 1		# 非0值说明有客户端连接到NTS-KE端口且发送了验证请求
NTS-KE connections dropped : 0
Authenticated NTP packets  : 5		# 非0值说明有客户端连接到NTS-KE端口且发送了验证请求
Interleaved NTP packets    : 0
NTP timestamps held        : 0
NTP timestamp span         : 0
NTP daemon RX timestamps   : 0
NTP daemon TX timestamps   : 5
NTP kernel RX timestamps   : 5
NTP kernel TX timestamps   : 0
NTP hardware RX timestamps : 0
NTP hardware TX timestamps : 0

4.3 在客户端查看验证情况

chronyc -N authdata

输出类似如下 :

Name/IP address             Mode KeyID Type KLen Last Atmp  NAK Cook CLen
=========================================================================
ntpserver                    NTS     1   30  128 597m    0    0    8   64
ntpserver-ipv6               NTS     1   30  128 580m    0    0    8   64

说明 :

  • 输出结果中的KeyID、Type、KLen三列的值应该为非0

五。一些说明

  • 启用NTS后,无需创建同步密钥。即无需执行chrony_keygen命令
  • NTS目前采用单向认证模式,即服务端向客户端验证,而客户端无需向服务端表明身份。所以只在服务端配置了证书和私钥
  • 搭建过程中容易出错的地方有 : 证书、私钥和根证书文件的属性;/etc/chrony.conf中的allow指令,以及客户端配置/etc/hosts
  • 无论是服务端还是客户端,在重启chronyd服务后,一定要执行systemctl status chronyd查看服务的状态,如果输出有异常,就需要解决问题

六。参考文档 :

  • 搭建基于chrony+OpenSSL(NTS协议)多层级可信时间同步服务
    https://blog.csdn.net/muxia_jhy/article/details/147876353
  • chrony.conf : man chrony.conf

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词