使用 CentOS 7,我尝试使用firewall-cmd --zone=public --add-port=443/tcp --permanent
将 443 添加到我的允许端口。不幸的是,这会引发错误ALREADY_ENABLED: 443:tcp
。但是当我使用firewall-cmd --list-ports
它时它不会显示在列表中(“80/tcp 3000/tcp 26900/tcp 26900/udp”)。
我猜想这个问题是由防火墙命令和 iptables 之间的冲突引起的。但我不知道如何调试这个问题,也不知道这是否可行。
调用firewall-cmd --list-all
结果如下表:
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports: 80/tcp 3000/tcp 26900/tcp 26900/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
答案1
您说您运行的命令会影响永久配置,而不是运行配置。但您列出了运行配置。这就是您看不到它们的原因。
您可以列出永久配置来确认规则已成功添加。
firewall-cmd --list-all --permanent
您可以将规则添加到正在运行的配置中:
firewall-cmd --zone=public --add-port=443/tcp
或者您可以从永久配置重新加载运行配置:
firewall-cmd --reload
还要记住,firewalld 已为常用端口定义了服务,因此通常不需要按编号打开它们。例如,您可以改为这样打开端口 80/tcp 和 443/tcp:
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=https
最后,如果可能的话,最好更改运行配置中的规则,验证它们是否有效,然后保存配置,而不是反过来。如果出现问题并且您意外地将自己锁定在系统之外,这样您就可以恢复。
您可以通过运行以下命令将正在运行的配置保存为永久配置:
firewall-cmd --runtime-to-permanent
(但有些操作只对永久配置有效,例如创建新区域。对于这些,您必须--permanent
立即使用--reload
防火墙。)