【问题标题】:Opening port 80 on Oracle Cloud Infrastructure Compute node [closed]在 Oracle Cloud Infrastructure Compute 节点上打开端口 80 [关闭]
【发布时间】:2019-02-20 19:50:10
【问题描述】:

这是一个基本问题,但我似乎无法通过阅读 Oracle 云基础设施文档来解决这个问题。我创建了一个基于 Ubuntu 的计算节点,它连接到一个子网。在那个子网中,我创建了一个有状态规则,源为 0.0.0.0/0,IP 协议:TCP,源端口范围:全部,目标端口范围:80。

服务器上没有配置防火墙。

尽管有此配置,我仍无法访问计算节点的公共 IP。有什么想法吗?

【问题讨论】:

    标签: oracle-cloud-infrastructure


    【解决方案1】:

    我想通了。连接问题是由于 Oracle 在所有 Oracle 提供的映像上默认使用 iptables。从字面上看,我在启动此实例时做的第一件事是检查ufw,假设存在一些防火墙限制。 ufw 状态是非活动的,所以我断定防火墙在本地是完全开放的。因为据我了解ufw 和iptables 都查看netfilter 内核防火墙,并且因为ufw 是Ubuntu 上事实上的(标准?)防火墙解决方案,我不知道他们为什么认为使用它是有意义的iptables 以这种方式。也许只是为了标准化所有图像?

    我通过跑步了解了规则:

    $ sudo iptables -L
    

    然后我将规则保存到一个文件中,以便稍后添加相关的规则:

    $ sudo iptables-save > ~/iptables-rules
    

    然后我运行这些规则,通过允许所有流量通过,有效地禁用 iptables:

    $ iptables -P INPUT ACCEPT
    $ iptables -P OUTPUT ACCEPT
    $ iptables -P FORWARD ACCEPT
    $ iptables -F
    

    要一次清除所有 iptables 规则,请运行以下命令:

    $ iptables --flush
    

    无论如何,希望这对其他人有所帮助,因为关于此事的文档不存在。

    【讨论】:

    • Oracle 在其最佳实践文档中记录了使用 iptables 而不是 ufw 以及向所有流量开放 iptables 的安全隐患:docs.cloud.oracle.com/en-us/iaas/Content/Compute/References/…
    • 警告!!!!如果你运行 $iptables --flush,你将失去对机器的所有访问权限,实际上是把它变砖了!!!
    • 我希望找到这个答案对我来说不会那么难。当一切都在基础设施级别受到保护时,我不知道为什么 Oracle 还要在服务器上添加防火墙规则。谢谢!
    • 这应该是公认的答案!
    • 请考虑 oracle 教程。它准确地提到了这个问题(查找“更新防火墙设置”); docs.oracle.com/en-us/iaas/developer-tutorials/tutorials/…
    【解决方案2】:

    在 Oracle 云基础设施上部署计算实例时,您需要考虑以下几点:

    1. 创建 Internet 网关 (IGW)。
    2. 定义指向 IGW 的路由。
    3. 在与 IGW 关联的安全列表中允许端口 80。默认情况下,您只能访问 SSH 和 ICMP 3,4 类型。
    4. 允许在 Compute 的实例防火墙上连接(默认启用)。

    在您的示例中,如果您使用的是 OEL 形状:

    $ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
    
    $ sudo firewall-cmd --reload
    

    【讨论】:

    • 太棒了!就我而言, ssh(22) 效果很好,但端口 80 却不行。当我按照上述所有步骤(包括“firewall-cmd”步骤)进行操作时,奇迹发生了!
    • 这对我有用,但只有在sudo apt install firewalld
    • @kimchoky 是的,我也有同样的情况。我不明白为什么端口 22 会被区别对待。通过 SSH 访问不需要任何设置(密钥除外)。但是通过 HTTP 访问需要更多的规则。我觉得它很混乱,没有洞察力,仍然无法理解差异的原因。
    • 对于现在发现此问题并尝试设置实例的任何人,我通过遵循 Oracle 的有关创建 Internet 网关 (docs.oracle.com/en-us/iaas/Content/Network/Tasks/…) 的文档发现,当我创建第一个实例时,其中很多已经为我自动创建了。我已经有一个 VCN,一个带有一些入口规则的安全列表,特别是一个允许 SSH 的安全列表(解释了我是如何在注意到它无法在端口 80 上提供 HTTP 之前通过 SSH 连接到我的服务器的)和一个互联网网关。 VCN 中的子网已通过路由规则链接到 Internet 网关。
    • 然而,在能够实现我的目标之前(通过安装 NGINX 在端口 80 上测试服务 HTTP,然后设置并连接到 Java Minecraft 服务器),我必须按照此处与iptables 相关的其他答案。此外,我发现每次实例停止并重新启动时,我都无法连接到我解除阻塞的端口,直到每次重新启动后我在其上运行iptables --flush 命令。因为我不知道 iptables 是如何工作的,所以我接下来要了解更多信息以了解我为什么必须这样做。
    【解决方案3】:

    请始终参考官方指南:https://docs.cloud.oracle.com/en-us/iaas/developer-tutorials/tutorials/apache-on-ubuntu/01oci-ubuntu-apache-summary.htm

    $ sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
    $ sudo netfilter-persistent save
    $ sudo systemctl restart apache2
    

    【讨论】:

    • 对于我的单个 Ubuntu 20.04 实例,我为许多其他 [app required port] 配置了 Ingress Rules,例如 MySQL 3306 和 TightVNCServer 5901,但它们没有生效。在我执行“sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport [app required port] -j ACCEPT”和“sudo netfilter-persistent save”后,我的实例可以从互联网访问,神奇.
    • 您还必须允许通过 VCN IP 限制
    • 这也适用于 nginx,谢谢。
    • 这确实有效,谢谢!我没有在链接的文章中看到它......我希望能对所有 iptables 选项进行解释。仅从手册页了解 -m state --state NEW 的作用并非易事。 (编辑:它在Apache 下...但我没有使用apache...)
    【解决方案4】:

    归功于https://medium.com/@fathi.ria/oracle-database-cloud-open-ports-on-oci-1af24f4eb9f2

    计算机实例(如Ubuntu)->虚拟云网络->安全列表->入口规则->请添加规则允许从任何地方访问80端口

    【讨论】:

    • 这实际上对我有用(除了我自己想出来的,哈哈)。
    • 那行得通 ;-) 这让我很头疼。只处理 iptables 浪费了我的时间
    【解决方案5】:

    我想如果您将以下规则添加到您的 iptables 中,它应该可以工作;否则,您将扰乱与这些 Oracle 映像上预配置的 块卷附件 相关的其他规则。

    iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
    

    【讨论】:

    • 此命令有效。为了使更改在重新启动后仍然存在,我们需要额外运行:netfilter-persistent save
    • 我得到:iptables:插入索引太大。
    • @user2650501 索引问题是因为为规则指定了位置5,而如果您运行sudo iptables -L,您会看到您当前的规则小于4(可能为空)。
    • 持久化(作为 root - "sudo su"):iptables-save > /etc/iptables/rules.v4
    【解决方案6】:

    先决条件

    1. VM 实例应该已经创建并运行了
    2. 访问创建 VM 实例期间使用的公钥和私钥

    使用 SSH 登录虚拟机并运行以下命令

    $ sudo iptables --list --line-numbers
    

    它将显示有关链输入(策略接受)的详细信息。从列表中 需要删除 IPTABLES 中的所有 REJECT 规则。

    $ sudo iptables -D INPUT <Reject Line number>
    e.g.
    $ sudo iptables -D INPUT 6
    

    检查REJECT规则是否被删除

    sudo iptables --list --line-numbers 
    

    访问默认安全列表并编辑入口规则以允许端口上的 Internet 流量

    编辑 INGRES 规则添加 CIDR 0.0.0.0/0 TCP 目标 9999 (N):网络>虚拟云网络>虚拟云网络详细信息>安全列表>安全列表详细信息

    通过网络浏览器访问您的应用程序

    Type http://<public IP address of the VM>:port
    

    【讨论】:

      【解决方案7】:

      如果您还没有创建 Internet 网关,这可能是原因。为了将 VCN 与公共互联网连接,您需要有一个互联网网关和一个路由表来引导流量通过网关。

      【讨论】:

        猜你喜欢
        • 2017-10-29
        • 2013-02-19
        • 2015-05-27
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 2021-01-11
        • 2017-09-22
        • 2013-12-08
        相关资源
        最近更新 更多