专业的编程技术博客社区

网站首页 > 博客文章 正文

简单介绍如何为linux集群快速配置ntp

baijin 2024-10-08 00:48:40 博客文章 10 ℃ 0 评论

NTP本身是一个复杂的协议,但通常我们不需要纠结于其复杂性,也可以简单使用,下面就分享一种简单为Linux集群配置ntp的方法。

  • 在当前目录创建ntp.conf文件
# 导致漏洞CVE-2013-5211,默认disable
disable monitor
server 0.cn.pool.ntp.org
server 0.asia.pool.ntp.org
server ntp.aliyun.com
# 允许上层时间服务器主动修改本机时间
restrict 0.cn.pool.ntp.org nomodify notrap noquery
restrict 0.asia.pool.ntp.org nomodify notrap noquery
restrict ntp.aliyun.com nomodify notrap noquery
# 外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10


关于漏洞CVE-2013-5211:

漏洞CVE-2013-5211与molist功能有关,molist主要用于监控NTP服务器。Ntpd4.2.7p26之前的版本都会去响应NTP中的 mode7“monlist”请求,响应后会返回与NTP服务器进行过时间同步的最后600个客户端IP,响应包按每6个IP分割,最多100个响应包。

ntpd-4.2.7p26版本后,monlist功能已被mrulist取代,其使用mode6控制报文,且通过握手过程阻止对第三方主机的dos攻击。


解决方法:

若Ntpd版本低于4.2.7p26,则在ntp.conf文件增加disable monitor手动禁用该功能;

或使用restrict … noquery 或 restrict … ignore限制ntpd服务响应的源地址;

或升级ntpd版本。

对ntpd的配置需要重启ntpd才生效。

systemctl restart ntpd


常用配置含义解析:

1、server,ntp服务器地址

格式:server address [key key] [burst] [iburst] [version version] [prefer] [minpoll minpoll] [maxpoll maxpoll]

burst:当服务器可达时,间隔2s发送8个分组,而非默认一个分组。

iburst:当服务器不可达时,间隔2s发送6个分组,而非默认一个分组。

perfer:标记为首选服务器。

pool:指定NTP消息的最小轮询间隔和最大轮询间隔,是2的幂,单位为秒。最大轮询间隔默认为10 (1024 s),但可以通过maxpoll选项增加到17 (36.4 h)的上限。最小轮询间隔默认为6 (64 s),但可以通过minpoll选项减少到0 (1 s)的下限。

2、fudge,设置时间服务器的层级

格式:fudge ip [stratum int],fudge须跟在server后一行

stratum取值[0,15]

0:表示顶级

10:通常用于给局域网主机提供时间服务

fudge将本地时钟设置为stratum 10,使ntp在无上层时间服务器可用时使用本地时钟。

3、restrict,权限控制

格式:restrict address[/cidr] [mask mask] [flag …]

ignore:禁止所有NTP连接请求

nomodify:不允许客户端使用命令ntpc和ntpq来修改服务器端的时间

nopeer:拒绝可能导致调动新关联的数据包;当配置的关联不存在时,这包括对称的主动数据包。这通常发生在远程客户端在其配置文件中使用peer命令时。我们不支持这种模式。它曾经包括池服务器,但现在它们在任何限制中都戳穿了一个漏洞。

noquery:不提供NTP网络校时服务

notrap:不接受远程登录请求

notrust:不接受未经过认证客户端的请求

  • 在当前目录创建shell脚本,保存并执行它
#!/bin/bash
yum -y install sshpass
user="root"
declare -A ipPswd
ipPswd["172.0.0.1"]="pswd"
ipPswd["172.0.0.2"]="pswd"
declare -A hostIP
hostIP["node01"]="172.0.0.1"
hostIP["node02"]="172.0.0.2"
ntpdNode="node01"
function set_ntp() {
for host in ${!hostIP[*]};do
if [[ $host == $ntpdNode ]];then
ssh -tt -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@${hostIP[$host]} "yum -y install ntp"
ssh -tt -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@${hostIP[$host]} "rm -f /etc/ntp.conf"
sshpass -p ${ipPswd[${hostIP[$host]}]} scp -o "StrictHostKeyChecking no" ./ntp.conf $user@${hostIP[$host]}:/etc/ntp.conf
ssh -tt -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@${hostIP[$host]} "systemctl restart ntpd"
ssh -tt -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@${hostIP[$host]} "systemctl enable ntpd.service"
else
ssh -tt -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@${hostIP[$host]} "yum -y install ntpdate"
ssh -tt -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@${hostIP[$host]} "echo '*/1 * * * * /usr/sbin/ntpdate $ntpdNode' >> /var/spool/cron/root"
fi
done
}
set_ntp
  • 检验命令
  • 刚启动时,一般是:
[root@node01 ~]# ntpstat
unsynchronised
time server re-starting
polling server every 64 s

连接并同步后:

[root@node01 ~]# ntpstat
synchronised to NTP server (远端ntp服务器ip) at stratum 3
time correct to within 50 ms #时间校正到相差50ms 之内
polling server every 1024 s #每1024秒会向上级NTP轮询更新一次时间
[root@node01 ~]# ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*203.107.6.88 打码   2 u  941 1024  377   49.166   -0.587   1.162
+time.neu.edu.cn .PTP. 1 u  256 1024  377   54.313   -7.347   0.562
ntp.hkg10.hk.le 打码 2 u  17h 1024    0  304.929   18.665   0.000
LOCAL(0) .LOCL.          10 l 164d   64    0    0.000    0.000   0.000
[root@node01 ~]# date
Wed Nov 2 10:13:35 CST 2022


以上就是今天的内容,如果大家有疑问或者新的想法,欢迎联系我沟通交流。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表