如何仅允许使用 iptables 的 NTP?

如何仅允许使用 iptables 的 NTP?

我正在寻找一种方法来限制网络上的某台设备的互联网流量,以便它只能访问 NTP,而不能访问其他任何设备。现在,简单的解决方案是只允许该设备使用目标端口 123,但我对此有疑问。如果我这样做,该设备是否可能通过端口 123 连接到(非 NTP)服务器并泄露私人信息?

更多背景信息:

我有一个 IoT 设备,我可以从本地网络内连接它,但它也有将数据发送到云端的功能。由于没有明确的方法关闭此功能,我想确保数据不会离开我的本地网络。

起初我只是在路由器(Asuswrt 固件)中阻止了其 IP 的互联网流量,但一旦重启(例如断电),其时间就会重置为旧日期。然后它会尝试访问 NTP 服务器以获取正确时间。

我检查了它尝试连接的 ips,并使用路由器上的 iptables 将其中一个列入白名单。时间已成功更新,但下次重新启动时 ips 已更改。我怀疑这是因为路由器上的 NTP 服务器设置为,pool.ntp.org因此实际的服务器列表会随时间而变化。

因此,我想确保设备只能与有效的、已知的时间服务器通信,而不会让它连接到端口 123 上的某个随机主机并发送与时间无关的数据。

有办法实现吗?也许可以检查数据包以确保它只包含与 NTP 相关的数据?

或者,如果这能解决问题的话,我也愿意设置本地 NTP 服务器,但那将是另一个问题的范围。

答案1

您可以尝试使用iptables string匹配模块来匹配数据包内容,以便它与典型的 NTP 协议内容相匹配,并且仅允许规则中符合此条件的数据包。

但是,这并非 100% 可靠,您需要谨慎分配匹配的字符串。此外,恶意入侵者可能会检测到这一点并将字符串添加到自己的有效载荷中。这种情况极不可能发生。

另一个选择是使用像 Suricata 这样的入侵防御系统,它可以进行实际的协议分析。但是,我不确定 Suricata 是否具有直接分析 NTP 流量的能力。

答案2

因此目标是允许 NTP,并且不允许泄露。

我的解决方案是将所有 UDP 123 流量重定向到已知的 NTP 服务器,甚至可能是内部服务器。这样,任何 NTP 请求都只会有 NTP 数据或故障。

如果主要担心的是数据泄露,请记住 DNS 查询也是一种可能的风险。

答案3

NTP 以前曾被用来查找端口扫描目标IPv6 地址空间太大,无法暴力破解。互联网上每天都会发生这种情况,但这可能是您不习惯的事情。

了解设备如何定位 NTP 服务器,观察其 DNS 和 NTP 流量。理想情况下,可以通过以下方式配置DHCPv6 选项 56 NTP 服务器。不幸的是,它可能无法配置。

任何默认 NTP 池配置都必须使用供应商区域因此可以管理使用。如果没有,或者更糟的是,如果它使用无需请求即可提供特定志愿服务,请向供应商投诉。

根据需要为该安全区域设置防火墙传出流量。允许传出目标端口 123/udp 和传入回复,拒绝其他一切。我不清楚通过 NTP 端口大规模泄露或其他不良数据的情况。如果您希望捕获和分析或限制速率,数据包量应较低,每台设备每几分钟一个数据包。

NTP 在来源多样化的情况下表现更好。IP 地址和主机名会发生变化,使用池时经常轮换。考虑不要过滤 NTP 服务器目标地址。

是的,您可以运行自己的 NTP 服务。如果网络上的每个设备都可以配置为使用它,那就更有用了。

相关内容