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