Linux firewalld 防火墙从入门到精通:原理与配置全解析

前言

在网络技术飞速发展的当下,网络安全问题愈发突出,防火墙作为网络安全的第一道防线,其重要性不言而喻。在 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 引入了网络区域的概念,将网络链接和网络接口按安全等级划分区域,是一款动态的防火墙管理工具。其核心特性可总结为以下几点:

  1. 协议与桥接支持:兼容 IPv4、IPv6 防火墙设置,同时支持以太网桥接,适配多种网络环境;
  2. 双配置模式:提供运行时配置永久配置,运行时配置即时生效但重启后失效,永久配置需重载或重启服务后生效,兼顾测试与长期使用需求;
  3. 灵活的规则接口:支持服务或应用程序直接添加防火墙规则,无需手动配置对应端口,简化配置流程;
  4. 向下兼容:底层仍通过内核 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-firewallfirewalld/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 会按照固定的优先级顺序 匹配数据包对应的区域,第一个匹配的规则胜出,后续规则不再生效,具体匹配顺序为:

  1. 源 IP 匹配:若数据包的源 IP 地址已关联到 firewalld 的特定区域,则直接执行该区域的防火墙规则;
  2. 网络接口匹配:若源 IP 地址未关联任何区域,则根据数据包的传入网络接口所属区域执行对应规则;
  3. 默认区域匹配:若网络接口也未关联任何区域,则使用系统默认区域的规则进行处理。

firewalld 的默认区域并非独立的区域 ,而是指向系统中已定义的某个预定义区域,默认情况下系统默认区域为public,管理员可根据服务器的实际部署环境修改默认区域(如内网服务器可设置为internalhome,网关服务器可设置为external)。

2.2 firewalld 预定义区域及默认策略

firewalld 内置了 9 个预定义区域,每个区域都预设了不同的安全策略,从规则最宽松到最严格依次为:trustedhome/internalworkpublicexternaldmzblockdrop。所有预定义区域的默认策略规则及适用场景如下表所示:

表格

区域名称 默认策略规则 适用场景
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 丢弃所有流入流量,除非与流出流量相关;不返回任何错误信息(静默丢弃) 最高安全等级,如防攻击服务器、核心数据服务器

对预定义区域的核心说明:

  1. 所有区域的默认基础策略均为 "拒绝流入流量,除非与流出流量相关",即默认拒绝所有外部主动访问,允许本机主动访问外部后的回包,符合网络安全的 "最小权限原则";
  2. 预定义策略仅为默认配置,每个区域可根据实际需求自定义开启 / 关闭服务、端口、协议等,灵活调整安全策略;
  3. external区域默认开启 IP 伪装功能,这一特性使其非常适合作为网关服务器的外网接口区域,实现内网地址的 NAT 转换;
  4. drop区域是安全等级最高的区域,静默丢弃所有流入流量,不会向发送方返回任何错误信息,可有效避免服务器被外部探测和扫描。

2.3 区域的核心特性

firewalld 的网络区域设计具备三大核心特性,也是其相较于传统 iptables 的核心优势:

  1. 灵活性:每个网络接口、源 IP 地址可自由绑定到任意区域,一个区域可绑定多个接口 / IP,一个接口 / IP 也可根据需求随时切换所属区域,无绑定限制;
  2. 组合性:区域是服务、端口、协议、IP 伪装、端口转发、ICMP 过滤等规则的集合,为区域配置的所有规则,均对绑定到该区域的所有接口 / IP 生效,无需单独配置;
  3. 动态性:可在系统运行过程中,动态修改区域的规则或接口 / 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:

  1. 点击桌面左上角的活动按钮;
  2. 在弹出的界面中选择显示应用
  3. 在应用程序列表中找到防火墙配置,单击即可打开。

firewall-config 启动后,其工作界面主要分为三个核心部分,布局清晰,操作便捷:

  1. 顶部主菜单:包含文件、选项、查看、帮助四个菜单,提供重新加载防火墙、修改默认区域、开启应急模式、显示隐藏选项卡等核心操作;
  2. 中间配置选项 :包含连接、区域、服务、IPsets 四大核心选项卡,是防火墙规则配置的主要操作区域,其中区域选项卡为核心配置界面;
  3. 底部状态栏 :从左到右依次显示连接状态 (是否成功连接 firewalld 服务)、默认区域 (当前系统的默认防火墙区域)、锁定状态 (是否锁定防火墙配置)、应急模式(是否开启静默丢弃模式),实时展示防火墙的运行状态。

重要注意 :ICMP 类型、直接配置、锁定白名单等高级选项卡,默认处于隐藏状态,需从顶部查看下拉菜单中手动选择后,才能在界面中显示。

3.3 核心配置:运行时配置 vs 永久配置

firewall-config 支持运行时配置永久配置 两种模式,可通过界面顶部的配置下拉菜单自由切换,二者的核心区别、适用场景及生效方式如下,这是配置 firewalld 的基础,必须熟练掌握:

  1. 运行时配置

    • 定义:当前系统正在使用的防火墙配置,属于 "临时配置";
    • 生效方式:修改后立即生效,无需重载服务;
    • 失效条件:重启 firewalld 服务或重启 Linux 系统后,配置会完全丢失;
    • 适用场景:防火墙规则测试,避免配置错误导致网络断开、服务不可用等问题。
  2. 永久配置

    • 定义:存储在 firewalld 配置文件中的规则,属于 "长期配置";
    • 生效方式:修改后不会立即生效,需通过手动重载防火墙才能生效;
    • 失效条件:配置后永久保存在配置文件中,重启服务或系统后不会丢失;
    • 适用场景:经过测试验证后的正式防火墙规则,用于生产环境长期使用。

配置建议:遵循 "先测试后永久" 的原则,先在运行时配置中测试规则效果,确认配置正确、网络和服务正常后,再切换到永久配置模式同步规则,最后重新加载防火墙,使永久配置生效,避免直接配置永久规则导致的网络故障。

3.4 区域选项卡:核心配置界面

区域选项卡 是 firewall-config 的核心配置界面,firewalld 的所有防火墙规则均基于区域进行配置,该选项卡下包含服务、端口、协议、源端口、伪装、端口转发、ICMP 过滤器等子选项卡,每个子选项卡对应一项规则配置,以下逐一讲解各子选项卡的具体配置方法和适用场景。

3.4.1 服务子选项卡

用于定义当前区域允许外部访问的网络服务,firewalld 预定义了 70 + 常用网络服务(如 ssh、http、https、mysql、dns、ftp 等),每个预定义服务都已关联好对应的端口和协议,只需勾选服务名称,即可自动打开相关端口,无需手动配置,是最常用的配置方式之一。

配置步骤

  1. 在左侧区域列表中,选择需要配置的目标区域(如 public、dmz、external);
  2. 切换到右侧服务 子选项卡,勾选服务列表中需要允许的服务(取消勾选则表示禁止该服务);
  3. 若需要配置永久规则,先切换到顶部配置→永久 模式,再重复上述勾选操作,最后通过文件→重新加载防火墙使配置生效。
3.4.2 端口子选项卡

用于配置当前区域允许访问的自定义端口 / 端口范围,适用于 firewalld 未预定义的服务(如自定义业务端口 8080、9000,或端口范围 9000-9005 等),支持 TCP、UDP 两种常用协议,可精准配置非标准端口。

配置步骤

  1. 在左侧选择目标区域,点击右侧端口子选项卡;
  2. 点击界面中的添加按钮,弹出端口配置窗口;
  3. 端口 / 端口范围输入框中,输入单个端口(如 8080)或端口范围(如 9000-9005);
  4. 协议 下拉菜单中,选择对应的协议(TCP/UDP),点击确定完成添加;
  5. 永久配置需切换模式并重新加载防火墙,操作同服务子选项卡。
3.4.3 协议子选项卡

用于允许当前区域的特定网络协议通过防火墙,如 ICMP、TCP、UDP、SCTP、GRE 等,适用于需要基于协议而非端口进行流量过滤的场景,无需配置具体端口,直接对协议进行管控。

配置步骤

  1. 选择目标区域,点击右侧协议子选项卡;
  2. 点击添加按钮,在弹出的窗口中,可直接选择预定义协议(如 TCP、ICMP),或在 "其他协议" 输入框中输入自定义协议名称;
  3. 点击确定,完成协议添加,配置立即生效(运行时模式)。
3.4.4 源端口子选项卡

用于配置允许访问当前区域的源端口 / 端口范围,即仅允许来自客户端指定源端口的数据包进入服务器,支持 TCP、UDP 协议,适用于需要严格限制客户端端口的特殊场景(如仅允许客户端从 8000 端口访问服务器,其他端口的访问请求全部拒绝)。

配置步骤

  1. 选择目标区域,点击右侧源端口子选项卡;
  2. 点击添加按钮,输入源端口 / 端口范围,选择对应的协议(TCP/UDP);
  3. 点击确定完成配置,该规则仅对客户端的源端口进行限制,不影响服务器的目标端口。
3.4.5 伪装子选项卡

用于开启 **IP 伪装(网络地址转换,NAT)** 功能,将服务器的私有网络地址映射到公网 IP 地址,使内网主机通过该服务器的公网 IP 访问互联网,该功能仅适用于 IPv4 网络 ,通常在网关服务器的external区域开启,是实现内网上网的核心配置。

配置步骤

  1. 选择需要开启 IP 伪装的目标区域(如 external),点击右侧伪装子选项卡;
  2. 勾选界面中的启用伪装复选框,即可完成配置,运行时模式下勾选后立即生效。
3.4.6 端口转发子选项卡

用于将当前服务器的指定端口,映射到本机其他端口或其他主机的指定端口 ,实现端口转发 / 端口映射功能,该功能仅适用于 IPv4 网络 ,且有一个前提条件:必须先开启目标区域的伪装功能,否则端口转发规则无法生效。

常见配置场景

  • 本机端口转发:将服务器 80 端口转发到本机 8080 端口,外部访问 80 端口即可访问 8080 端口的服务;
  • 跨主机端口转发:将服务器 80 端口转发到内网 192.168.2.10 的 80 端口,实现外部对内部服务的访问。

配置步骤

  1. 确认目标区域已开启伪装功能(未开启则先按 3.4.5 步骤配置);
  2. 选择目标区域,点击右侧端口转发子选项卡;
  3. 点击添加 按钮,在弹出的窗口中配置转发参数:
    • 协议:选择 TCP 或 UDP(根据服务协议而定);
    • 端口 / 端口范围:需要转发的源端口(如 80);
    • 目标地址:转发的目标 IP 地址(本机转发可留空,跨主机转发输入目标主机 IP);
    • 端口 / 端口范围:转发的目标端口(如 8080);
  4. 点击确定,完成端口转发配置。
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:数据包超时(数据包传输过程中超时的错误提示)。

配置步骤

  1. 选择目标区域,点击右侧ICMP 过滤器 子选项卡(若未显示,先从查看菜单中调出);
  2. 勾选需要拒绝的 ICMP 类型(如 echo-request,拒绝外部 ping 服务器);
  3. 点击确定完成配置,运行时模式下立即生效。

3.5 服务选项卡:自定义服务配置

firewalld 中的服务 是端口、协议、模块和目标地址的组合,预定义服务的配置文件存放在/usr/lib/firewalld/services/目录下,该目录下的文件为系统默认配置,不建议修改 。若需要自定义服务,需将配置文件放置在/etc/firewalld/services/目录下,通过 firewall-config 的服务选项卡进行创建和修改。

重要特性 :服务选项卡仅能在永久配置模式下修改,运行时配置模式下,服务列表为只读状态,无法编辑和修改。

服务选项卡包含端口、协议、源端口、模块、目标地址 5 个子选项卡,其中端口、协议、源端口三个子选项卡的配置方法,与区域选项卡下的同名子选项卡完全一致,以下重点讲解特有的两个子选项卡:

  1. 模块子选项卡 :用于为自定义服务添加网络过滤的辅助模块(如nf_conntrack_amandanf_conntrack_ftp等),这些模块可增强防火墙的流量过滤能力,解决特殊服务的连接跟踪问题;
  2. 目标地址子选项卡:用于为自定义服务指定目标 IP 地址,配置后该服务仅允许访问指定的目标 IP,若 IPv4 和 IPv6 地址均留空,则表示无限制,可访问任意目标地址。

自定义服务的优势:将企业常用的自定义端口、协议封装为服务后,可在任意区域中通过勾选服务名称快速配置,无需重复配置端口和协议,大幅提升防火墙规则的配置效率,适合有大量自定义业务服务的企业环境。

3.6 防火墙高级操作

firewall-config 图形化工具提供了多种高级操作,可实现防火墙的精细化管理,如重新加载防火墙、修改默认区域、开启应急模式、配置锁定等,所有操作均可通过顶部主菜单完成,步骤简单,无需记忆命令。

3.6.1 重新加载防火墙

将永久配置中的规则,应用为当前系统的运行时配置,同时保持现有网络连接不中断,是使永久配置生效的核心操作,两种实现方式:

  • 图形化操作:文件→重新加载防火墙
  • 命令行操作:firewall-cmd --reload(与图形化操作等效)。
3.6.2 修改默认区域

将系统的默认防火墙区域,修改为指定的预定义区域(如 dmz、internal、external 等),修改后永久生效,步骤如下:

  1. 点击顶部菜单选项→更改默认区域
  2. 在弹出的窗口中,从列表中选择目标区域;
  3. 点击确定,完成默认区域修改。
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 配置防火墙前,需先掌握其基本使用原则,避免因操作不当导致配置错误或规则不生效,核心原则如下:

  1. 双模式适配:命令行配置同样分为运行时永久 模式,不加--permanent选项为运行时配置,加--permanent选项为永久配置;
  2. 永久配置生效方式:永久配置修改后不会立即生效 ,必须执行firewall-cmd --reload命令重载防火墙,才能使配置生效;
  3. 配置同步:可通过firewall-cmd --runtime-to-permanent命令,将当前的运行时配置直接同步为永久配置,避免重复配置;
  4. 区域指定:所有命令均支持--zone=<区域名>选项,用于指定目标配置区域,不加该选项时,所有配置均对系统默认区域生效;
  5. 执行反馈:配置成功时,命令行返回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 服务器的稳定运行保驾护航。

相关推荐
高梦轩4 小时前
MySQL高可用
android·运维·数据库
cch89187 小时前
PHP五大后台框架横向对比
开发语言·php
hsjcjh7 小时前
Nodemailer使用教程:在Node.js中发送电子邮件
linux·运维·node.js
没有梦想的咸鱼185-1037-16638 小时前
北斗高精度数据解算:破解城市峡谷/长基线/无网区难题,从毫米级定位到自动化交付——(GAMIT/GLOBK底层核心解算技术方法)
运维·arcgis·数据分析·自动化
不怕犯错,就怕不做8 小时前
linux 如何查看自己的帐号密码及samba的帐号和密码
linux·运维·服务器
实在智能RPA8 小时前
Agent 在物流行业能实现哪些自动化?——深度拆解 AI Agent 驱动的智慧物流新范式
运维·人工智能·ai·自动化
地下核武8 小时前
Ubuntu 24.04 在线安装 Qt 6.10.2 后 Qt Creator 无法启动问题记录与解决
linux·qt·ubuntu
张3239 小时前
Linux 启动过程
linux·运维
三万棵雪松9 小时前
【Linux 物联网网关主控系统-Linux主控部分(二)】
linux·嵌入式linux
wefly20179 小时前
纯前端架构深度解析:jsontop.cn,JSON 格式化与全栈开发效率平台
java·前端·python·架构·正则表达式·json·php