如何在Linux上运行你自己的公共时间服务器

2018-04-16 14:52:22 42浏览

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


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

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

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

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

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

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

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

NTP有超过30年的历史了,它是至今还在使用的最老的因特网协议之一。它的用途是保持计算机与世界标准时间(UTC)的同步。NTP网络是分层组织的,并且同层的设备是对等的。层次Stratum0包含主报时设备,比如,原子钟。层级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英里的)你的因特网服务提供商的上游服务器,阅读他们的访问规则,然后,使用ping和mtr去找到延迟和跳数最小的服务器。

以下的/etc/ntp.conf配置示例文件,包括了IPv4和IPv6,以及基本的安全防护:
  #stratum2serverlist
  serverservername_1iburst
  serverservername_2iburst
  serverservername_3iburst
  serverservername_4iburst
  serverservername_5iburst
  #accessrestrictions
  restrict-4defaultkodnoquerynomodifynotrapnopeerlimited
  restrict-6defaultkodnoquerynomodifynotrapnopeerlimited
  #Allowntpqandntpdcqueriesonlyfromlocalhost
  restrict127.0.0.1
  restrict::1

启动你的NTP服务器,让它运行几分钟,然后测试它对远程服务器的查询:
  $ntpq-p
  remoterefidsttwhenpollreachdelayoffsetjitter
=================================================================
  +tock.no-such-ag200.98.196.2122u3664798.65488.43965.123
  +PBX.cytranet.ne45.33.84.2083u3764772.419113.535129.313
  *eterna.binary.n199.102.46.702u3964792.93398.47556.778
  +time.mclarkdev.132.236.56.2503u37645111.05988.02974.919


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

  $ntpdate-qyourservername
  server66.96.99.10,stratum2,offset0.017690,delay0.12794
  server98.191.213.2,stratum1,offset0.014798,delay0.22887
  server173.49.198.27,stratum2,offset0.020665,delay0.15012
  server129.6.15.28,stratum1,offset-0.018846,delay0.20966
  26Jan11:13:54ntpdate[17293]:adjusttimeserver98.191.213.2offset0.014798sec

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

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


最后想要了解更多关于Linux发展前景趋势,请关注扣丁学堂Linux培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Linux视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的Linux视频教程课程,让你快速掌握Linux从入门到精通开发实战技能。扣丁学堂Linux技术交流群:422345477。


扣丁学堂微信公众号



关注微信公众号获取更多的学习资料



查看更多关于“Linux培训资讯的相关文章>>

标签: Linux命令 Linux视频教程 Linux培训 Linux在线学习 Linux在线视频 Linux系统
返回顶部 返回顶部