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

我一直在使用iptables,但是直到最近才使用过firewalld 。 我已经通过firewalld使用以下命令启用端口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: 

但是我可以看到XMLconfiguration文件中的规则:

 # 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上访问我的应用程序?

另外:是通过端口添加访问正确的事情吗? 或者我应该为我的应用程序做一个firewalld“服务”?

使用--permanent标志将您的更改写入持久性configuration,而不是正在运行的configuration。 再次运行相同的命令,而不使用--permanent标志立即生效。

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

 firewall-cmd --runtime-to-permanent 

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

 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: 

该端口现在可以访问。

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