标签 NTP 下的文章

最重要的公共服务之一就是 报时 timekeeping ,但是很多人并没有意识到这一点。大多数公共时间服务器都是由志愿者管理,以满足不断增长的需求。这里学习一下如何运行你自己的时间服务器,为基础公共利益做贡献。(查看 在 Linux 上使用 NTP 保持精确时间 去学习如何设置一台局域网时间服务器)

著名的时间服务器滥用事件

就像现实生活中任何一件事情一样,即便是像时间服务器这样的公益项目,也会遭受不称职的或者恶意的滥用。

消费类网络设备的供应商因制造了大混乱而臭名昭著。我回想起的第一件事发生在 2003 年,那时,NetGear 在它们的路由器中硬编码了威斯康星大学的 NTP 时间服务器地址。使得时间服务器的查询请求突然增加,随着 NetGear 卖出越来越多的路由器,这种情况越发严重。更有意思的是,路由器的程序设置是每秒钟发送一次请求,这将使服务器难堪重负。后来 Netgear 发布了升级固件,但是,升级他们的设备的用户很少,并且他们的其中一些用户的设备,到今天为止,还在不停地每秒钟查询一次威斯康星大学的 NTP 服务器。Netgear 给威斯康星大学捐献了一些钱,以帮助弥补他们带来的成本增加,直到这些路由器全部淘汰。类似的事件还有 D-Link、Snapchat、TP-Link 等等。

对 NTP 协议进行反射和放大,已经成为发起 DDoS 攻击的一个选择。当攻击者使用一个伪造的目标受害者的源地址向时间服务器发送请求,称为反射攻击;攻击者发送请求到多个服务器,这些服务器将回复请求,这样就使伪造的源地址受到轰炸。放大攻击是指一个很小的请求收到大量的回复信息。例如,在 Linux 上,ntpq 命令是一个查询你的 NTP 服务器并验证它们的系统时间是否正确的很有用的工具。一些回复,比如,对端列表,是非常大的。组合使用反射和放大,攻击者可以将 10 倍甚至更多带宽的数据量发送到被攻击者。

那么,如何保护提供公益服务的公共 NTP 服务器呢?从使用 NTP 4.2.7p26 或者更新的版本开始,它们可以帮助你的 Linux 发行版不会发生前面所说的这种问题,因为它们都是在 2010 年以后发布的。这个发行版都默认禁用了最常见的滥用攻击。目前,最新版本是 4.2.8p10,它发布于 2017 年。

你可以采用的另一个措施是,在你的网络上启用入站和出站过滤器。阻塞宣称来自你的网络的数据包进入你的网络,以及拦截发送到伪造返回地址的出站数据包。入站过滤器可以帮助你,而出站过滤器则帮助你和其他人。阅读 BCP38.info 了解更多信息。

层级为 0、1、2 的时间服务器

NTP 有超过 30 年的历史了,它是至今还在使用的最老的因特网协议之一。它的用途是保持计算机与世界标准时间(UTC)的同步。NTP 网络是分层组织的,并且同层的设备是对等的。 层次 Stratum 0 包含主报时设备,比如,原子钟。层级 1 的时间服务器与层级 0 的设备同步。层级 2 的设备与层级 1 的设备同步,层级 3 的设备与层级 2 的设备同步。NTP 协议支持 16 个层级,现实中并没有使用那么多的层级。同一个层级的服务器是相互对等的。

过去很长一段时间内,我们都为客户端选择配置单一的 NTP 服务器,而现在更好的做法是使用 NTP 服务器地址池,它使用轮询的 DNS 信息去共享负载。池地址只是为客户端服务的,比如单一的 PC 和你的本地局域网 NTP 服务器。当你运行一台自己的公共服务器时,你不用使用这些池地址。

公共 NTP 服务器配置

运行一台公共 NTP 服务器只有两步:设置你的服务器,然后申请加入到 NTP 服务器池。运行一台公共的 NTP 服务器是一种很高尚的行为,但是你得先知道这意味着什么。加入 NTP 服务器池是一种长期责任,因为即使你加入服务器池后,运行了很短的时间马上退出,然后接下来的很多年你仍然会接收到请求。

你需要一个静态的公共 IP 地址,一个至少 512Kb/s 带宽的、可靠的、持久的因特网连接。NTP 使用的是 UDP 的 123 端口。它对机器本身要求并不高,很多管理员在其它的面向公共的服务器(比如,Web 服务器)上顺带架设了 NTP 服务。

配置一台公共的 NTP 服务器与配置一台用于局域网的 NTP 服务器是一样的,只需要几个配置。我们从阅读 协议规则 开始。遵守规则并注意你的行为;几乎每个时间服务器的维护者都是像你这样的志愿者。然后,从 StratumTwoTimeServers 中选择 4 到 7 个层级 2 的上游服务器。选择的时候,选取地理位置上靠近(小于 300 英里的)你的因特网服务提供商的上游服务器,阅读他们的访问规则,然后,使用 pingmtr 去找到延迟和跳数最小的服务器。

以下的 /etc/ntp.conf 配置示例文件,包括了 IPv4 和 IPv6,以及基本的安全防护:

# stratum 2 server list
server servername_1 iburst
server servername_2 iburst
server servername_3 iburst
server servername_4 iburst
server servername_5 iburst

# access restrictions
restrict -4 default kod noquery nomodify notrap nopeer limited
restrict -6 default kod noquery nomodify notrap nopeer limited

# Allow ntpq and ntpdc queries only from localhost
restrict 127.0.0.1
restrict ::1

启动你的 NTP 服务器,让它运行几分钟,然后测试它对远程服务器的查询:

$ ntpq -p
 remote refid st t when poll reach delay offset jitter
=================================================================
+tock.no-such-ag 200.98.196.212 2 u 36 64 7 98.654 88.439 65.123
+PBX.cytranet.ne 45.33.84.208 3 u 37 64 7 72.419 113.535 129.313
*eterna.binary.n 199.102.46.70 2 u 39 64 7 92.933 98.475 56.778
+time.mclarkdev. 132.236.56.250 3 u 37 64 5 111.059 88.029 74.919

目前表现很好。现在从另一台 PC 上使用你的 NTP 服务器名字进行测试。以下的示例是一个正确的输出。如果有不正确的地方,你将看到一些错误信息。

$ ntpdate -q yourservername
server 66.96.99.10, stratum 2, offset 0.017690, delay 0.12794
server 98.191.213.2, stratum 1, offset 0.014798, delay 0.22887
server 173.49.198.27, stratum 2, offset 0.020665, delay 0.15012
server 129.6.15.28, stratum 1, offset -0.018846, delay 0.20966
26 Jan 11:13:54 ntpdate[17293]: adjust time server 98.191.213.2 offset 0.014798 sec

一旦你的服务器运行的很好,你就可以向 manage.ntppool.org 申请加入池中。

查看官方的手册 分布式网络时间服务器(NTP) 学习所有的命令、配置选项、以及高级特性,比如,管理、查询、和验证。访问以下的站点学习关于运行一台时间服务器所需要的一切东西。

通过来自 Linux 基金会和 edX 的免费课程 “Linux 入门” 学习更多 Linux 的知识。


via: https://www.linux.com/learn/intro-to-linux/2018/2/how-run-your-own-public-time-server-linux

作者:CARLA SCHRODER 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何保持正确的时间,如何使用 NTP 和 systemd 让你的计算机在不滥用时间服务器的前提下保持同步。

它的时间是多少?

让 Linux 来告诉你时间的时候,它是很奇怪的。你可能认为是使用 time 命令来告诉你时间,其实并不是,因为 time 只是一个测量一个进程运行了多少时间的计时器。为得到时间,你需要运行的是 date 命令,你想查看更多的日期,你可以运行 cal 命令。文件上的时间戳也是一个容易混淆的地方,因为根据你的发行版默认情况不同,它一般有两种不同的显示方法。下面是来自 Ubuntu 16.04 LTS 的示例:

$ ls -l
drwxrwxr-x 5 carla carla 4096 Mar 27 2017 stuff
drwxrwxr-x 2 carla carla 4096 Dec 8 11:32 things
-rw-rw-r-- 1 carla carla 626052 Nov 21 12:07 fatpdf.pdf
-rw-rw-r-- 1 carla carla 2781 Apr 18 2017 oddlots.txt

有些显示年,有些显示时间,这样的方式让你的文件更混乱。GNU 默认的情况是,如果你的文件在六个月以内,则显示时间而不是年。我想这样做可能是有原因的。如果你的 Linux 是这样的,尝试用 ls -l --time-style=long-iso 命令,让时间戳用同一种方式去显示,按字母顺序排序。请查阅 如何更改 Linux 的日期和时间:简单的命令 去学习 Linux 上管理时间的各种方法。

检查当前设置

NTP —— 网络时间协议,它是保持计算机正确时间的老式方法。ntpd 是 NTP 守护程序,它通过周期性地查询公共时间服务器来按需调整你的计算机时间。它是一个简单的、轻量级的协议,使用它的基本功能时设置非常容易。systemd 通过使用 systemd-timesyncd.service 已经越俎代庖地 “干了 NTP 的活”,它可以用作 ntpd 的客户端。

在我们开始与 NTP “打交道” 之前,先花一些时间来了检查一下当前的时间设置是否正确。

你的系统上(至少)有两个时钟:系统时间 —— 它由 Linux 内核管理,第二个是你的主板上的硬件时钟,它也称为实时时钟(RTC)。当你进入系统的 BIOS 时,你可以看到你的硬件时钟的时间,你也可以去改变它的设置。当你安装一个新的 Linux 时,在一些图形化的时间管理器中,你会被询问是否设置你的 RTC 为 UTC( 世界标准时间 Coordinated Universal Time )时区,因为所有的时区和夏令时都是基于 UTC 的。你可以使用 hwclock 命令去检查:

$ sudo hwclock --debug
hwclock from util-linux 2.27.1
Using the /dev interface to the clock.
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2018/01/22 22:14:31
Hw clock time : 2018/01/22 22:14:31 = 1516659271 seconds since 1969
Time since last adjustment is 1516659271 seconds
Calculated Hardware Clock drift is 0.000000 seconds
Mon 22 Jan 2018 02:14:30 PM PST .202760 seconds

Hardware clock is on UTC time 表明了你的计算机的 RTC 是使用 UTC 时间的,虽然它把该时间转换为你的本地时间。如果它被设置为本地时间,它将显示 Hardware clock is on local time

你应该有一个 /etc/adjtime 文件。如果没有的话,使用如下命令同步你的 RTC 为系统时间,

$ sudo hwclock -w

这个命令将生成该文件,内容看起来类似如下:

$ cat /etc/adjtime
0.000000 1516661953 0.000000
1516661953
UTC

新发明的 systemd 方式是去运行 timedatectl 命令,运行它不需要 root 权限:

$ timedatectl
 Local time: Mon 2018-01-22 14:17:51 PST
 Universal time: Mon 2018-01-22 22:17:51 UTC
 RTC time: Mon 2018-01-22 22:17:51
 Time zone: America/Los_Angeles (PST, -0800)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

RTC in local TZ: no 表明它使用 UTC 时间。那么怎么改成使用本地时间?这里有许多种方法可以做到。最简单的方法是使用一个图形配置工具,比如像 openSUSE 中的 YaST。你也可使用 timedatectl

$ timedatectl set-local-rtc 0

或者编辑 /etc/adjtime,将 UTC 替换为 LOCAL

systemd-timesyncd 客户端

现在,我已经累了,但是我们刚到非常精彩的部分。谁能想到计时如此复杂?我们甚至还没有了解到它的皮毛;阅读 man 8 hwclock 去了解你的计算机如何保持时间的详细内容。

systemd 提供了 systemd-timesyncd.service 客户端,它可以查询远程时间服务器并调整你的本地系统时间。在 /etc/systemd/timesyncd.conf 中配置你的(时间)服务器。大多数 Linux 发行版都提供了一个默认配置,它指向他们维护的时间服务器上,比如,以下是 Fedora 的:

[Time]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org

你可以输入你希望使用的其它时间服务器,比如你自己的本地 NTP 服务器,在 NTP= 行上输入一个以空格分隔的服务器列表。(别忘了取消这一行的注释)NTP= 行上的任何内容都将覆盖掉 FallbackNTP 行上的配置项。

如果你不想使用 systemd 呢?那么,你将需要 NTP 就行。

配置 NTP 服务器和客户端

配置你自己的局域网 NTP 服务器是一个非常好的实践,这样你的网内计算机就不需要不停查询公共 NTP 服务器。在大多数 Linux 上的 NTP 都来自 ntp 包,它们大多都提供 /etc/ntp.conf 文件去配置时间服务器。查阅 NTP 时间服务器池 去找到你所在的区域的合适的 NTP 服务器池。然后在你的 /etc/ntp.conf 中输入 4 - 5 个服务器,每个服务器用单独的一行:

driftfile /var/ntp.drift
logfile /var/log/ntp.log
server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org

driftfile 告诉 ntpd 它需要保存用于启动时使用时间服务器快速同步你的系统时钟的信息。而日志也将保存在他们自己指定的目录中,而不是转储到 syslog 中。如果你的 Linux 发行版默认提供了这些文件,请使用它们。

现在去启动守护程序;在大多数主流的 Linux 中它的命令是 sudo systemctl start ntpd。让它运行几分钟之后,我们再次去检查它的状态:

$ ntpq -p
 remote refid st t when poll reach delay offset jitter
==============================================================
+dev.smatwebdesi 192.168.194.89 3 u 25 64 37 92.456 -6.395 18.530
*chl.la 127.67.113.92 2 u 23 64 37 75.175 8.820 8.230
+four0.fairy.mat 35.73.197.144 2 u 22 64 37 116.272 -10.033 40.151
-195.21.152.161 195.66.241.2 2 u 27 64 37 107.559 1.822 27.346

我不知道这些内容是什么意思,但重要的是,你的守护程序已经与时间服务器开始对话了,而这正是我们所需要的。你可以去运行 sudo systemctl enable ntpd 命令,永久启用它。如果你的 Linux 没有使用 systemd,那么,给你留下的家庭作业就是找出如何去运行 ntpd

现在,你可以在你的局域网中的其它计算机上设置 systemd-timesyncd,这样它们就可以使用你的本地 NTP 服务器了,或者,在它们上面安装 NTP,然后在它们的 /etc/ntp.conf 上输入你的本地 NTP 服务器。

NTP 服务器会受到攻击,而且需求在不断增加。你可以通过运行你自己的公共 NTP 服务器来提供帮助。下周我们将学习如何运行你自己的公共服务器。

通过来自 Linux 基金会和 edX 的免费课程 “Linux 入门” 来学习更多 Linux 的知识。


via: https://www.linux.com/learn/intro-to-linux/2018/1/keep-accurate-time-linux-ntp

作者:CARLA SCHRODER 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

默认的情况下,我们的 ntpd/NTP 服务器会监听所有的端口或者 IP 地址,也就是:0.0.0.0:123。 怎么才可以在一个 Linux 或是 FreeBSD Unix 服务器上,确保只监听特定的 IP 地址,比如 localhost 或者是 192.168.1.1:123

NTP 是 网络时间协议 Network Time Protocol 的首字母简写,这是一个用来同步两台电脑之间时间的协议。ntpd 是一个操作系统守护进程,可以设置并且保证系统的时间与互联网标准时间服务器同步。

NTP 使用 /etc/directory 之下的 ntp.conf 作为配置文件。

/etc/ntp.conf 之中的端口指令

你可以通过设置端口命令来防止 ntpd 监听 0.0.0.0:123,语法如下:

interface listen IPv4|IPv6|all
interface ignore IPv4|IPv6|all
interface drop IPv4|IPv6|all

上面的配置可以使 ntpd 监听那个地址或者不出来任何请求而直接丢弃。ignore 会防止打开匹配的地址,drop 会导致 ntpd 打开该地址并丢弃所有接收到的包,而不做任何检查。举个例子,如果要忽略所有端口之上的监听,加入下面的语句到 /etc/ntp.conf

interface ignore wildcard

如果只监听 127.0.0.1 和 192.168.1.1 则是这样:

interface listen 127.0.0.1
interface listen 192.168.1.1

这是我 FreeBSD 云服务器上的样例 /etc/ntp.conf 文件:

$ egrep -v '^#|$^' /etc/ntp.conf

样例输出为:

tos minclock 3 maxclock 6
pool 0.freebsd.pool.ntp.org iburst
restrict    default limited kod nomodify notrap noquery nopeer
restrict -6 default limited kod nomodify notrap noquery nopeer
restrict    source  limited kod nomodify notrap noquery
restrict 127.0.0.1
restrict -6 ::1
leapfile "/var/db/ntpd.leap-seconds.list"
interface ignore wildcard
interface listen 172.16.3.1
interface listen 10.105.28.1

重启 ntpd

在 FreeBSD Unix 之上重新加载/重启 ntpd:

$ sudo /etc/rc.d/ntpd restart

或者 在 Debian 和 Ubuntu Linux 之上使用下面的命令

$ sudo systemctl restart ntp

或者 在 CentOS/RHEL 7/Fedora Linux 之上使用下面的命令

$ sudo systemctl restart ntpd

校验

使用 netstatss 命令来检查 ntpd 只绑定到了特定的 IP 地址:

$ netstat -tulpn | grep :123

或是:

$ ss -tulpn | grep :123

样例输出:

udp        0      0 10.105.28.1:123         0.0.0.0:*                           -               
udp        0      0 172.16.3.1:123          0.0.0.0:*                           -

在 FreeBSD Unix 服务器上使用 sockstat 命令

$ sudo sockstat
$ sudo sockstat -4
$ sudo sockstat -4 | grep :123

样例输出:

root     ntpd       59914 22 udp4   127.0.0.1:123         *:*
root     ntpd       59914 24 udp4   127.0.1.1:123         *:*

作者是 nixCraft 的创始人并且是一位经验丰富的系统管理员、DevOps 工程师,也是一名 Linux 操作系统和 Unix shell 脚本的训练师。他为全球不同行业,包括 IT、教育业、安全防护、空间研究和非营利性组织的客户工作。关注他的 Twitter, Facebook, Google+


via: https://www.cyberciti.biz/faq/how-to-bind-ntpd-to-specific-ip-addresses-on-linuxunix/

作者:Vivek Gite 译者:Drshu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

这系列共三部分,首先,Chirs Binnie 探讨了在一个合理的架构中 NTP 服务的重要性。

鲜有互联网上的服务能如时间服务一样重要。影响你系统计时的小问题可能需要一两天才能被发现,而这些不期而遇的问题所带来的连锁反应几乎总是让人伤脑筋的。

设想你的备份服务器与网络时间协议(NTP)服务器断开连接,过了几天,引起了几小时的时间偏差。你的同事照常九点上班,发现需要大量带宽的备份服务器消耗了所有网络资源,这也就意味着他们在备份完成之前几乎不能登录工作台开始他们的日常工作。

这系列共三部分,首先,我将提供简要介绍 NTP 来防止这种困境的发生。从邮件的时间戳到记录你工作的进展,NTP 服务对于一个合理的架构是如此的重要。

可以把如此重要的 NTP 服务器(其他的服务器从此获取时钟数据)看做是倒置金字塔的底部,它被称之为 一层 Stratum 1 服务器(也被称为“ primary ”服务器)。这些服务器与国家级时间服务(称为 零层 Stratum 0 ,通常这些设备是是原子钟和 GPS 钟之类的装置)直接交互。与之安全通讯的方法很多,例如通过卫星或者无线电。

令人惊讶的是,几乎所有的大型企业都会连接 二层 Stratum 2 服务器(或“ 次级 secondary ”服务器)而是不是主服务器。如你所料,二层服务器和一层直接同步。如果你觉得大公司可能有自己的本地 NTP 服务器(至少两个,通常三个,为了灾难恢复之用),这些就是三层服务器。这样,三层服务器将连接上层预定义的次级服务器,负责任地传递时间给客户端和服务器,精确地反馈当前时间。

由简单设计而构成的 NTP 可以工作的前提是——多亏了通过互联网跨越了大范围的地理距离——在确认时间完全准确之前,来回时间(包什么时候发出和多少秒后被收到)都会被清楚记录。设置电脑的时间的背后要比你想象的复杂得多,如果你不相信,那这神奇的网页值得一看。

再次重提一遍,为了确保你的架构如预期般工作,NTP 是如此的关键,你的 NTP 与层次服务器之间的连接必须是完全可信赖并且能提供额外的冗余,才能保持你的内部时钟同步。在 NTP 主站有一个有用的一层服务器列表。

正如你在列表所见,一些 NTP 一层服务器以 “ClosedAccount” 状态运行;这些服务器需要事先接受才可以使用。但是只要你完全按照他们的使用引导做,“OpenAccess” 服务器是可以用于轮询使用的。而 “RestrictedAccess” 服务器有时候会因为大量客户端访问或者轮询间隙太小而受限。另外有时候也有一些专供某种类型的组织使用,例如学术界。

尊重我的权威

在公共 NTP 服务器上,你可能发现遵从某些规则的使用规范。现在让我们看看其中一些。

“iburst” 选项作用是如果在一个标准的轮询间隔内没有应答,客户端会发送一定数量的包(八个包而不是通常的一个)给 NTP 服务器。如果在短时间内呼叫 NTP 服务器几次,没有出现可辨识的应答,那么本地时间将不会变化。

不像 “iburst” ,按照 NTP 服务器的通用规则, “burst” 选项一般不允许使用(所以不要用它!)。这个选项不仅在轮询间隔发送大量包(明显又是八个),而且也会在服务器能正常使用时这样做。如果你在高层服务器持续发送包,甚至是它们在正常应答时,你可能会因为使用 “burst” 选项而被拉黑。

显然,你连接服务器的频率造成了它的负载差异(和少量的带宽占用)。使用 “minpoll” 和 “maxpoll” 选项可以本地设置频率。然而,根据连接 NTP 服务器的规则,你不应该分别修改其默认的 64 秒和 1024 秒。

此外,需要提出的是客户应该重视那些请求时间的服务器发出的“ 亲一下就死(死亡之吻) Kiss-Of-Death ” (KOD)消息。如果 NTP 服务器不想响应某个特定的请求,就像路由和防火墙技术那样,那么它最有可能的就是简单地遗弃或吞没任何相关的包。

换句话说,接受到这些数据的服务器并不需要特别处理这些包,简单地丢弃这些它认为这不值得回应的包即可。你可以想象,这并不是特别好的做法,有时候礼貌地问客户是否中止或停止比忽略请求更为有效。因此,这种特别的包类型叫做 KOD 包。如果一个客户端被发送了这种不受欢迎的 KOD 包,它应该记住这个发回了拒绝访问标志的服务器。

如果从该服务器收到不止一个 KOD 包,客户端会猜想服务器上发生了流量限速的情况(或类似的)。这种情况下,客户端一般会写入本地日志,提示与该服务器的交流不太顺利,以备将来排错之用。

牢记,出于显而易见的原因,关键在于 NTP 服务器的架构应该是动态的。因此,不要给你的 NTP 配置硬编码 IP 地址是非常重要的。通过使用 DNS 域名,个别服务器断开网络时服务仍能继续进行,而 IP 地址空间也能重新分配,并且可引入简单的负载均衡(具有一定程度的弹性)。

请别忘了我们也需要考虑呈指数增长的物联网(IoT),这最终将包括数以亿万计的新装置,意味着这些设备都需要保持正确时间。硬件卖家无意(或有意)设置他们的设备只能与一个提供者的(甚至一个) NTP 服务器连接终将成为过去,这是一个非常麻烦的问题。

你可能会想象,随着买入和上线更多的硬件单元,NTP 基础设施的拥有者大概不会为相关的费用而感到高兴,因为他们正被没有实际收入所困扰。这种情形并非杞人忧天。头疼的问题多呢 -- 由于 NTP 流量导致基础架构不堪重负 -- 这在过去几年里已发生过多次。

在下面两篇文章里,我将着重于一些重要的 NTP 安全配置选项和描述服务器的搭建。


via: https://www.linux.com/learn/arrive-time-ntp-part-1-usage-overview

作者:CHRIS BINNIE 译者:XYenChi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

NTP 是通过网络来同步时间的一种 TCP/IP 协议。通常客户端向服务器请求当前的时间,并根据结果来设置其时钟。

这个描述是挺简单的,实现这一功能却是极为复杂的 - 首先要有多层 NTP 服务器,第一层 NTP 服务器连接原子时钟,第二层、第三层服务器则担起负载均衡的责任,以处理因特网传来的所有请求。另外,客户端可能也超乎你想象的复杂 - 它必须排除通讯延迟,调整时间的同时不干扰其它在服务器中运行的进程。幸运的是,所有的这些复杂性都进行了封装,你是不可见也不需要见到的。

在 Ubuntu 中,是使用 ntpdatentpd 来同步时间的。

timedatectl

在最新的 Ubuntu 版本中,timedatectl 替代了老旧的 ntpdate。默认情况下,timedatectl 在系统启动的时候会立刻同步时间,并在稍后网络连接激活后通过 socket 再次检查一次。

如果已安装了 ntpdate / ntptimedatectl 会退而让你使用之前的设置。这样确保了两个时间同步服务不会相互冲突,同时在你升级的时候还保留原本的行为和配置。但这也意味着从旧版本的发行版升级时 ntp/ntpdate 仍会安装,因此会导致新的基于 systemd 的时间服务被禁用。

timesyncd

在最新的 Ubuntu 版本中,timesyncd 替代了 ntpd 的客户端的部分。默认情况下 timesyncd 会定期检测并同步时间。它还会在本地存储更新的时间,以便在系统重启时做时间单步调整。

通过 timedatectltimesyncd 设置的当前时间状态和时间配置,可以使用 timedatectl status 命令来进行确认。

timedatectl status
      Local time: Fri 2016-04-29 06:32:57 UTC
  Universal time: Fri 2016-04-29 06:32:57 UTC
        RTC time: Fri 2016-04-29 07:44:02
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no

如果安装了 NTP,并用它替代 timedatectl 来同步时间,则 NTP synchronized 将被设置为 yes

timedatectltimesyncd 用来获取时间的 nameserver 可以通过 /etc/systemd/timesyncd.conf 来指定,另外在 /etc/systemd/timesyncd.conf.d/ 下还有灵活的附加配置文件。

ntpdate

由于 timedatectl 的存在,各发行版已经弃用了 ntpdate,默认不再进行安装。如果你安装了,它会在系统启动的时候根据 Ubuntu 的 NTP 服务器来设置你电脑的时间。之后每当一个新的网络接口启动时,它就会重新尝试同步时间 —— 在这期间只要其涵盖的时间差不是太大,它就会慢慢偏移时间。该行为可以通过 -B/-b 开关来进行控制。

ntpdate ntp.ubuntu.com

时间服务器

默认情况下,基于 systemd 的工具都是从 ntp.ubuntu.com 请求时间同步的。经典的基于 ntpd 的服务基本上都是使用 [0-3].ubuntu.pool.ntp.org 池中的 2.ubuntu.pool.ntp.org,还有 ntp.ubuntu.com,此外需要的话还支持 IPv6。如果想强制使用 IPv6,可以使用 ipv6.ntp.ubuntu.com,不过这并非默认配置。

ntpd

ntp 的守护进程 ntpd 会计算你的系统时钟的时间偏移量并且持续的进行调整,所以不会出现时间差距较大的更正,比如说,不会导致不连续的日志。该进程只花费少量的进程资源和内存,但对于现代的服务器来说实在是微不足道的了。

安装

要安装 ntpd,在终端命令行中输入:

sudo apt install ntp

配置

编辑 /etc/ntp.conf —— 增加/移除 server 行。默认配置有以下服务器:

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

修改配置文件之后,你需要重新加载 ntpd

sudo systemctl reload ntp.service

查看状态

使用 ntpq 来查看更多信息:

# sudo ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+stratum2-2.NTP. 129.70.130.70    2 u    5   64  377   68.461  -44.274 110.334
+ntp2.m-online.n 212.18.1.106     2 u    5   64  377   54.629  -27.318  78.882
*145.253.66.170  .DCFa.           1 u   10   64  377   83.607  -30.159  68.343
+stratum2-3.NTP. 129.70.130.70    2 u    5   64  357   68.795  -68.168 104.612
+europium.canoni 193.79.237.14    2 u   63   64  337   81.534  -67.968  92.792

PPS 支持

从 Ubuntu 16.04 开始,ntp 支持 PPS 规范,给 ntp 提供了本地时间源,以提供更高的精度。查看下边列出的链接来获取更多配置信息。

参考资料


via: https://help.ubuntu.com/lts/serverguide/NTP.html

作者:Ubuntu 译者:GHLandy 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

US-CERT 披露,在 ntpd 中最近发现了大量安全缺陷。ntpd 是 网络时间协议 NTP 的服务进程,绝大多数的服务器和各种设备都采用它来处理时间相关的任务。

虽然有多种 NTP 的服务进程,但是我们一般说的都是指 NTP.org 的 ntpd 服务进程,它也是大部分服务器和设备所用的版本。在今年的一月四月它分别修复了两大批安全漏洞。

据 Cisco 说,一些漏洞会导致 DoS 攻击或者甚至跳过认证过程。Cisco 是负责推动对 NTP 进行安全评估的 Linux 基金会核心基础架构计划 Linux Foundation Core Infrastructure Initiative 的成员。

由于各种智能设备都需要时间相关的功能,所以很多的设备都采用了 NTP 协议及 NTP.org 的服务进程,以确保系统时钟同步一致。

在这个协议中发现的安全问题是非常严重的,因为这会让攻击者非常容易地造成破坏。

NTP ——通向各个网络

在两周前,两位安全研究人员发现了 NTP 服务进程中的安全缺陷,他们已经开发了一个通过网络进行攻击的漏洞验证程序,并使用它来模仿 NTP 通讯,从而可以利用臭名昭著的 1970 漏洞让 iOS 设备变砖

除了这个漏洞缺陷之外,Web 安全厂商也都知道, NTP 协议也是最常见的发起 DDoS 攻击的方式之一。

US-CERT 提请网站管理员和系统管理员们对此引起重视,并打上最新的补丁。该组织已经列出了受到 NTP.org 的 ntpd 服务进程中安全漏洞影响的厂商名称,多达 75 家,这里包括苹果、思科、谷歌和 VMWare 等等著名厂商。

管理员们应该尽快升级其设备固件和服务器软件到最新的版本(4.2.8p7)。