让NTP在AWS上工作,而无需在安全组中打开入站端口

我在AWS上有一个私有服务器, 没有公开的入站端口 。 唯一的开放端口是SSH,只能从同一子网中的其他机器访问。

本机通过networking从S3读取文件。 最近它停止工作,因为服务器的时间已经超过了15分钟,对S3的请求被拒绝了:

<Code>RequestTimeTooSkewed</Code> <Message> The difference between the request time and the current time is too large. </Message> <MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds> 

简单的解决方法是安装ntp ,但需要打开UDP端口123.由于UDP是无状态的,入站和出站端口都必须打开。

如何仅使用由我的服务器启动的TCP连接自动更新系统时间? 是否有像NTP这样的标准的基于TCP的守护进程? 我不在乎是不是精确:即使是10分钟的偏差也是可以接受的。

编辑2017年6月2日

这就是安全团队的build立方式:

  • 入站

     Type Protocol Port Range Source SSH TCP 22 172.31.0.0/16 
  • 出站

     Type Protocol Port range Destination All traffic All All 0.0.0.0/0 

这是子网的networkingACL – 只是默认的ACL:

  • 入站

     Rule # Type Protocol Port Range Source Allow / Deny 100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW * ALL Traffic ALL ALL 0.0.0.0/0 DENY 
  • 出站

     Rule # Type Protocol Port Range Destination Allow / Deny 100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW * ALL Traffic ALL ALL 0.0.0.0/0 DENY 

编辑2017年六月2日#2

现在好了,它没有任何特殊的安全组,如@Tim所预示的那样。 我想我只是没有正确地testing它:

  • ntpdate不使用/etc/ntp.conf的服务器,所以报告错误:

    没有服务器可以使用,退出

  • ntpd就不尝试更新时钟; 它等待一分钟左右。

ntpdate-debiantesting,并且没有在安全组中打开的端口123,可以正常工作; 和ntpd正确更新时间,如果我让它运行一段时间。

根据AWS文档,您只能在出站安全组中打开UDP:123。 由于安全组是有状态的,回复会回复给您,但您的VPC外部没有人可以启动连接。

你当然会要求NACL在这个港口的两个方向开放。

更新您应该阅读有关AWS安全性的信息 ,特别是安全组和NACL。

NACL是networkingACL。 这是一个位于您的实例之外的防火墙,只有当您打开端口时才允许stream量到达您的实例。 默认情况下,所有入站和出站端口都是打开的,但是您可以按照自己喜欢的方式进行configuration。 NACL是无状态的,因此您需要在每个方向上打开端口。 不要忘记临时端口。

另一方面,安全组强制在pipe理程序级别上执行networking规则。 它们是有状态的,所以如果你允许一个外出的端口,那么这个响应会自动回到实例中。

理论上,NACL可以轻易地减less主机服务器的负载,因为它们可以防止stream量冲击networking接口。 因为你只控制了一小部分服务器,可能没有太大的区别。

如果您不反对在具有准确时间的另一台计算机上运行cron作业,则始终可以通过SSH自动更新date 。 如果您在具有准确date的另一台服务器上拥有SSH权限,则也可以以其他方式执行此操作。