使用 iptables 启用端口 80 有效,但使用 ufw 无效

使用 iptables 启用端口 80 有效,但使用 ufw 无效

在 Oracle 云中创建一个以 ubuntu 为操作系统的新计算实例后,我安装了 nginx。

现在为了打开端口 80,我尝试了命令sudo ufw allow 'Nginx HTTP'并启用了 ufw。但我仍然无法从浏览器访问端口 80 上的服务器。但是,如果我使用命令sudo iptables -I INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT,我就可以访问端口 80 上的服务器。为了确保情况确实如此,我重新创建了新的计算实例并多次尝试。据我所知,ufw 是更复杂的 iptables 的更简单的接口。

有没有办法解释为什么会这样?

答案1

实际上,我一直在谷歌搜索,我发现了这个:在Oracle云基础设施计算节点上打开端口80 - VoidCC

杰森的回答

我搞明白了。连接问题是由于 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

无论如何,希望这可以帮助其他人,因为关于这个主题的文献相当稀少。

相关内容