我正在为回合制游戏构建后端。我的经验主要是使用 lamp stack;我曾在一个 node 项目中涉猎过 nginx。
我刚刚读了 Twit Pic 的 Stephen Corona 撰写的《扩展 PHP 应用程序》。他推荐使用 nginx 服务器而不是 apache。他说他的 ubuntu 机器打开了 32768-61000 个端口。
在 AWS 上,我是否需要修改我的安全性以允许访问这些端口?如何确保 nginx 充分利用此配置?
更新:
我预计我的大多数请求都在端口 443,这就是我对他开放更多端口的建议感到困惑的原因。
这是他提出的建议
net.ipv4.ip_local_port_range
ip_local_port_range 定义系统上可用端口的范围。在我的 ubuntu 安装中,它设置为 32768-61000。增加范围以允许更多连接。可用端口的数量限制了同时打开的连接数。请记住,即使连接关闭后,它仍会占用处于 TIME_WAIT 状态的端口(尽管我们通过下面的一些设置缓解了这种情况)。
sysctl-wnet.ipv4.ip_local_port_range="10000 65535"
vi /etc/sysctl.d/haproxy-tuning.conf
net.ipv4.ip_local_port_range=10000 65535
答案1
在 AWS 上,我是否需要修改我的安全性以允许访问这些端口?
对于传入连接,是的。对于由您的服务器发起的连接,否。
默认情况下,所有传出端口均打开,所有传入端口(SSH 除外)均关闭。
传入连接是由位于您机器外部的软件发起的连接。传出连接是由位于您机器内部的软件发起的连接,例如您的 Linux 内核或实例上的 NGINX。
我如何确保 nginx 充分利用此配置?
当您定义 ip_local_port_range 时,此设置定义来自服务器的传出连接的端口。您可以不是想要打开这些端口(或任何其他不需要的端口)用于 AWS 安全组中的传入连接。但是,您需要打开 NGINX 应该使用的所有端口听对于传入请求(通常是标准 HTTP/HTTPS 端口,经过精心挑选,但绝对不是端口范围)。
除此之外,您还应在 VPC(“EC2 VPC”而不是“EC2 classic”)中运行服务器。如果您在“EC2 classic”中运行服务器,那么内部 AWS 网络上的其他用户如果恰好位于同一子网中,可能会成功对您的设备进行端口扫描。这在 AWS 上是非法的,会导致该用户的帐户被关闭。出于同样的原因,如果您需要在自己的 AWS 基础设施上运行端口扫描、任何渗透测试或任何与漏洞扫描类似的东西,您绝对必须向 Amazon 请求许可,否则您将陷入大麻烦。您可以在此处获得漏洞扫描授权: https://aws.amazon.com/security/penetration-testing/
答案2
如果您需要为应用程序打开端口,您可以在 AWS 安全组中指定一个端口(或端口范围)。
创建一个具有所需范围的新规则,即按照您的示例 32768-61000。
至于是否需要打开所有这些端口的问题,这取决于您如何构建应用程序。我怀疑,如果您采用负载均衡器后面的许多小型 EC2(可扩展解决方案的常见设置)的路线,那么大量开放端口的建议可能不适用于此。
AWS 负载均衡器可以处理大量流量,并且不需要开放大量端口。