首页 > 解决方案 > 入站和出站端口需要相同或不同

问题描述

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

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

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

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

标签: amazon-web-servicessocketsnetworkingportvpc

解决方案


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

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

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

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

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


推荐阅读