我正在强化在默认 Ubuntu 20.04 AMI 上运行的 EC2 实例的安全组。关闭除 TCP 80 和 TCP 443 之外的所有传出端口后,哪些系统服务会中断?(我假设应用程序所需的所有端口也都是打开的。我担心的是破坏操作系统提供的隐式服务。)
我的理解是,允许 TCP 80/443 对于基本的操作系统服务就足够了。例如,apt-get
更新应该有效。还是我错过了 Ubuntu 或 AWS 一直希望开放的端口?
旁注:我想知道时间同步是如何工作的。默认情况下,我看不到默认 Ubuntu AMI 上预安装的任何 NTP 或 chrony 服务。否则,UDP 端口 123 也应该打开。我的假设是 VM 提供的(来宾)硬件时钟已经由主机(由 AWS 操作)同步。除此之外,我想不出从操作系统的角度来看需要允许的任何端口。
根据应用程序将使用的 AWS 服务,需要更多端口,例如 ElastiCache (Redis) 需要 6379。然而,我担心并非源自已部署应用程序的 API 调用。您可以假设应用程序的要求是已知的。环境(操作系统和 EC2 基础设施)的要求更加棘手。
在 Ubuntu 20.04 中,允许传出 http 和 https 流量就足够了。但是,我遇到了 NTP 的问题。我尝试打开 UDP 端口 123 失败。我不知道为什么,但为了解决它,我最终从 AWS 切换到内部时间同步服务:
如果时钟正在同步,您应该得到以下输出:
如果没有,请通过以下方式检查日志:
ntp.ubuntu.com:123
就我而言,即使在打开端口 UDP 123 之后(我什至也尝试打开 TCP 123),连接到 时我仍然超时。使用 AWS 服务,它在没有打开这些传出端口的情况下工作。您需要为此使用 NACL,因为安全组只能处理传入流量并允许所有内容传出。您需要考虑临时端口。这意味着当您开始
https://my-apt-repo.com
对目标端口的请求时,由于 HTTPS,将是 443,但在您的实例上发起请求的源端口可以是从端口 ~10000 到 ~65000 的任何地方。您必须注意允许传入和传出端口,因为 NACL 是无状态的。如果您只允许在某些端口上传出而不允许传入,则响应将无法返回。要查看您的系统将哪些端口用作临时端口,请运行:
/etc/sysctl.conf
您可以通过编辑文件来更改端口范围。如果您不想重新启动以使更改生效,请运行以下命令来获取配置:有关更多信息,请查看这篇文章。