Senario: 有两台服务器在不同的VPC上运行。两台服务器都是公开可用的。 服务器一(例如,公共IP:13.126.233.125)在8000端口上托管一个文件,并且服务器和安全组上安装的所有防火墙上的8000端口入站都是打开的。
服务器二希望使用“ wget命令”获取该文件。端口80出站服务器2处于打开状态。我尝试执行“ wget http://13.126.233.125:8000/file.txt”,它显示连接被拒绝。我必须在第二个服务器的出站中打开端口8000才能完成此工作。
按照我的逻辑,这应该在没有在出站列表中添加8000的情况下起作用。服务器一托管在8000上,服务器二不必从8000端口启动连接。服务器二可以使用任何临时端口或端口80,因为这是http连接。
请解释为什么需要在第二个服务器上打开出站端口8000。
答案 0 :(得分:2)
HTTP是位于TCP之上的协议。使用端口80是惯例,而不是必要条件。您可以在任何可用的端口上运行HTTP(和HTTPS)。 TCP的工作方式是,一个进程将打开一个TCP端口(例如8000),然后在该端口上“侦听”以尝试来自其他系统(本地或远程)的连接。如果您尝试在侦听端口8000的系统上使用端口80进行连接,则您将连接到错误的服务或被拒绝连接。仅在接受连接后,临时端口才会生效。
如果服务器A在端口8000上运行侦听服务,则服务器B需要使用端口8000连接到服务器A。这意味着服务器B需要端口8000开放出站才能连接到端口8000。
在正常使用情况下,您设置(限制)安全组中的入站端口,并允许所有出站端口。仅在了解TCP的工作原理并确切知道自己在做什么以及为什么的情况下,才限制出站端口。否则,请使所有出站端口保持打开状态。
控制出站端口有几个原因。例如,要防止实例执行更新,如果实例被破坏,则要防止实例进行通信,等等。如果您要控制此级别的通信,则还需要了解NACL的工作方式以及如何使用每一个。 >
AWS有一些很好的文档,解释了安全组和NACL如何工作以及如何使用它们。
答案 1 :(得分:0)
出站防火墙用于限制从网络内部到外部服务的连接。这就是默认情况下启用所有出站连接而禁用入站连接的原因。
在这种情况下,在服务器 2 上设置出站防火墙会禁止服务器 2 连接到服务器 1 的端口 8000(以及所有其他端口,除了 80)。这与发起连接的端口无关。
>