【问题标题】:Expose port of AWS EC2 instance to entire network将 AWS EC2 实例的端口暴露给整个网络
【发布时间】:2018-05-26 18:10:08
【问题描述】:

我有一个应用程序通过 Docker 部署在我们的一台旧服务器上,并希望将其部署在 AWS 上。所有实例都驻留在公司的专用网络上。私有 IP 地址:

My local machine: 10.0.2.15
EC2 instance:     10.110.208.142

如果我从 Docker 容器中运行 nmap 10.110.208.142,我会看到端口 443 已按预期打开。但是我如果从网络上的另一台计算机运行该命令,例如从我的本地机器上,我看到该端口已关闭。

如何打开该端口到网络的其余部分?在 EC2 实例中,我尝试过:

sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

它并没有解决问题。我还允许在我的 AWS 安全组中的端口 443 上进行适当的入站连接(截图如下):

谢谢,

【问题讨论】:

  • 在您的问题中包含您的安全组详细信息。
  • @JohnHanley 已更新。如果需要,很乐意提供更多信息。
  • 您的第一个 HTTPS 规则无效。 10.0.0.0/8 在 AWS 中无效。最大 CIDR 为 /16。更改为 10.0.0.0/16。这实际上应该与 VPC CIDR 匹配。对于 HTTPS IPv6 规则,请注意,这会通过 IPv6 向全世界开放您的服务器。除非您打算支持公共 IPv6,否则我会删除该条目。
  • @JohnHanley 我删除了 IPv6 条目(它是默认添加的)。我将 CIDR 更改为 /16 仍然无法正常工作。我首先使用 /8 的原因是因为它需要允许我连接到 RDS 实例。
  • 这个 EC2 实例的私有 IP 地址是什么?您连接的实例的私有 IP 地址是什么?对于您的 nmap 命令,您是指定私有 IP 还是公共 IP?注意:私有 IP 地址可以安全地发布在 Internet 上。

标签: amazon-web-services ubuntu docker containers port


【解决方案1】:

发现问题。我正在使用 nginx 并且 nginx 无法启动,这解释了为什么端口 443 似乎已关闭。

在我的特殊情况下,nginx 失败是因为我缺少正确的 ssl 证书。

【讨论】:

    【解决方案2】:

    您无法通过公共 Internet 使用 EC2 实例的私有 IP 地址从 AWS 外部的网络访问 AWS VPC 网络中的 EC2 实例。这就是 EC2 实例可以有两种类型的 IP 地址的原因:公共和私有。

    如果您设置了从公司网络到 VPC 的 VPN,那么您将能够使用私有 IP 地址访问 EC2 实例。您的网络和 AWS VPC 网络不能有重叠的网络(至少没有更高级的配置)。

    您还可以分配公共 IP 地址(可以在停止/重启时更改)或将弹性 IP 地址添加到您的 EC2 实例,然后通过公共 Internet 访问它们。

    在任一解决方案中,您还需要配置安全组以允许通过所需端口进行访问。

    【讨论】:

    • 感谢您的回复,但我不会尝试从公共互联网访问 EC2 实例,而只是从公司私有网络访问。
    • 但是,您正在尝试使用 EC2 实例私有 IP 地址访问 AWS 服务器。您需要使用 EC2 实例的公共 IP 地址。
    • 我创建了一个具有公共访问权限的新 EC2 实例,但它仍然无法正常工作。当我从公司网络上的计算机甚至 Docker 容器运行该命令时,nmap <EC2 public ip address> 不会返回任何结果。
    • 我发现了这个问题,以防你好奇。看我的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2018-02-21
    • 2021-02-04
    • 1970-01-01
    • 2016-12-28
    • 2019-04-13
    相关资源
    最近更新 更多