如何部署nts实例chrony公共服务端?

CentOS(RHEL)

1 基础知识

1.1 TLS

1.1.1 TLS的简介

– TLS是Transport Layer Security的简称
– TLS中文翻译为传输层安全协议

1.1.2 TLS的作用

– TLS用于确保两个应用程序之间通讯的保密性和数据完整性
– TLS用于确保两个应用程序之间建立安全连接,防止交换数据是被窃听和篡改

1.1 AEAD

1.1.1 AEAD的简介

– AEAD是Authenticated Encryption with Associated Data的简称
– AEAD是一种同时具备数据私密性、完整性和可认证性的加密方式

1.1.2 AEAD的作用

– 对称加密算法加密后的数据可用任意秘钥执行解密运算后得到疑似的原始数据(数据无法确定是否正确)
– AEAD为解决对称加密算法的不足而应运而生
– AEAD基于单纯的加密算法之上,增加一层验证手段以确保解密步骤的正确性

1.1.3 AEAD的实例

– AES-128-GCM
– AES-192-GCM
– AES-256-GCM
– ChaCha20-IETF-Poly1305
– XChaCha20-IETF-Poly1305

1.2 NTS协议

1.1.1 NTS的简介

– NTS是Network Time Security英文简称
– NTS中文翻译为网络时间安全
– NTS是一种用于网络时间同步的加密安全性机制
– NTS使用TLS和AEAD协议进行身份验证和数据加密
– NTS是一种CS(客户端-服务器)架构的协议

1.1.2 NTS的作用

– NTS防止客户端与服务器之间的数据包传输过程中被篡改
– NTS启用时攻击者唯一能做的就是丢弃或延迟数据包

1.1.3 NTS的子协议

– NTS-KEY,即NTS秘钥建立(处理初始的TLS上的身份验证和秘钥建立)
– NTS扩展字段,处理加密和身份验证(NTP同步期间通过扩展字段在客户端上保存所有必要的状态cookies)

2 最佳实践

2.1 安装前的准备

2.1.1 系统环境

OS = CentOS 7.3 x86_64
Host Name = nts.cmdschool.org
IP Address = 10.168.0.80
本例需要你预先安装Chrony的配置,如果你没有,请参阅以下文档部署,

如何编译部署ntp实例chrony?

2.1.2 确认开启NTS支持

chronyd -v

可见如下显示,

chronyd (chrony) version 4.0 (+CMDMON +NTP +REFCLOCK +RTC -PRIVDROP -SCFILTER -SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)

注:如果显示“+NTS”字样,则已经开启对“NTS”支持,另外如果显示“-NTS”则是没有成功开启。

2.2 开启NTS服务

2.2.1 定义NTS服务配置文件

vim /etc/chrony.conf

配置修改如下,

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3

noclientlog
logchange 0.5
logdir /var/log/chrony

port 123
allow

ntsport 4460
ntsservercert /etc/chrony.d/1_nts.cmdschool.org_bundle.crt
ntsserverkey /etc/chrony.d/2_nts.cmdschool.org.key
clientloglimit 100000000

– 参数“server”声明NTP时间源服务器,“iburst”选项以4-8个请求同时更新
– 参数“stratumweight”声明时间源的层级,范例“0”表示忽略时间源的层级
– 参数“driftfile”声明记录时间漂移比率文件,重启服务时系统时钟根据记录值进行时间补偿。
– 参数“rtcsync”声明启用RTC(实时时钟)的内核同步
– 参数“makestep”声明如系统时钟偏移量大于10秒,参数3限制只在前三个时钟中更新
– 参数“noclientlog”声明不记录客户端访问(如果记录可使用“chronyc clients”命令查看)
– 参数“logchange”声明调整系统日志的系统时钟阀值
– 参数“ntsdumpdir”声明客户端保存从服务器接收的NTS cookie,避免重启时发NTS-KE请求(目录不存在,则自创建)
– 参数“logdir”声明日志的目录(目录不存在,则自创建)
– 参数“port”声明chronyd倾听NTP服务的端口,默认值是“123”,如果设置为“0”则关闭倾听,启用需设置“allow”参数
– 参数“allow”声明允许访问NTP服务器的计算机网段,指令如没有声明任何网段则允许所有客户端访问
– 参数“ntsport”声明NTS协议倾听的端口(默认值4460,需要配置参数“ntsservercert”和“ntsserverkey”方能开启)
– 参数“ntsservercert”声明包含PEM格式的服务器证书路径
– 参数“ntsserverkey”声明包含PEM格式的服务器私钥路径
– 参数“clientloglimit”声明允许chronyd分配用于记录客户端的最大内存量,默认值为“524288”字节(约4千客户端)
根据配置的要求,你需要检查以下秘钥的值,

mkdir -p /etc/chrony.d
cp 1_nts.cmdschool.org_bundle.crt 2_nts.cmdschool.org.key /etc/chrony.d/

以上证书来源于腾讯云的Nginx SSL证书,如果没有证书,请从腾讯云申请免费证书,
https://cloud.tencent.com/product/ssl
证书部署到目录后,可使用如下命令查看部署的证书,

ls /etc/chrony.d/

可见如下文件,

1_nts.cmdschool.org_bundle.crt  2_nts.cmdschool.org.key

2.2.2 重启服务是配置生效

systemctl restart chronyd.service

然后,我们可以通过如下命令检查服务的倾听,

netstat -anp | grep chronyd

可见如下显示,

tcp        0      0 0.0.0.0:4460            0.0.0.0:*               LISTEN      1498/chronyd
tcp6       0      0 :::4460                 :::*                    LISTEN      1498/chronyd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           1498/chronyd
udp        0      0 127.0.0.1:323           0.0.0.0:*                           1498/chronyd
udp6       0      0 :::123                  :::*                                1498/chronyd
udp6       0      0 ::1:323                 :::*                                1498/chronyd
unix  2      [ ]         DGRAM                    26682    1498/chronyd         /var/run/chrony/chronyd.sock
unix  3      [ ]         SEQPACKET  CONNECTED     26675    1499/chronyd
unix  2      [ ]         DGRAM                    26668    1498/chronyd
unix  3      [ ]         SEQPACKET  CONNECTED     26674    1498/chronyd

2.2.3 开放服务端口

firewall-cmd --permanent --add-service ntp --add-port 4460/tcp
firewall-cmd --reload
firewall-cmd --list-all

以上如果使用如下命令禁用“ntp”端口则出现客户端无法正常同步时间的情况,原因未知,

firewall-cmd --permanent --remove-service ntp
firewall-cmd --reload
firewall-cmd --list-all

注:已经联系官方咨询,如有回复第一时间更新。

参阅文档
===================

AEAD的介绍
————-
https://zhuanlan.zhihu.com/p/28566058

NTS的介绍
————–
https://tools.ietf.org/html/rfc8915
https://linux.cn/article-12860-1.html

chronyd的配置文件
——————
https://chrony.tuxfamily.org/doc/4.0/chrony.conf.html

PEM格式证书
————-
https://help.aliyun.com/knowledge_detail/40526.html
https://www.ssl.com/zh-CN/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%88%91%E5%A6%82%E4%BD%95%E8%8E%B7%E5%BE%97Pem%E6%A0%BC%E5%BC%8F%E7%9A%84%E8%AF%81%E4%B9%A6/

没有评论

发表评论

CentOS(RHEL)
如何配置系统网桥?

1 前言 一个问题,一篇文章,一出故事。 笔者手里有一个1U的8端口服务器,正好当交换机用。 2 最 …

CentOS(RHEL)
如何修复非XFS文件系统逻辑坏道?

1 前言 一个问题,一篇文章,一出故事。 笔者服务器根分区出现逻辑坏道,于是整理此文。 另外,如果你 …

CentOS(RHEL)
如何破解CentOS或RHEL 7的root密码?

1 前言 一个问题,一篇文章,一出故事。 本章将讲述如何破解系统root的密码。 2 最佳实践 2. …