在Oracle Cloud Infrastructure Compute节点上打开端口80

Jas*_*son 7 oracle-cloud-infrastructure

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

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

尽管进行了此配置,但我无法访问计算节点的公共IP。有任何想法吗?

小智 17

始终参考官方指南: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
Run Code Online (Sandbox Code Playgroud)

  • 对于我的单个 Ubuntu 20.04 实例,我为许多其他[应用程序所需端口]配置了入口规则,例如 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”之后,我的实例可以神奇地从互联网访问。 (4认同)

Jas*_*son 14

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

我通过运行了解了这些规则:

$ sudo iptables -L
Run Code Online (Sandbox Code Playgroud)

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

$ sudo iptables-save > ~/iptables-rules
Run Code Online (Sandbox Code Playgroud)

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

$ iptables -P INPUT ACCEPT
$ iptables -P OUTPUT ACCEPT
$ iptables -P FORWARD ACCEPT
$ iptables -F
Run Code Online (Sandbox Code Playgroud)

无论如何,希望这可以帮助其他人,因为有关此问题的文档不存在。

  • 我希望找到这个答案对我来说不会那么困难。我不知道为什么 Oracle 还要在服务器上添加防火墙规则,因为一切都在基础设施级别受到保护。谢谢你! (10认同)
  • Oracle 在其最佳实践文档中记录了使用 iptables 而不是 ufw 以及向所有流量开放 iptables 的安全影响:https://docs.cloud.oracle.com/en-us/iaas/Content/Compute/References/bestpracticescompute .htm (3认同)
  • 请考虑一下 oracle 教程。它准确地提到了这个问题(查找“更新防火墙设置”);https://docs.oracle.com/en-us/iaas/developer-tutorials/tutorials/apache-on-ubuntu/01oci-ubuntu-apache-summary.htm (3认同)
  • 警告!!!!如果你运行 $iptables --flush,你将失去对机器的所有访问权限,基本上将其变砖! (2认同)
  • 这应该是公认的答案! (2认同)
  • @他这没有发生在我身上。但是我的机器也无法访问。 (2认同)
  • 如果您刷新了 iptables 并且无法访问您的实例,请参阅 https://docs.oracle.com/en-us/iaas/Content/Compute/References/serialconsole.htm 和“启动到维护模式”部分您可以使用控制台连接来修复 iptables 设置 (2认同)

小智 9

在Oracle Cloud Infrastructure上部署计算实例时,您需要考虑以下几点:

  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
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,但只有在“sudo apt install firewalld”之后 (18认同)
  • 对于现在发现此问题并尝试设置实例的任何人,我发现通过遵循 Oracle 关于创建互联网网关的文档(https://docs.oracle.com/en-us/iaas/Content/Network/Tasks/managingIGs.htm )当我创建第一个实例时,其中很多内容已经为我自动创建了。我已经有了一个 VCN、一个包含一些入口规则的安全列表,特别是一个允许 SSH 的规则(解释了我如何能够通过 SSH 连接到我的服务器,然后才注意到它无法在端口 80 上提供 HTTP 服务),以及一个互联网网关。VCN 中的子网已通过路由规则链接到互联网网关。 (3认同)
  • @kimchoky 是的,我也有同样的情况。我不明白为什么端口 22 会受到不同的对待。通过 SSH 访问不需要任何设置(密钥除外)。但通过 HTTP 访问需要更多规则。我觉得很困惑,没有洞察力,仍然无法理解差异的原因。 (2认同)
  • 然而,在能够实现我的目标之前(通过安装 NGINX 在端口 80 上测试服务 HTTP,然后设置并连接到 Java Minecraft 服务器),我必须遵循此处与“iptables”相关的其他答案中给出的步骤。此外,我发现每次实例停止并重新启动时我都无法连接到已解锁的端口,直到每次重新启动后对其运行“iptables --flush”命令。因为我不知道 iptables 是如何工作的,所以这是我接下来要了解的更多内容,以了解为什么我必须这样做。 (2认同)

new*_*cpp 8

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

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


Mut*_*r K 8

先决条件

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

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

$ sudo iptables --list --line-numbers
Run Code Online (Sandbox Code Playgroud)

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

$ sudo iptables -D INPUT <Reject Line number>
e.g.
$ sudo iptables -D INPUT 6
Run Code Online (Sandbox Code Playgroud)

检查是否删除了 REJECT 规则

sudo iptables --list --line-numbers 
Run Code Online (Sandbox Code Playgroud)

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

编辑 INGRES 规则 Add CIDR 0.0.0.0/0 TCP Destination 9999 (N): Networking >Virtual Cloud Networks> Virtual Cloud Network Details>Security Lists> Security List Details

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

Type http://<public IP address of the VM>:port
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是最好的答案,因为它有效地从等式中删除了 iptables,并且不会弄乱块设备的 Oracle 规则。拥有 oci 网关和入口规则就足以提供足够的保护。这只是甲骨文通常的“专家级”要求...... (3认同)

小智 6

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

iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

  • 这个命令有效。为了使更改即使在重新启动后也能持久,我们还需要运行:netfilter-persistent save (2认同)