这是一个基本问题,但我似乎无法通过阅读 Oracle 云基础设施文档来解决这个问题。我创建了一个基于 Ubuntu 的计算节点,它连接到一个子网。在那个子网中,我创建了一个有状态的规则,源为 0.0.0.0/0,IP 协议:TCP,源端口范围:全部,目标端口范围:80。
服务器上没有配置防火墙。
尽管有这种配置,但我无法访问计算节点的公共 IP。有任何想法吗?
这是一个基本问题,但我似乎无法通过阅读 Oracle 云基础设施文档来解决这个问题。我创建了一个基于 Ubuntu 的计算节点,它连接到一个子网。在那个子网中,我创建了一个有状态的规则,源为 0.0.0.0/0,IP 协议:TCP,源端口范围:全部,目标端口范围:80。
服务器上没有配置防火墙。
尽管有这种配置,但我无法访问计算节点的公共 IP。有任何想法吗?
我想到了。连接问题是由于 Oracle 在所有 Oracle 提供的映像上默认使用 iptables。从字面上看,我在启动这个实例时做的第一件事就是 check 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 Cloud Infrastructure 上部署计算实例时,您需要考虑以下几点:
在您的示例中,如果您使用的是 OEL 形状:
$ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
$ sudo firewall-cmd --reload
$ sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
$ sudo netfilter-persistent save
$ sudo systemctl restart apache2
归功于https://medium.com/@fathi.ria/oracle-database-cloud-open-ports-on-oci-1af24f4eb9f2
电脑实例(如Ubuntu)->虚拟云网络->安全列表->入口规则->请添加规则允许从任何地方访问80端口
我想如果您将以下规则添加到您的中iptables
,它应该可以工作;否则,您将扰乱与这些 Oracle 映像上预配置的块卷附件相关的其他规则。
iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$ sudo iptables --list --line-numbers
它将显示有关 Chain INPUT (policy ACCEPT) 的详细信息。从删除 IPTABLES 中的所有规则所需的列表中。
$ sudo iptables -D INPUT <Reject Line number>
e.g.
$ sudo iptables -D INPUT 6
sudo iptables --list --line-numbers
编辑 INGRES 规则添加 CIDR 0.0.0.0/0 TCP 目标 9999 (N):网络 > 虚拟云网络 > 虚拟云网络详细信息 > 安全列表 > 安全列表详细信息
Type http://<public IP address of the VM>:port
如果您还没有创建 Internet 网关,这可能就是原因。为了将 VCN 与公共互联网连接,您需要有一个互联网网关和一个路由表来引导流量通过网关。