在 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
无论如何,希望这可以帮助其他人,因为关于这个主题的文献相当稀少。