我创建了一个 Ubuntu 实例Oracle 云基础设施 (OCI)。我能够使用 SSH (TCP 22) 连接到此实例。我在此实例上创建了一些服务,例如 daytime (TCP 13)、mail (TCP 25)、http (TCP 80)、dns (TCP/UDP 53)。我向默认安全列表在本实例的 OCI 管理网页上,类似于默认的 SSH 规则。但是,当我尝试连接到任何我从 Internet 访问这些服务时出现No route to host
错误。唯一的例外是 SSH 服务,它运行正常。
我曾经安装ufw
到这个实例;但是,后来我禁用并删除了ufw
。之后,我iptables
也删除了包。所以,现在根本没有Linux防火墙。但是,我仍然有这个问题。
这似乎是与 OCI 相关的问题。我在其他云平台(AWS、GCP 等)上做过类似的配置,没有问题。
我还能在哪里找到该问题?
更新:删除 iptables并重新启动问题解决了。现在我将尝试重新安装 iptables。
答案1
ufw
该问题似乎与 OCI 不希望您在 Ubuntu 中使用有关:https://docs.cloud.oracle.com/iaas/Content/knownissues.htm#ufw
我必须按照上面给出的链接中的说明禁用或删除ufw
并编辑该文件。之后,要启用新规则,我需要运行:/etc/iptables/rules.v4
# iptables-restore </etc/iptables/rules.v4
看来ufw
规则在这样的配置下没有任何效果,我有使用iptables
。然而,这不是一种在 OCI 平台上的 Ubuntu 服务器上管理防火墙规则的非常用户友好的方式。
答案2
我在 Oracle 云中的 Oracle Linux 中发现了这个问题。它有一组预定义的阻止规则。因此,我成功连接了 22 端口 (ssh),但在尝试连接其他端口时收到“无主机路由”提示。
您需要单独打开端口:
例如,对于 Docker:
firewall-cmd --permanent --zone=public --add-port=2377/tcp
firewall-cmd --reload
此外,您需要为虚拟云网络设置安全列表。
答案3
根据 FedKad 对他的原始帖子的回答,这些是对我有用的确切步骤......
在 Oracle 云上需要执行以下额外步骤才能在 Ubuntu 20 上打开端口:
sudo vim /etc/iptables/rules.v4
(或任何你使用的编辑器)在该行之后
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
插入:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT
(改成需要开放的端口号!)
- 在 shell 提示符下:
sudo su -
iptables-restore < /etc/iptables/rules.v4
exit
- 可以通过以下方式测试新开放的端口其他Linux 机器,并发出命令:
nc -zvw100 THE_IP_ADDRESS_OF_MACHINE_WHOSE_PORT_WE_OPENED THE_PORT_NUMBER
答案4
可以是在网络中,也可以是在 Linux 实例中。如果是在 Linux 中,则可以是 iptables 或服务。
从最后一个开始,因为您有邮件,请在 Linux 机器上尝试:
telnet 127.0.0.1 smtp
helo there
quit
您看到 220、250 和 221 消息了吗?那么说明您的邮件服务正常。如果您看到Connection refused
,则说明您的服务未正常运行。
接下来,iptables -nvL
应该会告诉您端口是否对外界开放。如果您无法理解输出,
service iptables stop
应该停止 iptables,这对于测试来说可能是可以接受的。您说您已经删除了ufw
,所以我认为sudo ufw disable
不再需要了。
如果在 iptables 不起作用的情况下您仍然无法连接,那么这可能是亚马逊云中的设置问题,我对此没有经验。