鸟哥服务器架设——NTP服务器搭建-阿里云开发者社区

开发者社区> 安全> 正文

鸟哥服务器架设——NTP服务器搭建

简介:

NTP服务器搭建


一、NTP通信协议

    实际上,Linux操作系统的计时方式主要从1970年1月1日开始计算总秒数,因此,如果你还记得date这个命令的话,会发现他有个+%s的参数,可以去的总秒数,这个就是软件时钟。但是,如同前面说的,计算机硬件主要是以BIOS内部的时间为主要的时间依据(硬件时钟),而偏偏这个时间可能因为BIOS内部芯片本身的问题,而导致BIOS时间与标准时间(UTC)存在一点点的差异。所以,为了避免主机时间因为长期运行而导致时间偏差,进行时间同步(synchronize)的工作就显得很重要了。

  软件时钟:由Linux操作系统根据1970/01/01开始计算的总秒数。

  硬件时钟:主机硬件系统上面的时钟,例如BIOS记录的时间。

   那么怎么让时间同步化呢?如果我们选择几部主要主机(Primary Server)调校时间,让这些Primary Server的时间同步之后,在开放网络服务让Client段链接,并且允许Client端调整自己的时间,不就可以实现全部计算机的时间同步了吗。那么什么协议可以实现这样的功能呢,那就是Network Time Protocol,即NTP协议,另外还有Digital Time Synchronization Protocol(DTSS)也可以实现相同的功能。不过,NTP是如何让Server与Client同步他们的时间的呢?

   1)首先,主机当然需要启动这个daemon。

   2)之后,Client会向NTP Server发送出校对时间的message.

   3)然后NTP Server会送出当前的标准时间给Client。

   4)Client接受了来自Server的时间后,会据此调整自己的时间,这样就实现了网络校时。

   至于NTP这个daemon是以port123为连接的接口(使用UDP数据包),所以我们利用Time Server来进行时间同步更新时,就需要使用NTP这个软件提供的ntpdateup来进行port123的连接。

二、NTP服务器的层次概念

    由于NTP时间服务器采用类似分级架构(straum)来处理时间的同步化,所以它使用的是类似一般Server/Client的主从架构。网络社会上会提供一些主要与次要的时间服务器,这些均属于第一级与第二级的时间服务器。

    再进行NTP主机的设置时,都会选择多台上层的Time Server来作为我们这一台NTP Server的校时之用,选择堕胎的原因是因为可以避免因为某台时间服务器突然宕机时,其他主机仍然可以提供NTP主机来自我更新,然后NTP Server才提供给自己的Client端更新时间。


三、NTP服务器的安装和配置

1、所需软件与软件结构

Yum install ntp

Yum install tzdata

与时间及NTP服务器设置相关的的配置文件与重要数据文件有下面几个。

/etc/ntp.conf :就是NTP服务器的主要配置文件,也是唯一一个

/usr/share/zoneinfo/:由tzdata所提供的,为个时区的时间格式对应文件。例如我过的时区格式对应文件是/usr/share/zoneinfo/Asia/Shanghai.这个目录里面的问价与下面要谈的两个文件(clock与localtime)是有关系的。

/etc/sysconfig/clock:设置时区与是否使用UTC时钟的配置文件。每次开机候Linux会自动读取这个文件设置自己系统所默认要显示的时间。举例来说,在我们中国本地的时间设置中,这个文件内应该会出现一行ZONE=“Asia/Shanghai”的字样,这表示我们的时间配置文件要使用/usr/share/zoneinfo/Asia/Shanghai那个文件。

[root@localhost zoneinfo]# cat /etc/sysconfig/clock 

ZONE="Asia/Shanghai"

/etc/localtime:就是本地的时间配置文件。刚刚那个clock文件里面规定了适应的时间配置文件为/usr/share/zoneinfo/Asia/Shanghai,所以说这就是本地的时间了,此时Linux系统会以Shanghai那个时间配置文件为准。

至于常用于时间服务器与修改时间命令,主要有以下几个

/bin/date:用于Linux时间(软件时间)的修改与显示的命令。

/sbin/hwclock:用于BIOS时钟(硬件时钟)的修改与显示的命令。这个命令只有root才能执行,因为Linux系统上面的BIOS时间与Linux系统时间是分开的,所以使用date这个命令调整了时间之后,还需要使用hwclock才能将修改过后的时间写入BIOS中。

/usr/sbin/ntpd:主要提供NTP服务的程序。配置文件为/etc/ntp.conf

/usr/sbin/ntpdate:用于客户端的时间校正,如果不启用NTP而仅想要使用NTPclient功能的话,会用到这个命令。

2、主要配置文件ntp.conf的处理  

举例配置

   上层NTP服务器共有 tock.stdtime.gov.tw   , tick. stdtime.gov.tw   ,time. stdtime.gov.tw 三台,其中以tock.stdtime.gov.tw最为优先使用。

   不对internet提供服务,仅允许来自内部网络912.168.100.0/24的查询。

   检测BIOS时钟与Linux系统时间的差异并写入/var/lib/ntp/drift文件中。

下面来看一下如何在ntp.conf中设置权限控制。

1)利用restrict来管理权限控制

restrict参数设置方式:

restrict [你的IP] mask [netmask_IP] [parameter]

其中parameter的参数主要有以下这些。

ignore:拒绝所有类型的NTP连接。

nomodify:客户端不能使用ntpc与ntpq这两个程序来修改服务器的时间参数,但客户端仍可通过这部主机进行网络校时。

noquery:客户端不能通过使用ntpq、ntpc等命令来查询时间服务器,等于不提供NTP的网络校时。

notrap:不提供trap这个远程事件登录(remote event logging)的功能。

notrust:拒绝没有认证的客户端。

   如果没有在parameter的地方加上任何参数的话,这表示“该IP或网段不受任何限制“。一般来说,我们可以先关闭NTP的权限,然后再一个一个地启用允许登录的网段。

2)利用server设置上层NTP服务器

   上册NTP服务器的设置方式为:

   server [IP or hostname] [prefer]

  在server后端可以按接IP或主机名,最好用IP,防止修改主机名后的麻烦。那个prefer表示优先适用的服务器。

3)以driftfile记录时间差异

driftfile [可以被ntpd写入的目录或文件]

因为默认的NTP Server本身的时间计算是依据BIOS的芯片时间振荡周期频率来计算的,但是这个数值与上层Time Server不见得一致。所以NTP这个daemon(ntpd)会自动去计算我们的主机的频率与上层Time Server的频率,并且将两个频率的误差记录下来,记录下来的文件就是在driftfile后面的完整文件名所指的文件。关于文件名必须要知道:

 Driftfile后面接的文件需要使用完整路径文件名。

 该文件不能是链接文件。

 该文件所记录的数值单位为百万分之一秒(ppm)。

dirftfile 后面接的文件会被ntpd自动更新,所以他的权限一定要能够让ntpd写入才行。

4)keys[key_file]

   除了restrict来限制客户端的连接之外,我们也可以通过密匙系统来给客户端认证,如此一来,可以让主机端放心了。

[root@nhrproject jboss6]#vim /etc/ntp.conf


#1、先处理权限方面的问题,包括放行上层服务器以及开放局域网用户来源

restrict default kod nomodify notrap nopeer noquery     拒绝IPv4的用户

restrict -6 default kod nomodify notrap nopeer noquery   拒绝IPv6的用户

restrict 220.130.158.71  放行tock.stdtime.gov.tw进入本NTP服务器

restrict 59.124.196.83   放行tick. stdtime.gov.tw进入本NTP服务器


restrict 59.124.196.84   放行time. stdtime.gov.tw进入本NTP服务器

restrict 127.0.0.1       这两个是默认值

restrict -6 ::1

restrict 192.168.10.0 mask 255.255.255.0 nomodify 放行局域网来源

#2、设置主机来源,可以先把本来的下面这些内容注释掉

# Use public servers from the pool.ntp.org project.

# Please consider joining the pool (http://www.pool.ntp.org/join.html).

#server 0.rhel.pool.ntp.org iburst

#server 1.rhel.pool.ntp.org iburst

#server 2.rhel.pool.ntp.org iburst

#server 3.rhel.pool.ntp.org iburst

server 220.130.158.71 prefer  以这台主机最为优先

server 59.124.196.83

server 59.124.196.84


#3、默认时间差异分析文件与咱不用的keys,不需要改变他

driftfile /var/lib/ntp/drift

keys /etc/ntp/keys

这样就设置好了

3、NTP的启动与观察

#1、启动NTP

[root@localhost zoneinfo]# /etc/init.d/ntpd start   启动

Starting ntpd:                                             [  OK  ]

[root@localhost zoneinfo]# chkconfig ntpd on   设置开机启动

[root@localhost zoneinfo]# tail /var/log/messages  查看日志信息

Jan 28 17:09:28 localhost ntpd[33990]: Deferring DNS for 1.rhel.pool.ntp.org 1

Jan 28 17:09:28 localhost ntpd[33990]: Deferring DNS for 2.rhel.pool.ntp.org 1

Jan 28 17:09:28 localhost ntpd[33990]: Deferring DNS for 3.rhel.pool.ntp.org 1

Jan 28 17:09:28 localhost ntpd[33990]: 0.0.0.0 c016 06 restart

Jan 28 17:09:28 localhost ntpd[33990]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM

Jan 28 17:09:28 localhost ntpd[33990]: 0.0.0.0 c011 01 freq_not_set

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 0.rhel.pool.ntp.org

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 1.rhel.pool.ntp.org

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 2.rhel.pool.ntp.org

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 3.rhel.pool.ntp.org

#2、查看启动的端口

[root@localhost zoneinfo]# netstat -tlunp | grep ntp

udp    0   0 192.168.211.128:123         0.0.0.0:*       33990/ntpd          

udp    0   0 127.0.0.1:123               0.0.0.0:*       33990/ntpd 

udp    0   0 0.0.0.0:123                 0.0.0.0:*       33990/ntpd          

udp    0   0 fe80::20c:29ff:fe82:6e49:123 :::*              33990/ntpd          

udp    0   0 ::1:123                     :::*            33990/ntpd          

udp    0   0 :::123                      :::*            33990/ntpd  

#主要是UDP数据包,并且在port 123这个端口

这就表示我们的NTP服务器已经启动了不过要与上层NTP服务器连接还需要一些时间,通常启动NTP后约在15分钟内才会和上层NTP服务器顺利连接上。那要如何确认我们的NTP服务器已经顺利地更新了自己的时间呢?

 [root@localhost zoneinfo]# ntpstat   这是我自己的虚拟机,没有上层服务器

unsynchronised

  time server re-starting

   polling server every 8 s

[root@localhost zoneinfo]# ntpstat  鸟哥的例子

synchronized to NTP server (220.130.158.71) at stratum 3

time correct to within 538 ms

polling server every 128 s

这个命令可以列出我们的NTP服务器是否已经与上层连接。由上述的输出结果可以知道,时间已经校正约538ms,且每隔128秒会主动去更新时间。

[root@localhost zoneinfo]# ntpq –p

这个命令可以列出当前我们的NTP与相关上层NTP的状态。

4、安全性设置

  服务器防火墙在UDP port 123上打开

[root@localhost zoneinfo]# vi /etc/sysconfig/iptables

iptables –A INPUT –I $EXTIF –p udp –s 192.168.100.0/24 –dport 123 –j  ACCEPT

四、客户端时间更新方式

1、Linux手动校时工作:date hwclock

date MMDDhhmmYYYYY 月份 日期 小时 分钟 公元年

[root@localhost zoneinfo]# date 012809511016

date: cannot set date: Invalid argument

Sun Jan 28 09:51:00 LMT 1016

[root@localhost zoneinfo]#hwclock [-rw]

-r:read 读出当前BIOS内的时间参数

-w:write,将目前的linux系统时间写入BIOS中

查阅BIOS时间,并且写入更改过的时间

[root@localhost zoneinfo]# date ;hwclock –r

[root@localhost zoneinfo]# hwclock –w;hwclock –r;date


[root@localhost zoneinfo]# date 012809572016

Thu Jan 28 09:57:00 CST 2016

[root@localhost zoneinfo]# date

Thu Jan 28 09:57:11 CST 2016

[root@localhost zoneinfo]# hwclock -r

Thu 28 Jan 2016 05:58:18 PM CST  -0.283336 seconds

[root@localhost zoneinfo]# hwclock -w

[root@localhost zoneinfo]# hwclock -r

Thu 28 Jan 2016 09:57:30 AM CST  -0.095152 seconds

[root@localhost zoneinfo]# date

Thu Jan 28 09:57:34 CST 2016

[root@localhost zoneinfo]#

2、Linux的网络校时

因为NTP服务器本来就会与上层时间服务器进行时间的同步化,所以默认情况下,NTP服务器不可以使用ntpdate。即ntpdate与ntpd不能同时启用。

[root@localhost zoneinfo]#ntpdate 192.168.100.254 服务器

客户端最好也启动一下NTP服务,通过NTP去主动的更新时间。

[root@localhost zoneinfo]#ntpdate 192.168.100.254

[root@localhost zoneinfo] #vi /etc/ntp.conf

restrict 192.168.100.254  放行服务器来源

server 192.168.100.254   这就是服务器

[root@localhost zoneinfo]#/etc/init.d/ntpd start

[root@localhost zoneinfo]#chkconfig ntpd on

这样Client计算机就会主动到NTP服务器上去更新时间了。

不这样也可以

[root@localhost zoneinfo]#vi /etc/crontab

10 5 * * * root (/usr/sbin/ntpdate tock.ssdtime.gov.tw && /sbin/hwclock –w) &>/dev/null

这样每天05:10LINUX系统就会自动进行网络校时。

本文转自aaa超超aaa 51CTO博客,原文链接:http://blog.51cto.com/10983441/1739431



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

云安全开发者的大本营

其他文章