防火墙配置如何使用 Firewalld 管理区域与开放指定端口

作者:袖梨 2026-08-26

Firewalld规则生效需明确区域绑定与永久配置:先查网卡所属区域,再用--permanent加服务/端口并执行--reload;临时操作重启后失效,仅--list-all等命令可验证实际生效规则。

Firewalld 管理区域和开放端口,核心是搞清“区域决定策略范围,服务/端口决定放行内容”,并且必须区分临时配置与永久生效——漏掉 --permanent 或忘记 firewall-cmd --reload,规则就只是“看起来开了”。

先看清当前网络归属哪个区域

firewalld 按网卡(接口)应用规则,不是全局统一设置。得先知道你的网卡绑在哪个 zone 上:

  1. 查当前激活的区域和对应网卡:firewall-cmd --get-active-zones
  2. 查默认区域(新插上的网卡自动归入这里):firewall-cmd --get-default-zone
  3. 查某块网卡(比如 eth0)属于哪个 zone:firewall-cmd --get-zone-of-interface=eth0

如果返回为空,说明这块网卡还没绑定到任何区域,后面开的端口很可能不生效。

按需调整网卡所属区域

区域切换分临时和永久两种,用途完全不同:

  1. 临时切 zone(重启 firewalld 或系统后还原):firewall-cmd --zone=home --change-interface=eth0
  2. 永久绑定(写入配置文件):firewall-cmd --permanent --zone=dmz --add-interface=eth0
  3. 同时设为默认区域:firewall-cmd --permanent --set-default-zone=dmz

⚠️ 所有带 --permanent 的命令,都必须执行 firewall-cmd --reload 才真正落地。

开放端口优先用 service,再考虑 port

firewalld 内置了 http、ssh、dns 等 service 定义,比直接开 TCP/UDP 端口更安全、更规范:

  1. 永久开放 Web 服务(自动处理 80/tcp + 443/tcp):firewall-cmd --permanent --add-service=http--add-service=https
  2. 永久开放 MySQL(3306/tcp):firewall-cmd --permanent --add-port=3306/tcp
  3. 开放 DNS(含 UDP/TCP 53):firewall-cmd --permanent --add-service=dns
  4. 指定区域开放(如只在 public 区放 SSH):firewall-cmd --permanent --zone=public --add-service=ssh

验证规则是否真生效

别靠猜,用命令直接看结果:

  1. 查默认区域全部规则(含服务、端口、富规则):firewall-cmd --list-all
  2. 查指定 zone(如 trusted)的完整配置:firewall-cmd --zone=trusted --list-all
  3. 单独看已开放的服务:firewall-cmd --list-services
  4. 单独看已开放的端口:firewall-cmd --list-ports

如果刚加的 service 或 port 不在列表里,八成是没加 --permanent,或者加了但没 --reload

相关文章

精彩推荐