我已经使用 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:
但是我可以在 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 上访问我的应用程序?
另外:通过端口添加访问权限是正确的做法吗?或者我应该为我的应用程序创建一个防火墙“服务”吗?
使用该
--permanent
标志会将您的更改写入持久配置,但不会写入运行配置。在不带标志的情况下再次运行相同的命令--permanent
以使其立即生效。从 RHEL 7.1和当前版本的 Fedora 开始,您还可以使用以下命令将运行配置复制到永久配置:
奇怪的是,该规则似乎只被写入配置文件,并没有立即应用。我不得不重新加载防火墙:
在此之后,规则出现了:
现在可以访问该端口。
留下这个注释,因为我的问题没有解决,直到我重新启动 systemctl
sudo systemctl 重启防火墙
我已经尝试了以上所有的东西。重新启动虚拟机。我什至在 VNIC 中设置了规则。但是只有在重新启动服务后才能解决。
环境:Oracle Cloud Network VM:计算实例(使用 Oracle Linux 8 的开发人员)
需要重新启动才能应用您所做的更改