前言
在网络技术飞速发展的当下,网络安全问题愈发突出,防火墙作为网络安全的第一道防线,其重要性不言而喻。在 Linux 系统中,firewalld 凭借动态管理、灵活配置的特性,逐渐取代传统 iptables 成为主流的防火墙管理工具,广泛应用于企业生产环境和个人开发场景。
与传统的 iptables 相比,firewalld 支持动态规则修改而无需重启服务,创新性引入 "网络区域" 概念简化防火墙管理,同时兼容 IPv4、IPv6 和以太网桥,还提供图形化和命令行两种配置方式,满足不同用户的操作习惯。本文将基于 OpenEuler 系统,全面讲解 firewalld 防火墙的核心原理、网络区域机制、图形化和命令行配置方法,所有操作命令同样适用于 CentOS 7/8、RHEL 7/8 等主流 Linux 发行版,帮助读者从入门到精通,熟练掌握 firewalld 的配置与管理技能,为网络安全保驾护航。
一、firewalld 防火墙核心概述
1.1 firewalld 基本简介
firewalld 的核心作用是为 Linux 内核的 netfilter 包过滤机制提供匹配规则(也称为策略),通过定义不同的规则,告诉 netfilter 内核模块对来自指定源、前往指定目的或具备特定协议特征的数据包采取允许、拒绝、丢弃等处理方式。
为了更高效地组织和管理防火墙规则,firewalld 引入了网络区域的概念,将网络链接和网络接口按安全等级划分区域,是一款动态的防火墙管理工具。其核心特性可总结为以下几点:
- 协议与桥接支持:兼容 IPv4、IPv6 防火墙设置,同时支持以太网桥接,适配多种网络环境;
- 双配置模式:提供运行时配置 和永久配置,运行时配置即时生效但重启后失效,永久配置需重载或重启服务后生效,兼顾测试与长期使用需求;
- 灵活的规则接口:支持服务或应用程序直接添加防火墙规则,无需手动配置对应端口,简化配置流程;
- 向下兼容:底层仍通过内核 netfilter 实现包过滤,同时兼容传统 iptables 命令,降低学习和迁移成本。
1.2 firewalld 与 iptables 的关系
很多初学者会混淆 firewalld 和 iptables 的关系,甚至认为二者是相互替代的防火墙工具,实际上二者的定位和作用存在本质区别,核心关系可总结为:firewalld 和 iptables 都只是防火墙规则的管理工具,真正实现包过滤功能的是 Linux 内核的 netfilter 模块。
具体来说,firewalld 自身并不具备防火墙的过滤能力,它和 iptables 一样,都是通过向内核 netfilter 传递规则,由 netfilter 执行实际的数据包筛选、处理操作。二者的本质区别在于规则的管理和组织方式,而非包过滤的底层实现。
在 Linux 系统中,firewalld、iptables 与内核 netfilter 的交互逻辑为:firewall-config/firewall-cmd/system-config-firewall → firewalld/iptables服务 → iptables命令 → 内核netfilter
需要重点注意的是,在启用 firewalld 的系统中,若使用传统 iptables 命令配置规则,重启服务器或 firewalld 服务后,iptables 配置的规则会被清空并替换为 firewalld 的规则。因此建议在 firewalld 系统中,统一使用 firewalld 的专属配置工具进行规则管理,避免规则冲突。
1.3 firewalld 与 iptables service 的核心区别
除了规则管理方式,firewalld 与传统的 iptables service(iptables 服务)在配置存储、规则更新方式上也存在本质区别,具体对比如下表所示:
表格
| 特性 | firewalld | iptables service |
|---|---|---|
| 配置文件存储位置 | /usr/lib/firewalld/、/etc/firewalld/(XML 格式文件) | /etc/sysconfig/iptables(纯文本文件) |
| 规则更新方式 | 增量更新,仅修改差异规则,不清除原有规则 | 全量更新,每次修改需清除所有旧规则,重新加载新规则 |
| 网络连接保持 | 动态修改规则,不丢失现行网络连接 | 修改规则需重启服务,会断开现有连接 |
| 管理方式 | 支持图形化(firewall-config)+ 命令行(firewall-cmd) | 仅命令行(iptables)+ 配置文件编辑 |
| 核心管理概念 | 基于 "网络区域" 管理,简化规则配置 | 基于链、表、规则,配置逻辑较复杂 |
从上述对比可以清晰看出,firewalld 在规则更新效率、网络连接保持、管理便捷性上都远优于传统 iptables service,这也是其能快速成为 Linux 主流防火墙管理工具的核心原因。
二、firewalld 核心机制:网络区域
firewalld 最具特色的设计就是网络区域(Zone),它打破了传统防火墙按链、表配置的复杂逻辑,将所有网络数据流量按安全等级划分为多个区域,根据数据包的源 IP 地址或传入网络接口,将流量转入对应区域的防火墙规则进行处理,从而大幅简化防火墙的规则配置和管理。对于企业环境中不同安全等级的网络(如内网、外网、DMZ 区),通过区域划分可以快速实现差异化的安全策略,提升管理效率。
2.1 区域的规则匹配顺序
当数据包进入 Linux 系统时,firewalld 会按照固定的优先级顺序 匹配数据包对应的区域,第一个匹配的规则胜出,后续规则不再生效,具体匹配顺序为:
- 源 IP 匹配:若数据包的源 IP 地址已关联到 firewalld 的特定区域,则直接执行该区域的防火墙规则;
- 网络接口匹配:若源 IP 地址未关联任何区域,则根据数据包的传入网络接口所属区域执行对应规则;
- 默认区域匹配:若网络接口也未关联任何区域,则使用系统默认区域的规则进行处理。
firewalld 的默认区域并非独立的区域 ,而是指向系统中已定义的某个预定义区域,默认情况下系统默认区域为public,管理员可根据服务器的实际部署环境修改默认区域(如内网服务器可设置为internal或home,网关服务器可设置为external)。
2.2 firewalld 预定义区域及默认策略
firewalld 内置了 9 个预定义区域,每个区域都预设了不同的安全策略,从规则最宽松到最严格依次为:trusted → home/internal → work → public → external → dmz → block → drop。所有预定义区域的默认策略规则及适用场景如下表所示:
表格
| 区域名称 | 默认策略规则 | 适用场景 |
|---|---|---|
| trusted | 允许所有数据包进入,无任何限制 | 完全信任的网络(如企业内网核心区、本地局域网) |
| home | 拒绝流入流量,除非与流出流量相关;允许 ssh、mdns、ipp-client 等内网常用服务 | 家庭网络 |
| internal | 与 home 区域规则完全相同,仅命名区分 | 企业内部网络 |
| work | 拒绝流入流量,除非与流出流量相关;允许 ssh、ipp-client 等办公常用服务 | 企业办公网络 |
| public | 拒绝流入流量,除非与流出流量相关;仅允许 ssh、dhcpv6-client 基础服务 | 公共网络(如机房、互联网环境) |
| external | 拒绝流入流量,除非与流出流量相关;仅允许 ssh 服务;默认开启 IP 伪装(地址转换) | 外网出口服务器(如网关、公网服务器) |
| dmz | 拒绝流入流量,除非与流出流量相关;仅允许 ssh 服务 | 非军事区(DMZ),如网站、应用服务器 |
| block | 拒绝所有流入流量,除非与流出流量相关;对流入流量返回 icmp-host-prohibited 错误 | 需严格限制外部访问的网络 |
| drop | 丢弃所有流入流量,除非与流出流量相关;不返回任何错误信息(静默丢弃) | 最高安全等级,如防攻击服务器、核心数据服务器 |
对预定义区域的核心说明:
- 所有区域的默认基础策略均为 "拒绝流入流量,除非与流出流量相关",即默认拒绝所有外部主动访问,允许本机主动访问外部后的回包,符合网络安全的 "最小权限原则";
- 预定义策略仅为默认配置,每个区域可根据实际需求自定义开启 / 关闭服务、端口、协议等,灵活调整安全策略;
external区域默认开启 IP 伪装功能,这一特性使其非常适合作为网关服务器的外网接口区域,实现内网地址的 NAT 转换;drop区域是安全等级最高的区域,静默丢弃所有流入流量,不会向发送方返回任何错误信息,可有效避免服务器被外部探测和扫描。
2.3 区域的核心特性
firewalld 的网络区域设计具备三大核心特性,也是其相较于传统 iptables 的核心优势:
- 灵活性:每个网络接口、源 IP 地址可自由绑定到任意区域,一个区域可绑定多个接口 / IP,一个接口 / IP 也可根据需求随时切换所属区域,无绑定限制;
- 组合性:区域是服务、端口、协议、IP 伪装、端口转发、ICMP 过滤等规则的集合,为区域配置的所有规则,均对绑定到该区域的所有接口 / IP 生效,无需单独配置;
- 动态性:可在系统运行过程中,动态修改区域的规则或接口 / IP 的绑定关系,无需重启 firewalld 服务,且不会丢失现有网络连接,适合 7×24 小时运行的生产环境。
三、firewalld 图形化配置:firewall-config
firewalld 提供了可视化的图形化配置工具firewall-config,支持 firewalld 的所有功能特性,操作直观、易于上手,无需记忆复杂的命令,适合防火墙初学者或需要快速配置防火墙规则的场景。与命令行配置相比,图形化工具可以实时查看配置效果,避免命令输入错误导致的配置问题,同时支持一键切换运行时 / 永久配置,兼顾测试与正式部署。
3.1 安装 firewall-config 图形工具
OpenEuler、CentOS、RHEL 等 Linux 发行版,默认未安装 firewall-config 图形工具和桌面环境,需先安装相关依赖包,具体步骤如下:
3.1.1 安装 GNOME 桌面环境(无桌面时需执行)
如果 Linux 服务器为纯命令行环境,需先安装 GNOME 桌面核心组件,命令如下:
# 安装GNOME桌面核心组件,自动解决依赖
dnf install -y gnome-shell gdm gnome-session gnome-terminal
# 设置系统默认启动为图形化目标
systemctl set-default graphical.target
# 重启系统使桌面环境生效(可选,也可通过init 5临时切换)
reboot
3.1.2 安装 firewall-config 工具
无论是否安装桌面环境,都需单独安装 firewall-config 图形化工具,命令如下:
# 安装firewalld图形化配置工具
dnf -y install firewall-config
3.2 启动 firewall-config
系统重启进入 GNOME 桌面环境后,按以下步骤快速启动 firewall-config:
- 点击桌面左上角的活动按钮;
- 在弹出的界面中选择显示应用;
- 在应用程序列表中找到防火墙配置,单击即可打开。
firewall-config 启动后,其工作界面主要分为三个核心部分,布局清晰,操作便捷:
- 顶部主菜单:包含文件、选项、查看、帮助四个菜单,提供重新加载防火墙、修改默认区域、开启应急模式、显示隐藏选项卡等核心操作;
- 中间配置选项 :包含连接、区域、服务、IPsets 四大核心选项卡,是防火墙规则配置的主要操作区域,其中区域选项卡为核心配置界面;
- 底部状态栏 :从左到右依次显示连接状态 (是否成功连接 firewalld 服务)、默认区域 (当前系统的默认防火墙区域)、锁定状态 (是否锁定防火墙配置)、应急模式(是否开启静默丢弃模式),实时展示防火墙的运行状态。
重要注意 :ICMP 类型、直接配置、锁定白名单等高级选项卡,默认处于隐藏状态,需从顶部查看下拉菜单中手动选择后,才能在界面中显示。
3.3 核心配置:运行时配置 vs 永久配置
firewall-config 支持运行时配置 和永久配置 两种模式,可通过界面顶部的配置下拉菜单自由切换,二者的核心区别、适用场景及生效方式如下,这是配置 firewalld 的基础,必须熟练掌握:
-
运行时配置
- 定义:当前系统正在使用的防火墙配置,属于 "临时配置";
- 生效方式:修改后立即生效,无需重载服务;
- 失效条件:重启 firewalld 服务或重启 Linux 系统后,配置会完全丢失;
- 适用场景:防火墙规则测试,避免配置错误导致网络断开、服务不可用等问题。
-
永久配置
- 定义:存储在 firewalld 配置文件中的规则,属于 "长期配置";
- 生效方式:修改后不会立即生效,需通过手动重载防火墙才能生效;
- 失效条件:配置后永久保存在配置文件中,重启服务或系统后不会丢失;
- 适用场景:经过测试验证后的正式防火墙规则,用于生产环境长期使用。
配置建议:遵循 "先测试后永久" 的原则,先在运行时配置中测试规则效果,确认配置正确、网络和服务正常后,再切换到永久配置模式同步规则,最后重新加载防火墙,使永久配置生效,避免直接配置永久规则导致的网络故障。
3.4 区域选项卡:核心配置界面
区域选项卡 是 firewall-config 的核心配置界面,firewalld 的所有防火墙规则均基于区域进行配置,该选项卡下包含服务、端口、协议、源端口、伪装、端口转发、ICMP 过滤器等子选项卡,每个子选项卡对应一项规则配置,以下逐一讲解各子选项卡的具体配置方法和适用场景。
3.4.1 服务子选项卡
用于定义当前区域允许外部访问的网络服务,firewalld 预定义了 70 + 常用网络服务(如 ssh、http、https、mysql、dns、ftp 等),每个预定义服务都已关联好对应的端口和协议,只需勾选服务名称,即可自动打开相关端口,无需手动配置,是最常用的配置方式之一。
配置步骤:
- 在左侧区域列表中,选择需要配置的目标区域(如 public、dmz、external);
- 切换到右侧服务 子选项卡,勾选服务列表中需要允许的服务(取消勾选则表示禁止该服务);
- 若需要配置永久规则,先切换到顶部配置→永久 模式,再重复上述勾选操作,最后通过文件→重新加载防火墙使配置生效。
3.4.2 端口子选项卡
用于配置当前区域允许访问的自定义端口 / 端口范围,适用于 firewalld 未预定义的服务(如自定义业务端口 8080、9000,或端口范围 9000-9005 等),支持 TCP、UDP 两种常用协议,可精准配置非标准端口。
配置步骤:
- 在左侧选择目标区域,点击右侧端口子选项卡;
- 点击界面中的添加按钮,弹出端口配置窗口;
- 在端口 / 端口范围输入框中,输入单个端口(如 8080)或端口范围(如 9000-9005);
- 在协议 下拉菜单中,选择对应的协议(TCP/UDP),点击确定完成添加;
- 永久配置需切换模式并重新加载防火墙,操作同服务子选项卡。
3.4.3 协议子选项卡
用于允许当前区域的特定网络协议通过防火墙,如 ICMP、TCP、UDP、SCTP、GRE 等,适用于需要基于协议而非端口进行流量过滤的场景,无需配置具体端口,直接对协议进行管控。
配置步骤:
- 选择目标区域,点击右侧协议子选项卡;
- 点击添加按钮,在弹出的窗口中,可直接选择预定义协议(如 TCP、ICMP),或在 "其他协议" 输入框中输入自定义协议名称;
- 点击确定,完成协议添加,配置立即生效(运行时模式)。
3.4.4 源端口子选项卡
用于配置允许访问当前区域的源端口 / 端口范围,即仅允许来自客户端指定源端口的数据包进入服务器,支持 TCP、UDP 协议,适用于需要严格限制客户端端口的特殊场景(如仅允许客户端从 8000 端口访问服务器,其他端口的访问请求全部拒绝)。
配置步骤:
- 选择目标区域,点击右侧源端口子选项卡;
- 点击添加按钮,输入源端口 / 端口范围,选择对应的协议(TCP/UDP);
- 点击确定完成配置,该规则仅对客户端的源端口进行限制,不影响服务器的目标端口。
3.4.5 伪装子选项卡
用于开启 **IP 伪装(网络地址转换,NAT)** 功能,将服务器的私有网络地址映射到公网 IP 地址,使内网主机通过该服务器的公网 IP 访问互联网,该功能仅适用于 IPv4 网络 ,通常在网关服务器的external区域开启,是实现内网上网的核心配置。
配置步骤:
- 选择需要开启 IP 伪装的目标区域(如 external),点击右侧伪装子选项卡;
- 勾选界面中的启用伪装复选框,即可完成配置,运行时模式下勾选后立即生效。
3.4.6 端口转发子选项卡
用于将当前服务器的指定端口,映射到本机其他端口或其他主机的指定端口 ,实现端口转发 / 端口映射功能,该功能仅适用于 IPv4 网络 ,且有一个前提条件:必须先开启目标区域的伪装功能,否则端口转发规则无法生效。
常见配置场景:
- 本机端口转发:将服务器 80 端口转发到本机 8080 端口,外部访问 80 端口即可访问 8080 端口的服务;
- 跨主机端口转发:将服务器 80 端口转发到内网 192.168.2.10 的 80 端口,实现外部对内部服务的访问。
配置步骤:
- 确认目标区域已开启伪装功能(未开启则先按 3.4.5 步骤配置);
- 选择目标区域,点击右侧端口转发子选项卡;
- 点击添加 按钮,在弹出的窗口中配置转发参数:
- 协议:选择 TCP 或 UDP(根据服务协议而定);
- 端口 / 端口范围:需要转发的源端口(如 80);
- 目标地址:转发的目标 IP 地址(本机转发可留空,跨主机转发输入目标主机 IP);
- 端口 / 端口范围:转发的目标端口(如 8080);
- 点击确定,完成端口转发配置。
3.4.7 ICMP 过滤器子选项卡
ICMP(互联网控制报文协议)主要用于在网络设备之间发送出错信息、网络探测信息(如 ping 命令的 echo-request 请求和 echo-reply 应答)。ICMP 过滤器子选项卡用于拒绝当前区域的特定 ICMP 类型,未被勾选拒绝的 ICMP 类型,默认全部允许通过防火墙。
常用 ICMP 类型:
- echo-request:ping 请求(拒绝该类型,则服务器无法被外部 ping 通);
- echo-reply:ping 应答(对端服务器的 ping 回复);
- destination-unreachable:目的地址不可达(目标 IP 或端口无法访问时的错误提示);
- time-exceeded:数据包超时(数据包传输过程中超时的错误提示)。
配置步骤:
- 选择目标区域,点击右侧ICMP 过滤器 子选项卡(若未显示,先从查看菜单中调出);
- 勾选需要拒绝的 ICMP 类型(如 echo-request,拒绝外部 ping 服务器);
- 点击确定完成配置,运行时模式下立即生效。
3.5 服务选项卡:自定义服务配置
firewalld 中的服务 是端口、协议、模块和目标地址的组合,预定义服务的配置文件存放在/usr/lib/firewalld/services/目录下,该目录下的文件为系统默认配置,不建议修改 。若需要自定义服务,需将配置文件放置在/etc/firewalld/services/目录下,通过 firewall-config 的服务选项卡进行创建和修改。
重要特性 :服务选项卡仅能在永久配置模式下修改,运行时配置模式下,服务列表为只读状态,无法编辑和修改。
服务选项卡包含端口、协议、源端口、模块、目标地址 5 个子选项卡,其中端口、协议、源端口三个子选项卡的配置方法,与区域选项卡下的同名子选项卡完全一致,以下重点讲解特有的两个子选项卡:
- 模块子选项卡 :用于为自定义服务添加网络过滤的辅助模块(如
nf_conntrack_amanda、nf_conntrack_ftp等),这些模块可增强防火墙的流量过滤能力,解决特殊服务的连接跟踪问题; - 目标地址子选项卡:用于为自定义服务指定目标 IP 地址,配置后该服务仅允许访问指定的目标 IP,若 IPv4 和 IPv6 地址均留空,则表示无限制,可访问任意目标地址。
自定义服务的优势:将企业常用的自定义端口、协议封装为服务后,可在任意区域中通过勾选服务名称快速配置,无需重复配置端口和协议,大幅提升防火墙规则的配置效率,适合有大量自定义业务服务的企业环境。
3.6 防火墙高级操作
firewall-config 图形化工具提供了多种高级操作,可实现防火墙的精细化管理,如重新加载防火墙、修改默认区域、开启应急模式、配置锁定等,所有操作均可通过顶部主菜单完成,步骤简单,无需记忆命令。
3.6.1 重新加载防火墙
将永久配置中的规则,应用为当前系统的运行时配置,同时保持现有网络连接不中断,是使永久配置生效的核心操作,两种实现方式:
- 图形化操作:文件→重新加载防火墙;
- 命令行操作:
firewall-cmd --reload(与图形化操作等效)。
3.6.2 修改默认区域
将系统的默认防火墙区域,修改为指定的预定义区域(如 dmz、internal、external 等),修改后永久生效,步骤如下:
- 点击顶部菜单选项→更改默认区域;
- 在弹出的窗口中,从列表中选择目标区域;
- 点击确定,完成默认区域修改。
3.6.3 应急模式
也称为 "恐慌模式",开启后会丢弃所有网络数据包,拒绝所有外部和内部的网络连接(包括本机的主动访问),适用于服务器遭受网络攻击、暴力破解时的紧急防护,可快速阻断所有网络流量,操作方式:
- 开启应急模式:选项→应急模式→启用;
- 关闭应急模式:选项→应急模式→禁用。
3.6.4 配置锁定
开启后会锁定防火墙的所有配置,禁止任何用户和程序修改防火墙规则,仅允许白名单中的应用程序进行配置修改,可有效防止误操作或未授权用户修改防火墙规则,提升配置安全性,操作方式:
- 开启配置锁定:选项→锁定→启用;
- 管理白名单:查看→锁定白名单,在弹出的界面中添加允许修改防火墙配置的应用程序。
四、firewalld 命令行配置:firewall-cmd
虽然 firewall-config 图形化工具操作便捷,但在企业生产环境中,Linux 服务器大多为无桌面的纯命令行环境 ,此时需要使用 firewalld 的命令行工具firewall-cmd。firewall-cmd 是 firewalld 的核心命令行工具,支持 firewalld 的所有配置操作,功能比图形化工具更全面,且可通过 Shell 脚本实现防火墙规则的自动化配置,是企业 Linux 运维人员的必备技能。
4.1 firewall-cmd 基本使用原则
在使用 firewall-cmd 配置防火墙前,需先掌握其基本使用原则,避免因操作不当导致配置错误或规则不生效,核心原则如下:
- 双模式适配:命令行配置同样分为运行时 和永久 模式,不加
--permanent选项为运行时配置,加--permanent选项为永久配置; - 永久配置生效方式:永久配置修改后不会立即生效 ,必须执行
firewall-cmd --reload命令重载防火墙,才能使配置生效; - 配置同步:可通过
firewall-cmd --runtime-to-permanent命令,将当前的运行时配置直接同步为永久配置,避免重复配置; - 区域指定:所有命令均支持
--zone=<区域名>选项,用于指定目标配置区域,不加该选项时,所有配置均对系统默认区域生效; - 执行反馈:配置成功时,命令行返回
success;配置失败时,返回具体的错误信息,可根据错误信息排查问题。
4.2 获取 firewalld 预定义信息
在配置防火墙规则前,首先需要查看 firewalld 的预定义信息,包括可用区域、可用服务、可用 ICMP 类型,为后续配置提供依据,核心查询命令如下,执行后直接返回结果,简洁直观:
# 查看firewalld所有可用的预定义区域
firewall-cmd --get-zones
# 查看firewalld所有预定义的网络服务(70+常用服务)
firewall-cmd --get-services
# 查看firewalld所有可用的ICMP阻塞类型
firewall-cmd --get-icmptypes
# 查看指定ICMP类型的详细说明(如echo-request,ping请求)
firewall-cmd --info-icmptype=echo-request
4.3 区域管理命令
区域管理是 firewall-cmd 的核心功能,包括查看区域信息、设置默认区域、为网络接口绑定 / 切换 / 删除区域等,所有区域管理命令均支持--permanent选项,可配置永久规则,常用命令及功能说明如下表所示:
表格
| 命令格式 | 功能说明 |
|---|---|
firewall-cmd --get-default-zone |
查看系统当前的默认防火墙区域 |
firewall-cmd --set-default-zone=<zone> |
设置系统默认防火墙区域,永久生效 |
firewall-cmd --get-active-zones |
查看所有已激活的区域(绑定了网络接口 / 源 IP 的区域) |
firewall-cmd --get-zone-of-interface=<interface> |
查看指定网络接口(如 ens33)所属的防火墙区域 |
firewall-cmd --zone=<zone> --add-interface=<interface> |
为指定网络接口绑定目标区域 |
firewall-cmd --zone=<zone> --change-interface=<interface> |
为指定网络接口切换所属的目标区域 |
firewall-cmd --zone=<zone> --remove-interface=<interface> |
从指定区域中,删除网络接口的绑定关系 |
firewall-cmd --list-all-zones |
查看所有区域的详细规则(含服务、端口、接口、ICMP 过滤等) |
firewall-cmd [--zone=<zone>] --list-all |
查看指定区域的详细规则,不加 --zone 则查看默认区域 |
区域管理实操示例:
# 1. 查看当前系统的默认区域
firewall-cmd --get-default-zone
# 2. 查看默认区域的所有详细规则
firewall-cmd --list-all
# 3. 查看ens33网络接口所属的区域
firewall-cmd --get-zone-of-interface=ens33
# 4. 将ens33接口切换到internal区域(运行时配置)
firewall-cmd --zone=internal --change-interface=ens33
# 5. 查看所有已激活的防火墙区域
firewall-cmd --get-active-zones
# 6. 设置默认区域为dmz,永久生效
firewall-cmd --set-default-zone=dmz --permanent
# 7. 重载防火墙,使永久配置生效
firewall-cmd --reload
4.4 服务管理命令
服务管理用于为指定区域添加 / 删除 / 查看允许的网络服务 ,基于 firewalld 预定义服务进行配置,无需手动指定端口,是企业生产环境中最常用的配置方式之一。核心命令均支持--zone=<zone>指定区域,不加则对默认区域生效,同时支持--permanent配置永久规则,常用命令及功能说明如下表所示:
表格
| 命令格式 | 功能说明 |
|---|---|
firewall-cmd [--zone=<zone>] --list-services |
查看指定区域允许外部访问的所有服务 |
firewall-cmd [--zone=<zone>] --add-service=<服务名> |
为指定区域添加允许的网络服务 |
firewall-cmd [--zone=<zone>] --remove-service=<服务名> |
从指定区域中,删除允许的网络服务(禁止该服务) |
firewall-cmd [--zone=<zone>] --query-service=<服务名> |
查询指定区域是否允许某服务,返回 yes(允许)/no(禁止) |
服务管理实操示例:
# 1. 查看默认区域允许的所有服务
firewall-cmd --list-services
# 2. 为默认区域添加http、https服务(运行时配置,多个服务用--add-service依次添加)
firewall-cmd --add-service=http --add-service=https
# 3. 为dmz区域添加mysql服务,永久生效
firewall-cmd --zone=dmz --add-service=mysql --permanent
# 4. 从默认区域中删除ssh服务(运行时配置,禁止外部ssh访问)
firewall-cmd --remove-service=ssh
# 5. 查询dmz区域是否允许mysql服务,返回yes/no
firewall-cmd --zone=dmz --query-service=mysql
# 6. 重载防火墙,使永久配置生效
firewall-cmd --reload
4.5 端口管理命令
端口管理用于为指定区域添加 / 删除 / 查看允许的自定义端口 / 端口范围 ,适用于 firewalld 未预定义的服务(如自定义业务端口),支持 TCP、UDP 两种协议,端口格式为端口号/协议或端口范围/协议(如 8080/tcp、9000-9005/udp)。核心命令支持--zone和--permanent选项,常用命令及功能说明如下表所示:
表格
| 命令格式 | 功能说明 |
|---|---|
firewall-cmd [--zone=<zone>] --list-ports |
查看指定区域允许外部访问的所有端口 / 端口范围 |
firewall-cmd [--zone=<zone>] --add-port=<端口/协议> |
为指定区域添加允许的端口 / 端口范围 |
firewall-cmd [--zone=<zone>] --remove-port=<端口/协议> |
从指定区域中,删除允许的端口 / 端口范围(禁止该端口) |
firewall-cmd [--zone=<zone>] --query-port=<端口/协议> |
查询指定区域是否允许某端口,返回 yes/no |
端口管理实操示例:
# 1. 查看dmz区域允许的所有端口
firewall-cmd --zone=dmz --list-ports
# 2. 为dmz区域添加8080/tcp端口,永久生效
firewall-cmd --zone=dmz --add-port=8080/tcp --permanent
# 3. 为默认区域添加9000-9005/udp端口范围(运行时配置)
firewall-cmd --add-port=9000-9005/udp
# 4. 从dmz区域中删除8080/tcp端口,永久生效
firewall-cmd --zone=dmz --remove-port=8080/tcp --permanent
# 5. 重载防火墙,使永久配置生效
firewall-cmd --reload
4.6 源 IP 管理命令
源 IP 管理用于将指定源 IP 地址 / 子网的流量,定向导向目标防火墙区域 ,实现基于源 IP 的精细化访问控制。例如,将企业内网 192.168.1.0/24 的流量导向 trusted 区域(允许所有访问),将外网陌生 IP 的流量导向 external 区域(严格限制),核心命令支持--permanent选项,常用命令及功能说明如下表所示:
表格
| 命令格式 | 功能说明 |
|---|---|
firewall-cmd --zone=<zone> --add-source=<IP/子网> |
将指定源 IP / 子网的流量,导向目标区域 |
firewall-cmd --zone=<zone> --remove-source=<IP/子网> |
取消指定源 IP / 子网的区域导向,恢复默认匹配规则 |
firewall-cmd --zone=<zone> --list-sources |
查看指定区域关联的所有源 IP 地址 / 子网 |
源 IP 管理实操示例:
# 1. 将192.168.1.0/24内网子网导向trusted区域,永久生效
firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent
# 2. 将10.0.0.100单个IP导向dmz区域(运行时配置)
firewall-cmd --zone=dmz --add-source=10.0.0.100
# 3. 查看trusted区域关联的所有源IP/子网
firewall-cmd --zone=trusted --list-sources
# 4. 取消10.0.0.100的dmz区域导向(运行时配置)
firewall-cmd --zone=dmz --remove-source=10.0.0.100
# 5. 重载防火墙,使永久配置生效
firewall-cmd --reload
4.7 ICMP 过滤命令
ICMP 过滤用于拒绝 / 允许指定区域的特定 ICMP 类型 ,最常用的场景是拒绝 echo-request(ping 请求),实现服务器禁止 ping 的效果。核心命令支持--zone和--permanent选项,常用命令及功能说明如下表所示:
表格
| 命令格式 | 功能说明 |
|---|---|
firewall-cmd [--zone=<zone>] --list-icmp-blocks |
查看指定区域拒绝的所有 ICMP 类型 |
firewall-cmd [--zone=<zone>] --add-icmp-block=<ICMP类型> |
为指定区域添加拒绝的 ICMP 类型 |
firewall-cmd [--zone=<zone>] --remove-icmp-block=<ICMP类型> |
从指定区域中,删除拒绝的 ICMP 类型(允许该类型) |
firewall-cmd [--zone=<zone>] --query-icmp-block=<ICMP类型> |
查询指定区域是否拒绝某 ICMP 类型,返回 yes/no |
ICMP 过滤实操示例:
# 1. 为external区域添加拒绝echo-request(禁止ping),永久生效
firewall-cmd --zone=external --add-icmp-block=echo-request --permanent
# 2. 查看external区域拒绝的所有ICMP类型
firewall-cmd --zone=external --list-icmp-blocks
# 3. 取消external区域对echo-request的拒绝(允许ping),永久生效
firewall-cmd --zone=external --remove-icmp-block=echo-request --permanent
# 4. 重载防火墙,使永久配置生效
firewall-cmd --reload
4.8 IP 伪装与端口转发命令
IP 伪装和端口转发是 firewalld 的高级功能,主要用于网关服务器、公网服务器,实现 NAT 转换、内网服务映射等功能,二者均仅适用于 IPv4 网络,且端口转发依赖 IP 伪装功能,需先开启 IP 伪装才能配置端口转发。
4.8.1 IP 伪装(NAT)命令
IP 伪装用于将私有 IP 地址映射为公网 IP 地址,实现内网主机通过公网 IP 访问互联网,核心命令如下,支持--zone和--permanent选项:
# 查询指定区域是否开启IP伪装,返回yes/no
firewall-cmd [--zone=<zone>] --query-masquerade
# 为指定区域开启IP伪装功能
firewall-cmd [--zone=<zone>] --add-masquerade
# 为指定区域关闭IP伪装功能
firewall-cmd [--zone=<zone>] --remove-masquerade
4.8.2 端口转发命令
端口转发用于将服务器的源端口,转发到本机或其他主机的目标端口,命令格式为:--add-forward-port=port=<源端口>:proto=<协议>:toaddr=<目标IP>:toport=<目标端口>,其中toaddr为本机时可留空,核心命令如下,支持--permanent选项:
# 先为external区域开启IP伪装(端口转发依赖此功能),永久生效
firewall-cmd --zone=external --add-masquerade --permanent
# 将本机80端口(TCP)转发到192.168.2.10的8080端口,永久生效
firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.10:toport=8080 --permanent
# 查看指定区域的所有端口转发规则
firewall-cmd [--zone=<zone>] --list-forward-ports
# 删除指定的端口转发规则,永久生效
firewall-cmd --zone=external --remove-forward-port=port=80:proto=tcp:toaddr=192.168.2.10:toport=8080 --permanent
# 重载防火墙,使配置生效
firewall-cmd --reload
4.9 firewalld 状态与高级管理命令
除了规则配置,firewall-cmd 还提供了防火墙状态查询、应急模式开关、配置同步、服务管理等高级命令,是日常运维中常用的基础命令,汇总如下:
# 查看firewalld服务的运行状态,返回running(运行中)/not running(未运行)
firewall-cmd --state
# 开启应急模式(丢弃所有数据包),支持--permanent
firewall-cmd --panic-on
# 关闭应急模式
firewall-cmd --panic-off
# 查看应急模式状态,返回yes/no
firewall-cmd --query-panic
# 将当前的运行时配置,同步为永久配置,无需手动重复配置
firewall-cmd --runtime-to-permanent
# 重启firewalld服务(不推荐,建议用reload重载,避免断开连接)
systemctl restart firewalld
# 设置firewalld服务开机自启
systemctl enable firewalld
# 查看firewalld服务开机自启状态,返回enabled(开启)/disabled(关闭)
systemctl is-enabled firewalld
# 停止firewalld服务
systemctl stop firewalld
五、总结
firewalld 作为 Linux 系统中新一代的动态防火墙管理工具,凭借动态规则修改、网络区域管理、双配置模式、图形化 + 命令行双配置方式等特性,大幅简化了防火墙的配置和管理流程,相较于传统 iptables 具有显著的优势,已成为企业生产环境中的主流选择。
本文从 firewalld 的核心原理出发,详细讲解了其与 iptables、内核 netfilter 的关系,深入解析了网络区域的匹配规则和预定义策略,随后分别介绍了 firewall-config 图形化工具和 firewall-cmd 命令行工具的完整配置方法,涵盖区域、服务、端口、源 IP、ICMP 过滤、IP 伪装、端口转发等所有核心功能。
掌握 firewalld 的配置与管理,是 Linux 运维人员的必备技能,在实际应用中,需根据服务器的部署环境(如内网、外网、DMZ 区),合理划分网络区域,遵循 "最小权限原则" 配置防火墙规则,同时坚持 "先测试后永久" 的配置思路,确保网络和服务的稳定性。通过灵活运用 firewalld 的各项功能,可构建起高效、安全的网络防护体系,为 Linux 服务器的稳定运行保驾护航。