内网搭建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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/82626.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/82626.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/82626.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AD9268、AD9643调试过程中遇到的问题

Ad9268芯片 AD9268是一款双通道、16位、80 MSPS/105 MSPS/125 MSPS模数转换器(ADC)。AD9268旨在支持要求高性能、低成本、小尺寸和多功能的通信应用。双通道ADC内核采用多级差分流水线架构,集成输出纠错逻辑。每个ADC都具有宽带宽、差分采样保持模拟输入放大器&…

用豆包写单元测试

用豆包写单元测试, 输入 vue 模板内容,输入 参考vue模板内容写一个单元测试要求用jest.mock实现构造完成,修复bug。npm run test:unit – tests/unit/views/xxx/xxx.spec.js看下 % Stmts 语句覆盖率:执行到的代码语句占总语句的比…

css样式块重复调用

通译灵码解释。还给了一些示例,包含传参等内容 scss和sass的区别。scss与sass是两种样式编写风格,scss是大括号加;号形式。而sass是缩进的格式使用scss为什么要要安装sass呢。sass是一门css预处理器语言。所以要安装。

【深度学习新浪潮】以图搜地点是如何实现的?(含大模型方案)

1. 以图搜地点的实现方式有哪些? 扫描手机照片中的截图并识别出位置信息,主要有以下几种实现方式: 通过照片元数据获取: 原理:现代智能手机拍摄的照片通常会包含Exif(Exchangeable Image File)元数据。Exif中除了有像素信息之外,还包含了光圈、快门、白平衡、ISO、焦距…

DeepSeek R1 与 V3 的全面对比,两个版本有什么差别?

DeepSeek R1与DeepSeek V3是深度求索(DeepSeek)公司推出的两款定位不同的大语言模型,界面上用户可选择基础模型(V3)、深度思考(R1)、联网搜索。 基础模型(V3)是DeepSeek的标配,没有勾选默认就是基础模型。为了让用户更清晰地了解两款模型的差…

Spring Boot 深度集成 Ollama 指南:从聊天模型配置到生产级应用开发

Spring Boot 深度集成 Ollama 指南:从聊天模型配置到生产级应用开发 前言 在人工智能应用开发中,大语言模型(LLM)的本地化部署需求日益增长。Ollama 作为开源的本地LLM运行平台,支持Mistral、LLaMA等主流模型&#x…

查询oracle进程数和会话数进行优化

查看当前参数配置 首先需要查询当前的 processes 和 sessions 参数值,以确定是否需要调整。 SQL SHOW PARAMETER processes; SHOW PARAMETER sessions; 这些命令可以显示当前实例中允许的最大进程数和会话数 查询当前连接数,查询并发会话 SELECT COUNT…

顶会新方向:卡尔曼滤波+目标检测

卡尔曼虑波+目标检测创新结合,新作准确率突破100%! 一个有前景且好发论文的方向:卡尔曼滤波+目标检测! 这种创新结合,得到学术界的广泛认可,多篇成果陆续登上顶会顶刊。例如无人机竞速系统 Swift,登上nat…

运维自动化工具 ansible 知识点总结

1.Ansible 基础 1.1 Ansible简介 Ansible 是一个开源软件,提供配置管理和应用程序部署等项目通用的管理功能。它主要运行在类 Unix 系统上,通过特性语言来描述各种资源对象,进而管理类 Unix 系统和 Microsoft Windows 系统等系统资源。 官网…

基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统

详细视频:【基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统-哔哩哔哩】 https://b23.tv/azUqQXe

C语言进阶--数据的存储

1.数据类型介绍 内置类型 char //字符数据类型 1字节 short //短整型 2字节 int //整型 4字节 long //长整型 4/8字节 long long //更长的整型 8字节 (C99中引入的) float //单精度浮点数 4字节 double //双精度浮点数 8字节sizeof(long…

C++学习细节回顾(汇总三)

一.多态概念 同样是动物叫的⼀个⾏为(函数)&#xff0c;传猫对象过去&#xff0c;就是”(>ω<)喵“&#xff0c;传狗对象过去&#xff0c;就是"汪汪"。 1.根据对象不同类型&#xff0c;调用不同函数&#xff0c;这就叫做运行时多态(动态多态) 2.编译时多态(静态…

SpringAI+MCPServer+MCPClient快速入门

SpringAI MCPServer MCPClient 快速入门编写大纲 源代码地址&#xff1a;https://download.csdn.net/download/user_admin_god/90926893 1. 介绍 本文通过使用免费的智普AI的glm-4-flash模型&#xff0c;设计并实现了一个智能问答系统。在该系统中&#xff0c;我们编写了一…

Linux `vi/vim` 编辑器深度解析与高阶应用指南

Linux `vi/vim` 编辑器深度解析与高阶应用指南 一、核心功能解析1. 模式系统2. 与主流编辑器对比二、核心操作体系1. 高效导航命令2. 文本操作矩阵三、高阶配置体系1. .vimrc 配置示例2. 插件管理系统四、企业级开发实践1. 代码编辑技巧2. 宏录制与批量处理五、可视化与多窗口1…

Java五种方法批量处理List元素全解

Java:如何优雅批量处理List中的每个元素 一、场景分析&#xff1a;为什么需要批量处理List&#xff1f;二、核心方法&#xff1a;五种实现方式对比2.1 普通for循环&#xff08;最直接的方式&#xff09;代码示例&#xff1a;优缺点&#xff1a; 2.2 Java 8 replaceAll&#xff…

【Elasticsearch】`_refresh`和`_flush`的区别

在Elasticsearch中&#xff0c;_refresh和_flush操作虽然看似都与“刷新”有关&#xff0c;但它们的功能和作用范围有显著区别&#xff1a; _refresh操作 - 目的&#xff1a;使索引操作&#xff08;如新增、更新、删除文档&#xff09;后的更改能够立即被搜索到。 - 工作原理…

Java核心数据类型:String深度解析(JDK 8+)

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 问题驱动&#xff1a;从用户注册场景说起 场景描述&#xff1a;开发一个用户注册功能时&#xff0c;需要处理用户名的校验、格式化和存储。你可能会遇到…

人员睡岗检测算法AI智能分析网关V4打造工业/安防/交通等多场景应用方案

一、引言​ 在工业生产、安防监控等多领域&#xff0c;众多岗位需员工长时间值守&#xff0c;如流水线工人、监控值班员等。但高强度工作易引发睡岗问题&#xff0c;导致生产效率下降&#xff0c;甚至造成安全事故与财产损失。传统人工巡检响应慢、成本高&#xff0c;难以满足…

自动生成提示技术突破:AUTOPROMPT重塑语言模型应用

AUTOPROMPT 预训练语言模型的显著成功促使人们研究这些模型在预训练期间学习了哪些类型的知识。将任务重新表述为填空题(例如,完形填空测试)是衡量此类知识的自然方法 但是,它的使用受到编写合适提示所需的手动工作和猜测的限制。为了解决这个问题,我们开发了 AUTOPROMP…

6个月Python学习计划 Day 7 - 复盘 + 测试日

第一周 Day 1 - Python 基础入门 & 开发环境搭建 Day 2 - 条件判断、用户输入、格式化输出 Day 3 - 循环语句 range 函数 Day 4 - 列表 & 元组基础 Day 5 - 字典&#xff08;dict&#xff09;与集合&#xff08;set&#xff09; Day 6 - 综合实战&#xff1a;学生信息…