RHEL7引入的firewalld作为动态防火墙管理工具,替代了传统iptables,支持运行时无需重启即可更新规则,其核心设计基于区域(Zone)概念,通过预定义的信任级别(如public、trusted)区分不同网络环境,实现精细化流量控制,firewalld提供服务(Service)、端口(Port)、端口转发等灵活管理方式,并支持运行时配置与永久配置分离,确保规则变更的即时生效与持久化,通过firewall-cmd命令行工具或图形界面,管理员可高效管理防火墙策略,为RHEL7系统提供更安全、动态的网络安全防护。
在RHEL7(Red Hat Enterprise Linux 7)系统中,传统的静态防火墙管理工具iptables逐渐被新一代的动态防火墙管理工具firewalld所取代。firewalld作为RHEL7及后续版本的默认防火墙解决方案,以其动态管理、区域化策略、灵活配置等特性,极大地简化了网络流量控制与安全策略的运维工作,本文将详细介绍firewalld的核心概念、特性、工作原理及实践操作,帮助读者全面理解RHEL7中的动态防火墙实现。
firewalld:动态防火墙的核心定义
firewalld是RHEL7中提供的动态防火墙管理服务,它是一个基于Linux内核的netfilter框架的上层抽象工具,旨在替代传统的iptables、ip6tables、ebtables等静态防火墙工具,与iptables需要手动加载规则、重启后才能生效不同,firewalld支持动态规则更新,无需中断现有网络连接即可修改防火墙策略,真正实现了“动态”管理。
firewalld的核心设计目标是:

- 简化配置:通过区域(Zone)、服务(Service)、端口(Port)等抽象概念,降低防火墙规则的复杂度;
- 动态生效:支持运行时(Runtime)与永久(Permanent)配置分离,规则修改后立即生效,无需重启服务;
- 灵活适配:支持多种网络场景(如家庭、办公、公共网络等),通过区域策略快速切换安全级别;
- 向后兼容:仍支持通过
iptables命令直接操作底层规则,满足高级用户需求。
firewalld的核心特性:动态性的体现
区域(Zone)管理:基于信任级别的动态策略
firewalld将网络接口划分为不同的区域,每个区域预设了一组安全规则(如允许/拒绝特定流量),用户可根据网络环境(如内网、外网、DMZ)将接口绑定到对应区域。
public(公共区域):默认区域,仅允许必要的入站流量(如SSH),拒绝其他未允许的连接;trusted(信任区域):允许所有入站和出站流量,适用于内网可信环境;dmz(隔离区域):仅允许特定服务(如HTTP、FTP)的入站流量,适用于对外提供服务的服务器;block(阻止区域):拒绝所有入站流量,仅允许出站流量。
通过动态切换接口所属区域,可快速调整网络访问策略,无需手动修改复杂规则。
运行时与永久配置分离:动态修改的基础
firewalld将配置分为两类:
- 运行时配置(Runtime):当前生效的规则,修改后立即生效,但重启服务后会丢失;
- 永久配置(Permanent):持久化的规则,需通过
--permanent参数添加,重启服务后仍保留。
临时开放HTTP端口(仅当前生效):
sudo firewall-cmd --add-service=http
永久开放HTTP端口(重启后仍生效):
sudo firewall-cmd --permanent --add-service=http
通过--reload命令可将永久配置加载到运行时,实现“动态持久化”:
sudo firewall-cmd --reload
服务(Service)与端口(Port)抽象:简化规则管理
firewalld通过服务(预定义的应用层协议,如HTTP、SSH、MySQL)和端口(TCP/UDP端口号)简化规则配置,服务定义存储在/usr/lib/firewalld/services/目录下(如http.xml定义了80端口的TCP流量),用户无需记忆复杂的iptables命令,直接通过服务名称即可添加规则:
# 允许SSH服务(默认22端口) sudo firewall-cmd --add-service=ssh
若需开放自定义端口,可直接指定端口号和协议:
sudo firewall-cmd --add-port=8080/tcp
富规则(Rich Rules):精细化流量控制
对于复杂场景(如基于IP、MAC地址、时间段的规则),firewalld支持富规则,其语法更接近自然语言,可实现更精细的控制。
# 仅允许192.168.1.100访问本机的3306端口(MySQL) sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'
富规则支持“允许/拒绝”、“日志记录”、“动作执行”等复杂逻辑,满足企业级安全需求。
firewalld的工作原理:动态性的底层支撑
firewalld的动态性依赖于其双模式运行机制和区域策略缓存:
后端兼容与抽象
firewalld底层仍依赖iptables/ip6tables/ebtables或nftables(RHEL8+默认)实现数据包过滤,但通过抽象层隐藏了复杂的iptables命令,用户通过firewalld命令配置规则时,firewalld会自动将其转换为对应的iptables规则并加载到内核。
区域策略的动态切换
当接口从A区域切换到B区域时,firewalld会自动移除A区域的规则,加载B区域的规则,整个过程无需中断网络连接,将eth0从public区域切换到trusted区域:
sudo firewall-cmd --zone=trusted --change-interface=eth0
切换后,eth0的入站流量策略立即从“仅允许SSH”变为“允许所有”。
事件驱动的规则更新
firewalld通过D-Bus总线监听配置变更事件,当用户通过firewall-cmd或图形界面修改规则时,firewalld会立即更新运行时规则,并通过netfilter的setsockopt机制动态应用,无需重新加载整个防火墙规则表。
实践操作:firewalld动态管理示例
查看防火墙状态与区域信息
# 查看firewalld服务状态 sudo systemctl status firewalld # 查看当前默认区域 sudo firewall-cmd --get-default-zone # 查看所有区域及其绑定的接口 sudo firewall-cmd --get-active-zones
动态添加/删除服务
# 临时允许HTTP服务(

