首页/安全/安全加固速查/firewalld 状态与区域概览
防火墙与访问控制50 条

firewalld 状态与区域概览

firewalld 用“区域+服务”抽象管理 netfilter;先看清运行状态、默认区域与活动区域,确认现有放行面再动手改规则。

安全加固速查安全更新于 2026-10-13

先看清现状再改规则

firewalld 是 RHEL 系的默认防火墙管理工具,用“区域 + 服务”的抽象管理底层的 nftables 规则。判断放行是否合理,第一步不是加规则,而是看清运行状态、默认区域与每个区域的活动接口,否则很容易出现“规则明明写了却不生效”——多半是流量根本没落在你以为的那个区域。变更前把现状导出留档,是防护墙类操作最基本的安全垫。

基本信息

加固项防火墙运行态与区域盘点
适用平台Linux(RHEL 7+、CentOS、Fedora、部分 SUSE)
权限要求root 或已授权的 polkit 用户
常用工具firewall-cmd、firewall-config、systemctl
配置位置/etc/firewalld/(zones、services、direct)

典型使用场景

  • 接手一台新服务器,先盘点现有放行面再决定加什么规则
  • 排查“端口已放行但访问不通”的区域归属问题
  • 变更前导出区域配置留档,作为回滚依据
  • 巡检时确认防火墙处于运行状态,而不是被动放行
  • 多网卡服务器按接口划分不同信任级别

状态与区域总览

状态与区域总览
systemctl status firewalld --no-pager   # 服务是否在跑、是否开机自启
firewall-cmd --state                     # 期望 running
firewall-cmd --get-default-zone          # 默认区域,常见 public
firewall-cmd --get-active-zones          # 哪些接口或来源绑在哪个区域
firewall-cmd --list-all                  # 默认区域的完整规则概览
firewall-cmd --zone=public --list-all    # 逐个区域核查,才是完整画面

常用查询命令

命令输出内容读法
--staterunning / not runningnot running 时运行时规则层不可用
--get-active-zones区域与绑定接口确认业务网卡落在哪个区域
--list-all默认区域的服务、端口、源、目标这是最常用的现状快照
--list-all-zones所有区域配置找隐藏的放行项时必看
--get-services系统预定义服务列表放行前确认服务名是否自带端口定义
区域匹配有优先级:绑定到具体来源地址的区域优先于接口所属区域,接口所属区域又优先于默认区域。规则“不生效”时,先用 --get-active-zones 确认流量实际落在哪个区域,再去看那个区域的规则,比反复改规则有效得多。
firewalld 未运行时,--state 返回 not running,此时 --add-port 之类的运行时操作会失败或毫无意义;同时要注意同一台机器上混用 firewalld 与手工 iptables/nftables 规则会互相覆盖,排查异常放行前先确认到底是谁在管这套规则。

易错点

  • 只看默认区域就下结论:非默认区域里可能留着历史放行项,必须用 --list-all-zones 全量核查
  • firewalld 服务没启用开机自启,重启后规则全丢,巡检时要同时看 systemctl is-enabled
  • 把 firewalld 与手工 iptables 规则混用,规则相互覆盖后行为难以预测,应统一到一种管理方式
  • 变更前不留档:出现访问异常时无法快速对比与回滚,应先导出区域与服务定义

数据来源与参考

  • firewalld 官方文档:Zones 概念
  • Red Hat 文档:使用 firewalld

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌