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

z0r*_*z0r 1 firewall ntp amazon-web-services

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

这台机器通过网络从 S3 读取文件。最近它停止工作,因为服务器的时间漂移​​了超过 15 分钟,并且对 S3 的请求被拒绝:

<Code>RequestTimeTooSkewed</Code>
<Message>
    The difference between the request time and the current time
    is too large.
</Message>
<MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds>
Run Code Online (Sandbox Code Playgroud)

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

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

2017 年 6 月 2 日编辑

这是安全组的设置方式:

这是子网的网络 ACL - 只是默认 ACL:

2017 年 6 月 2 日编辑 #2

好吧,正如@Tim 所预测的那样,它现在无需任何特殊的安全组即可工作。我想我只是没有正确测试它:

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

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

  • ntpd不尝试在时钟启动后立即更新;它等待一分钟左右。

使用 进行测试ntpdate-debian,并且没有在安全组中打开端口 123,效果很好;并ntpd适当更新时间,如果我让它运行了一段时间。

Tim*_*Tim 10

根据AWS 文档,您只能在出站安全组中打开 UDP:123。因为安全组是有状态的,回复会回复给您,但是您的 VPC 之外的任何人都无法发起连接。

您当然需要为该端口双向打开 NACL。

更新 您应该阅读AWS Security,尤其是安全组和 NACL。

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

另一方面,安全组在管理程序级别强制执行网络规则。它们是有状态的,因此如果您允许传出端口,则响应会自动返回到实例中。

NACL 理论上会略微减少主机服务器负载,因为它们可以防止流量到达网络接口。由于您只控制服务器的一小部分,因此可能没有太大区别。

2017 年 12 月 1 日更新

AWS发布AWS 时间同步服务。简而言之,他们在每个数据中心内提供服务器以确保服务器时间准确。

AWS 文档说使用 Chrony 软件,而不是 NTP,但同时使用 NTP 服务。我没有必要将 AWS 说明复制到这篇文章中,因为它们将来可能会发生变化,而且 AWS 文档非常好。

使用 NTPD

我没有安装 Chrony,而是将以下内容添加到我的 /etc/ntp.conf 中,以尝试让 NTP 使用新的 AWS NTP 服务器

server 169.254.169.123 prefer iburst
Run Code Online (Sandbox Code Playgroud)

我还确保其他服务器语句都没有配置“首选”。