为什么firewall-cmd 会抛出错误“ALREADY_ENABLED”,但是在调用firewall-cmd --list-ports 时没有列出该端口?

为什么firewall-cmd 会抛出错误“ALREADY_ENABLED”,但是在调用firewall-cmd --list-ports 时没有列出该端口?

使用 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防火墙。)

相关内容