入站和出站端口需要相同或不同

Jay*_*wal 1 sockets port networking vpc amazon-web-services

Senario:有两台服务器运行在不同的 VPC 上。两台服务器都是公开可用的。服务器一(例如公共 IP:13.126.233.125)在 8000 端口上托管一个文件,并且在服务器和安全组上安装的所有防火墙上都打开了入站端口 8000。

服务器二想要使用“wget 命令”获取该文件。端口 80 出站服务器-2 已打开。我试图做“wget http://13.126.233.125:8000/file.txt ”,它显示连接被拒绝。我必须在 Server-2 的出站中打开端口 8000 才能完成这项工作。

按照我的逻辑,这应该可以在出站列表中不添加 8000 的情况下工作。服务器一托管在 8000 上,服务器二不是必须从 8000 端口启动连接。server-two 可以使用任何临时端口或端口 80,因为这是 http 连接。

请解释为什么需要在第二台服务器上打开出站端口 8000。

Joh*_*ley 6

HTTP 是一种位于 TCP 之上的协议。使用端口 80 是约定而不是要求。您可以在任何可用的端口上运行 HTTP(和 HTTPS)。TCP 的工作方式是,一个进程将打开一个 TCP 端口(比如 8000),然后在该端口上“侦听”来自其他系统(本地或远程)的连接尝试。如果您尝试在侦听端口 8000 的系统上使用端口 80 进行连接,您将连接到错误的服务或连接被拒绝。只有在连接被接受后,临时端口才会起作用。

如果服务器 A 正在运行侦听端口 8000 的服务,则服务器 B 需要使用端口 8000 连接到服务器 A。这意味着服务器 B 需要打开出站端口 8000 才能连接到端口 8000。

在正常使用中,您设置(限制)安全组中的入站端口并允许所有出站端口。如果您了解 TCP 的工作原理并确切地知道您在做什么以及为什么,则仅限制出站端口。否则,让所有出站端口保持打开状态。

控制出站端口有几个原因。例如,防止实例执行更新,防止实例在遭到破坏时进行通信等。如果您要控制这种级别的通信,那么您还需要了解 NACL 的工作原理以及如何使用每个。

AWS 有一些很好的文档,解释了安全组和 NACL 的工作原理以及如何使用它们。