我在 firewalld 的公共区域添加了一个端口,但仍然无法访问该端口

mik*_*ana 3 networking firewalld rhel7 centos7

我一直在使用 iptables,但直到最近才使用firewalld。我使用以下命令通过 firewalld 启用了端口 3000 TCP:

# firewall-cmd --zone=public --add-port=3000/tcp --permanent
Run Code Online (Sandbox Code Playgroud)

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

telnet 178.62.16.244 3000
Trying 178.62.16.244...
telnet: connect to address 178.62.16.244: Connection refused
Run Code Online (Sandbox Code Playgroud)

没有路由问题:对于从端口 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
Run Code Online (Sandbox Code Playgroud)

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:
Run Code Online (Sandbox Code Playgroud)

但是我可以在 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>
Run Code Online (Sandbox Code Playgroud)

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

另外:通过端口添加访问权限是否正确?或者我应该为我的应用程序创建一个 firewalld“服务”?

Mic*_*ton 11

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

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

firewall-cmd --runtime-to-permanent
Run Code Online (Sandbox Code Playgroud)


mik*_*ana 5

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

firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)

在此之后,规则随即出现:

# 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:
Run Code Online (Sandbox Code Playgroud)

现在可以访问该端口。