······【NTP服务概述】
NTP(Network Time Protocol)服务主要用于同步服务器时间。
nptd 可以运行在多种模式下,包括对称的 主动、被动(active/passive),客户端、服务端(client/server),广播、多播(broadcast/multicase/manycase)。
通常运行模式是以Daemon方式持续跟踪同步时钟源时间;当然也可以只运行一次,从外部时钟源同步时间(从上次纪录的频度误差文件中读取频度误差值)。
广播与多播模式下客户端能够自动发现时钟源服务器,并计算各个服务器的时延然后自动完成配置。
NTP服务端口为123,使用UDP协议传输。
NTP使用树状的层级(stratum)时钟源,层级数字越小优先级越高,低层级的NTP服务同步高层级的NTP服务。
低层级的服务同时也可以向更低层级的NTP服务提供时钟校准功能。
0层的服务器采用的是原子钟、GPS钟等物理设备,stratum 1与stratum 0 是直接相连的,往后的stratum与上一层stratum通过网络相连,同一层的server也可以交互。
2014年暴露的NTP服务重大漏洞,ntp-4.2.8p9之前的版本都会受影响。造成基于网络包发射的分布式拒绝服务和本地负载升高导致的提权风险。
出于安全考虑,NTP服务器尽量不开放无用的端口,添加有效restrict条目,尽快升级最新版本。
该文档不包含NTP加密传输和某些冷门的配置,如有需要,可以自行查阅man文档: man ntp_auth, man ntp.conf等。
······【ntp配置文件详解】
【时钟源配置】
server address |
选取的参考时钟源 |
peer address |
与本机一起作为共同时钟源对外服务,在服务启动初始化时,两台服务器会自行协议主备关系 |
broadcast address |
作为时钟源向指定广播域发送时钟信息 |
manycastclient address |
接受广播的NTP信息客户端配置 |
【时钟源配置常用选项】
burst |
时钟源可以访问时发送8个包,默认发送间隔2秒。只用于server |
iburst |
时钟源不可访问时发送8个包,默认发送间隔2秒。只用于server |
minpool/maxpool |
最小/最大轮询时间间隔,间隔为2的minpool/maxpool次方,取值4-17。只用于peer和server命令。 |
noselect |
指定时钟源不再有效,只用于peer和server命令。 |
prefer |
指定时钟源标志为偏好,只用于peer和server命令。 |
ttl |
指定报文生存周期,仅用于broadcast和manycastclient命令。 |
【driftfile】
将自己主机的bios芯片震荡频率与上层的Time server频率比较,将误差记录在这个文件里,条目设置格式:
driftfile /etc/ntp/drift |
【pidfile】
记录应用程序进程ID(PID)文件保存的路径,设置格式:
pidfile /var/run/ntpd.pid |
【logfile】
日志文件保存路径,设置格式:
logfile /var/log/ntp.log |
【tinker】
该命令修改当前系统给定的时钟统合算法(the clock discipline algorithm),和芯片硬件相关。该默认值已经优化过了,一般不需修改。
常用字段解释如下:
panic
指定一个时间偏移跃变的阈值,默认是1000秒。
如果设置为0,该功能将会关闭,任意一个时钟偏移同步都将会被接受。
就是说默认情况下如果时间偏移超过1000秒,将会判断为异常时间,不会进行同步,但是如果设置成0就会禁用这一个功能,当ntp server时间异常波动大于1000秒时,会导致本地的时间发生突变,这可能会导致某些应用异常。
step
指定时间同步步长,单位是秒,默认是0.128秒。
如果设置为0,该进步式时间调整功能将会关闭。注意:如果改值设置为0或者大于0.5秒时,操作系统内核的时间discipline也会被禁用。
······【访问权限配置】
ntpd实现了基于网段/掩码的通用权限控制列表,主要目的是为了防止有问题的外部时钟源影响本地时钟服务,restrict意为允许指定IP访问,并使用NTP部分功能,discard定义了发包间隔时间的规则,超过发送间隔的报文将被丢弃。
设置格式为:
discard [ average avg ] [ minimum min ] [ monitor prob ] restrict numericaddress [mask numeric_mask] [flag] [...] |
【访问权限配置常用Flag】
ignore |
忽略匹配源目的地址发送的所有包 |
noquery |
忽略ntpq和ntpdc查询命令,不影响ntpd服务 |
nomodify |
忽略修改NTP服务器状态的命令(如修改运行时间,配置等命令) |
notrap |
拒绝向某些主机提供模式6的trap服务,trap服务为NTP的子系统,主要为远程日志程序所使用 |
noserve |
除了ntpq和ntpdc,拒绝所有报文 |
nopeer |
拒绝peer, broadcast,manycastclient的连接报文 |
······【配置示例】
#记录系统时钟频率差异文件 driftfile /var/lib/ntp/drift
# pid: 进程ID号文件 pidfile /var/run/ntpd.pid
# ntp服务记录日志路径 logfile /var/log/ntp.log
# 不准外部请求修改/查询本地ntp配置,-6意为IPv6地址 restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1
# 默认的本地时钟源,没有NTP服务可用时,使用它为局域网用户提供服务,这里层级可以设置低一点 server 127.127.1.0 fudge 127.127.1.0 stratum 5
# NTP服务的ACL权限控制,放通外网NTP服务器 restrict ntp1.aliyun.com restrict ntp2.aliyun.com
# 选择以下外网服务器,拒绝外部查询和配置更改等请求 server ntp1.aliyun.com iburst minpoll 4 maxpoll 10 server ntp2.aliyun.com iburst minpoll 4 maxpoll 10 |
······【附录:有效的国内时钟源服务器】
ntp1.aliyun.com (阿里云ntp服务器地址,从ntp1到ntp6)
us.ntp.org.cn (美国)
cn.ntp.org.cn (中国)