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

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

我在 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>

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

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

编辑于 2017 年 6 月 2 日

这就是安全组设置如下:

  • 入站

    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
    

这是网络 ACL对于子网 — — 仅默认 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 年 6 月 2 日 #2

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

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

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

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

进行测试ntpdate-debian,并且不在安全组中打开端口 123,都可以正常工作;并且ntpd如果我让它运行一段时间,就可以正确更新时间。

答案1

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

当然,您需要在该端口的两个方向上打开 NACL。

更新 你应该阅读AWS 安全,特别是安全组和 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

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

答案2

如果你不反对在另一台具有准确时间的机器上运行 cron 作业,那么你总是可以拥有一个通过 SSH 自动更新日期。如果您在另一台具有准确日期的服务器上拥有 SSH 权限,您也可以通过其他方式执行此操作。

相关内容