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的配置,如果你没有,请参阅以下文档部署,
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/
没有评论