我已在防火墙中将端口添加到公共区域,但仍然无法访问该端口

我已在防火墙中将端口添加到公共区域,但仍然无法访问该端口

我已经使用 iptables 很长时间了,但从来没有用过防火墙直到最近。我已使用以下命令通过防火墙启用端口 3000 TCP:

# firewall-cmd --zone=public --add-port=3000/tcp --permanent

但是我无法访问端口 3000 上的服务器。从外部框:

telnet 178.62.16.244 3000
Trying 178.62.16.244...
telnet: connect to address 178.62.16.244: Connection refused

没有路由问题:我有一个单独的规则,用于将端口从 80 转发到 8000 端口,这在外部运行良好。我的应用程序肯定也在监听该端口:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      99         36797      18662/node

firewall-cmd似乎也没有显示端口 -看看如何ports是空的。大家可以看看我前面说的转发规则。

# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports: port=80:proto=tcp:toport=8000:toaddr=
  icmp-blocks:
  rich rules:

但是我可以在 XML 配置文件中看到规则:

# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <port protocol="tcp" port="3000"/>
  <forward-port to-port="8000" protocol="tcp" port="80"/>
</zone>

我还需要做什么才能允许通过端口 3000 访问我的应用程序?

另外:通过端口添加访问权限是正确的做法吗?还是我应该为我的应用程序创建防火墙“服务”?

答案1

使用该--permanent标志会将您的更改写入持久配置,但不会写入正在运行的配置。再次运行相同的命令而不使用标志--permanent可使其立即生效。

从 RHEL 7.1 开始和当前版本的 Fedora,您还可以使用以下方法将运行配置复制到永久配置:

firewall-cmd --runtime-to-permanent

答案2

奇怪的是,该规则似乎只是写入配置文件,并没有立即应用。我不得不重新加载防火墙:

firewall-cmd --reload

此后,规则就出现了:

# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports: 3000/tcp
  masquerade: no
  forward-ports: port=80:proto=tcp:toport=8000:toaddr=
  icmp-blocks:
  rich rules:

该端口现已可访问。

答案3

留下这条注释,因为我的问题直到我使用以下命令重新启动 systemctl 后才得到解决

sudo systemctl 重新启动firewalld

我已经尝试了上述所有方法。重新启动了虚拟机。我甚至在 VNIC 中设置了规则。但只有在重新启动服务后才解决了这个问题。

环境:Oracle 云网络 VM:计算实例(使用 Oracle Linux 8 的开发人员)

答案4

需要重新启动才能应用所做的更改

相关内容