我已经使用 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
需要重新启动才能应用所做的更改