CentOS 7服务器NTP服务器搭建及访问限制

释放双眼,带上耳机,听听看~!
本教程详细介绍了在CentOS 7服务器上搭建NTP服务器并设置访问限制的步骤,包括安装ntp、配置防火墙、设置访问权限等。通过本教程,您可以轻松搭建并管理自己的NTP服务器。

生产日期2023-06-09,有效期不确定

本次任务的小目标是在CentOS 7服务器上搭建一个NTP服务器,并且增加访问限制。
NTP版本是4.2,划重点,4.2,如下:

[root@ir44x8fy272g ~]# ntpdate -v
 7 Jun 16:11:35 ntpdate[24588]: ntpdate 4.2.6p5@1.2349-o Tue Jun 23 15:38:19 UTC 2020 (1)
 7 Jun 16:11:35 ntpdate[24588]: no servers can be used, exiting

问题1 – how to install ntpd server on centos

CentOS 7服务器NTP服务器搭建及访问限制
这个简单,我应该能行。我直接root用户登录的,所以指令前面都没有加sudo

yum update
yum install ntp
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd

用ntpdate,验收一下阶段性成果。成功!!!

[root@ir44x8fy272g ~]# ntpdate -u ntp1.aliyun.com
 7 Jun 18:24:57 ntpdate[25092]: adjust time server 120.25.115.20 offset 0.000846 sec
[root@ir44x8fy272g ~]# ntpdate -u 127.0.0.1
 7 Jun 18:25:09 ntpdate[25106]: adjust time server 127.0.0.1 offset -0.000001 sec

别高兴太早,试一下外网IP能不能访问???

[root@ir44x8fy272g ~]# ntpdate -u server_public_ip
 7 Jun 18:27:16 ntpdate[25150]: no server suitable for synchronization found

当然不行,第2个问题来了

问题2 – which port does ntpd use

CentOS 7服务器NTP服务器搭建及访问限制
123,看起来靠谱,又好像不那么靠谱,这么随意的吗???还有个有用的信息,UDP和TCP都要用。

vim /etc/sysconfig/iptables
# 添加如下2行
-A INPUT -p tcp -m state --state NEW -m tcp --dport 123 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT

保存退出,systemctl restart iptables。云服务器ECS的安全组里要添加规则放行123端口。我这里是阿里云,截图如下
CentOS 7服务器NTP服务器搭建及访问限制
再来一次,可以外网访问了

[root@ir44x8fy272g ~]# ntpdate -u server_public_ip
 7 Jun 18:51:00 ntpdate[25226]: adjust time server 127.0.0.1 offset 0.000004 sec

问题3 – add password for ntpd

提问有点随意,但她是懂我的,不是她,是!!!划重点,是!!!
CentOS 7服务器NTP服务器搭建及访问限制
答案有点长,虽然问题很简单,慢慢消化吧。vim /etc/ntp.conf,很长,似懂又非懂。求知欲爆棚的我,把配置文件内容粘给了ChatGPT,它竟然来了一招斗转星移。
CentOS 7服务器NTP服务器搭建及访问限制
略去一万字,把上个问题的答案重复了一遍,好一招转移话题。不过只有一行的话,它倒是解释的很清楚。
CentOS 7服务器NTP服务器搭建及访问限制

ntp-keygen的冒险

执行ntp-keygen,报错了。

[root@ir44x8fy272g ~]# ntp-keygen
Using OpenSSL version OpenSSL 1.0.2k-fips  26 Jan 2017
Using host ir44x8fy272g group ir44x8fy272g
Generating RSA keys (512 bits)...
RSA 0 6 14      1 11 24 			3 1 2
Generating new host file and link
ntpkey_host_ir44x8fy272g->ntpkey_RSAhost_ir44x8fy272g.3895132229
Using host key as sign key
Generating new certificate ir44x8fy272g RSA-MD5
X509v3 Basic Constraints: critical,CA:TRUE
X509v3 Key Usage: digitalSignature,keyCertSign
Verify RSA-MD5 certificate fails
error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm

错误信息粘给ChatGPT,看来它不太擅长这些太具体的错误信息,接下来的对话就都是废话了,又臭又长,并没有什么卵用。

外事不决问Google

搜索并打开数个链接开始逐一查阅,试错,折腾。直到发现我好像渐渐能确认我的操作都没有问题啊,但是访问限制还是没有生效啊。

关于NTP Authentication

贴一个有用的链接,大概的意思就是:

  • Symmetric Keys不安全,要交换密钥
  • autokey也没有想的那么安全啦,已经被人给diss啦
  • 大家快来用NTS(Network Time Security)吧
NTP Authentication
https://kb.meinbergglobal.com/kb/time_sync/ntp/configuration/ntp_authentication

我绝对,不会被PUA。我的要求并不高,有个密码就很好。不要再折腾NTS了。

关于ntp-keygen

直到我用ntp-keygen -M生成了密钥文件,cat一下,这不就是我手工编辑的/etc/ntp/keys吗?

1 M f294fa0

我一直纠结这个ntp-keygen失败的问题,干嘛呢!!!用不到嘛,至少配置MD5类型的Symmetric Key用不到,我手工编一下就完事了。最终,从ChatGPT又臭又长的答案,和Google的茫茫链接中,确定了如下的配置

vim /etc/ntp.conf
# add the lines
keys /etc/ntp/keys
trustedkey 1
controlkey 1
requestkey 1

vim /etc/ntp/keys
# add the lines
1 M f294fa0

但是,访问限制还是没有生效。无数的试错和折腾之后,最终,受ChatGPT第1个答案的启发,怀疑到了restrict这个参数上,是不是这个参数auth没有生效。

https://support.ntp.org/Support/AccessRestrictions
# `notrust`

The behavior of `notrust` changed between versions 4.1 and 4.2.

- In 4.1 (and earlier) `notrust` meant "Don't trust this host/subnet for time".

- In 4.2 (and later) `notrust` means "Ignore all NTP packets that are not cryptographically authenticated." This forces remote time servers to authenticate themselves to your (client) `ntpd`. See [ConfiguringAutokey](https://support.ntp.org/Support/ConfiguringAutokey) for information about configuring NTP Authentication.

好吧,notrust才是最终的答案。

vim /etc/ntp.conf
restrict    default kod nomodify notrap nopeer noquery notrust
restrict -6 default kod nomodify notrap nopeer noquery notrust
systemctl restart ntpd

访问限制终于生效了,服务器的配置至此结束

服务端配置小结

  • ChatGPT的思路自始至终是对的,细节也是大部分对的,就是限于不同的操作系统啊,NTP版本啊,还有多种的认证方式,还有ChatGPT-3.5只知道2021.9以前的事情,在解决这类逻辑性不强的具体问题上,实操性不强。这么复杂又具体的问题,只能当ChatGPT是个搜索引擎了吧。
  • Google搜到的关于NTP Authentication的文章,都是只字不提要加restrict的参数notrust,直到去了解restrict的时候,看到了notrust才会去试一下。
  • 搜索引擎的结果,再加一个ChatGPT式的总结,会极大的提升解决问题的效率
  • ChatGPT是真的会编,之前问它查找些开源项目啊,连github仓库地址它都能编出来,全是些子虚乌有的项目!!!

数据不是最新最及时的,以及太能编,ChatGPT-4.0我还没有用过,有可能解决吗?

试错,折腾,苦日子什么时候才能到头

讲真,给NTP服务加个密码这样的事情,在2023年的现在,还要这样折腾才能有个答案吗?操作系统环境繁杂多样,版本有新有旧。轮子的版本和功能也在不断的迭代和更新,学着使用轮子,然后确认轮子是不是在以我们预期的方式工作,已然变的十分复杂。在互联网这个黑暗森林里,我们不得不小心翼翼,如履薄冰。

客户端使用ntpdate同步系统时间

出于各种各样的原因,我禁用了系统的NTP服务, 然后在我的脚本中手工调用ntpdate来同步系统时间。ntpdate同步的最终指令如下: “`

ntpdate -a 1 -k /etc/ntp/keys -u server_public_ip 

得到这条指令的过程又是不断的试错,遇到问题,解决问题。把过程中有用的东西,简述如下:

  • 既然是直接调用ntpdate,那密钥肯定要直接传给它才行,先看ntpdate有哪些参数吧,参考这个链接ntpdate(8) – Linux man page。不得不说,知道正确答案之后这几个参数确实很简单,试错的时候确实也很茫然
  • 这中间有个小坑,MD5密钥的长度不能超过20,否则提示ntpdate[5387]: authreadkeys: invalid hex digit for key 1。这个是翻阅libntp/authreadkeys.c源代码之后才找到的解决方法。 If it is longer than 20 characters, it is a binary string encoded in hex; otherwise, it is a text string of printable ASCII characters.
  • 确认来,确认去,觉得没问题了呀,也没报错,就是同步失败。ntpdate[16026]: no server suitable for synchronization found。继续看ntpdate参数,看能不能打印一些debug信息,发现-d -v。debug信息显示receive: authentication failed,那问题难道在服务端
  • journalctl -u ntpd -f,看一下服务器的日志,好吧,我把密钥文件的位置写错了,密钥文件实际是/etc/ntp/keys,我写成了/etc/ntp.keys

至此,大功告成。

轮子够强,我不够强

轮子够强,够好,就是我不会用。用轮子的过程就是4个字,小心翼翼。小心翼翼的测试好不好用,稳不稳定,怎么修改配置以满足需求,怎么确认配置有没有生效,漫长的试错之路。最怕就是不起眼的小问题,藏在某个晦暗的小角落里,不得不小心翼翼。不是轮子的错,那一定是我的错。

  • 为啥一定要把系统NTP服务给禁掉,一言难尽;
  • 为啥一定要部署自己的NTP服务器,一言难尽;
  • 为啥一定要加个哪怕不太安全的Symmetric key authentication,一言难尽。

有兴趣的朋友,欢迎私信交流!!!

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

AI发展史:从达特茅斯会议到通用人工智能

2023-12-14 21:15:14

AI教程

ChatGPT Prompt Engineering for Developers: Exploring Applications of Large Language Models

2023-12-14 21:25:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索