前言在 Linux 网络安全体系中防火墙是守护网络边界的第一道防线而 firewalld 作为动态防火墙管理工具凭借动态配置、区域化管理、支持 IPv4/IPv6等特性成为现代 Linux 系统如 OpenEuler、CentOS7的首选防火墙解决方案。本文将从 firewalld 基本原理出发详细讲解图形化和命令行配置方法并通过实际企业案例实现落地帮助大家快速掌握 firewalld 的配置与管理技巧。一、firewalld 防火墙核心概述1.1 firewalld 基本作用firewalld 本身不具备数据包过滤的核心功能其核心作用是为 Linux 内核的netfilter包过滤机制提供匹配规则 / 策略通过定义规则告诉 netfilter 对指定源、目的或协议特征的数据包执行允许、拒绝、转发等操作。作为动态防火墙管理工具firewalld 支持运行时配置临时生效重启失效和永久配置写入配置文件重启生效还能让应用程序直接添加防火墙规则接口无需重启服务即可生效极大提升了运维灵活性。1.2 firewalld 与 iptables 的关系很多同学会混淆 firewalld 和 iptables 的区别核心结论如下二者均依赖内核 netfilter实现数据包过滤自身仅负责维护防火墙规则firewalld 是动态规则管理工具iptables 是传统的规则配置工具二者规则结构和使用方法不同系统中 firewalld 会覆盖 iptables 规则重启服务器或 firewalld 服务时iptables 命令配置的规则不会自动加载会被 firewalld 规则替代。1.3 firewalld 与 iptables service 的核心区别二者的配置存储、规则更新方式存在本质差异具体对比如下表表格对比维度firewalldiptables service配置存储位置/usr/lib/firewalld/、/etc/firewalld/ 中的 XML 文件/etc/sysconfig/iptables 配置文件规则更新方式仅更新规则差异部分不清除旧规则不丢失现行连接每次修改需清除所有旧规则重新读取新规则配置模式支持运行时 永久两种配置动态生效仅静态配置修改后需重启服务生效管理方式区域化管理支持图形化 / 命令行工具纯命令行规则配置无区域化概念1.4 firewalld 的核心优势动态配置修改规则无需重启防火墙不中断现有网络连接区域化管理将网络流量划分为不同区域按区域制定规则简化复杂网络的防火墙配置多工具支持提供firewall-config图形化工具和firewall-cmd命令行工具满足不同运维习惯功能丰富支持服务 / 端口管理、IP 伪装、端口转发、ICMP 过滤、富规则等覆盖企业主流需求多协议支持完美兼容 IPv4、IPv6还支持以太网桥接。二、firewalld 核心概念网络区域firewalld 的核心设计理念是区域化管理它将所有网络数据流量划分为多个预定义区域根据数据包的源 IP 地址或传入网络接口将流量转入对应区域执行该区域的防火墙规则。区域的匹配遵循先匹配先生效原则优先级为源地址关联区域 传入接口关联区域 默认区域。2.1 区域匹配规则若数据包源地址关联到特定区域直接执行该区域规则若源地址未关联区域使用传入网络接口绑定的区域执行规则若网络接口也未绑定区域使用系统默认区域执行规则默认区域为 public可手动修改。2.2 firewalld 预定义区域及默认策略firewalld 提供 9 个预定义区域每个区域对应不同的安全等级和默认策略下表为各区域的核心规则说明核心重点建议熟记表格区域名称安全等级默认策略规则适用场景trusted最低完全信任允许所有数据包进入企业内网核心服务器、本地信任网络home较低拒绝流入流量仅允许与流出流量相关的连接允许 ssh、mdns、ipp-client 等家庭网络常用服务家庭网络环境internal较低与 home 区域完全相同企业内部局域网work中等拒绝流入流量仅允许与流出流量相关的连接允许 ssh、ipp-client、dhcpv6-client 等办公服务企业办公网络public中等默认区域拒绝流入流量仅允许与流出流量相关的连接允许 ssh、dhcpv6-client公共网络如机房、互联网接入external较高拒绝流入流量仅允许与流出流量相关的连接仅允许 ssh 服务默认开启 IP 伪装互联网出口网关、服务器外网接口dmz较高非军事区拒绝流入流量仅允许与流出流量相关的连接仅允许 ssh 服务对外提供服务的服务器如 web、数据库block很高拒绝所有流入流量仅允许与流出流量相关的连接主动拒绝返回 ICMP 错误需严格限制访问的服务器drop最高严格禁止丢弃所有流入流量无任何返回信息防攻击、高安全要求的服务器核心说明每个区域均可自定义修改规则如添加 / 删除服务、端口预定义规则仅为默认配置可根据实际需求调整。三、firewalld 图形化配置firewall-config 工具对于习惯图形界面的运维人员firewalld 提供了firewall-config图形化配置工具支持防火墙所有特性可实现服务、端口、伪装、端口转发等所有配置操作操作直观、易上手。以下基于OpenEuler 系统讲解详细配置步骤。3.1 安装 firewall-config 工具OpenEuler 系统若未安装桌面环境和图形化工具需先执行以下安装命令# 安装GNOME桌面环境 dnf install -y gnome-shell gdm gnome-session gnome-terminal # 设置系统默认启动图形化界面 systemctl set-default graphical.target # 安装firewalld图形化管理工具 dnf -y install firewall-config安装完成后重启系统进入桌面环境通过活动→显示应用找到防火墙配置图标点击即可打开 firewall-config。3.2 firewall-config 工作界面介绍firewall-config 界面主要分为三部分底部为状态栏核心信息如下主菜单文件、选项、查看、帮助提供重新加载、应急模式、锁定等核心操作配置选项分为运行时和永久两种配置模式可自由切换功能选项卡包含连接、区域、服务、IPsets 等其中 ICMP 过滤器、直接配置、锁定白名单需在查看菜单中勾选后显示状态栏从左到右依次显示连接状态、默认区域、锁定状态、应急模式实时展示防火墙运行状态。3.3 核心配置操作区域选项卡区域选项卡是 firewall-config 的核心配置界面可对指定区域进行服务、端口、协议、源端口、伪装、端口转发、ICMP 过滤等所有规则配置每个功能对应一个子选项卡以下为各子选项卡的核心配置方法3.3.1 服务子选项卡用于定义指定区域中允许访问的可信服务可信服务可被绑定到该区域的所有连接、接口、源地址访问。操作方法选择目标区域→勾选左侧服务名称即可允许该服务流量取消勾选则禁止特点使用服务名配置无需记忆端口号如 http 对应 80/tcpssh 对应 22/tcp人性化程度高。3.3.2 端口子选项卡用于为指定区域添加自定义允许的端口 / 端口范围适用于非 firewalld 预定义的服务如自定义业务端口 8080。操作方法选择目标区域→点击添加→输入端口 / 端口范围如 8080 或 8000-9000→选择协议TCP/UDP→点击确定。3.3.3 协议子选项卡用于允许指定区域的底层网络协议如 ICMP、TCP、UDP、GRE 等适用于基于协议的流量控制。操作方法选择目标区域→点击添加→选择协议或输入自定义协议→点击确定。3.3.4 源端口子选项卡用于限制允许访问的源端口 / 端口范围仅允许来自指定源端口的流量进入目标区域实现精细化的源端控制。操作方法选择目标区域→点击添加→输入源端口 / 范围→选择协议→点击确定。3.3.5 伪装子选项卡实现IP 伪装功能即 NAT 地址转换将私有网络地址映射到公有 IP 地址仅支持 IPv4适用于网关服务器。操作方法选择目标区域→勾选伪装复选框即可开启该区域的 IP 伪装功能。3.3.6 端口转发子选项卡将指定端口的流量转发到本机其他端口或其他主机的指定端口需配合 IP 伪装使用仅支持 IPv4适用于端口映射、服务转发。操作方法选择目标区域→点击添加→设置源端口、协议→选择转发类型本地转发 / 转发到另一主机→输入目标地址 / 端口→点击确定。3.3.7 ICMP 过滤器子选项卡用于过滤 ICMP 报文如禁止 ping、限制目的不可达提示ICMP 报文主要用于网络错误提示和网络测试如 ping、traceroute。操作方法选择目标区域→勾选左侧需要拒绝的 ICMP 类型如 echo-request 对应 ping 请求未勾选的 ICMP 类型均允许通过。3.4 服务选项卡配置服务选项卡用于管理 firewalld 的预定义服务可自定义服务的端口、协议、模块、目标地址仅支持在永久配置模式下修改运行时模式不可编辑。核心子选项卡端口、协议、源端口与区域选项卡一致、模块添加网络过滤辅助模块、目标地址限制服务仅对指定 IP / 网段开放适用场景当 firewalld 预定义服务的端口不满足需求时如将 ssh 默认端口 22 改为 12345可在此修改服务的端口配置。3.5 防火墙配置的生效与重载firewall-config 分为运行时和永久两种配置模式二者的生效规则和重载方法不同核心要点如下运行时配置修改后立即生效但系统 / 防火墙重启后失效适用于临时测试规则永久配置修改后不立即生效需重新加载防火墙或重启系统才会生效适用于正式生产环境配置重载点击主菜单选项→重新加载防火墙即可将永久配置应用为运行时配置覆盖当前临时规则。3.6 修改系统默认区域默认区域为 public可根据实际网络环境修改操作方法打开 firewall-config点击主菜单选项→改变默认区域在弹出的窗口中选择目标区域如 dmz、external点击确定修改立即生效永久生效。四、firewalld 命令行配置firewall-cmd 工具对于无桌面环境的服务器如生产环境的云服务器、物理机firewall-cmd是 firewalld 的核心命令行配置工具支持所有防火墙配置操作是运维人员必须掌握的核心命令。以下讲解 firewall-cmd 的常用操作所有命令均基于 root 用户执行。4.1 基础操作获取预定义信息首先需了解 firewalld 的预定义资源包括可用区域、可用服务、可用 ICMP 类型核心命令如下# 查看所有可用区域 firewall-cmd --get-zones # 查看所有预定义服务70种包含常用的http、https、ssh、mysql等 firewall-cmd --get-services # 查看所有可用ICMP阻塞类型如echo-request对应ping请求 firewall-cmd --get-icmptypesICMP 类型核心说明echo-replyping 回应、echo-requestping 请求、destination-unreachable目的地址不可达、time-exceeded超时等。4.2 区域管理核心命令区域管理是 firewall-cmd 的基础包括查看默认区域、修改默认区域、绑定接口、查看区域规则等下表为区域管理常用命令及说明高频使用建议熟记表格命令功能说明firewall-cmd --get-default-zone查看系统当前默认区域firewall-cmd --set-default-zonezone设置系统默认区域永久生效firewall-cmd --get-active-zones查看当前已激活的所有区域绑定了接口 / 源地址的区域firewall-cmd --get-zone-of-interfaceinterface查看指定网卡绑定的区域如 ens33firewall-cmd --zonezone --add-interfaceinterface为指定区域绑定网卡firewall-cmd --zonezone --change-interfaceinterface修改指定网卡绑定的区域firewall-cmd --zonezone --remove-interfaceinterface从指定区域移除网卡firewall-cmd --list-all查看默认区域的所有规则服务、端口、ICMP 过滤等firewall-cmd --zonezone --list-all查看指定区域的所有规则firewall-cmd --list-all-zones查看所有区域的所有规则区域管理实操示例# 查看默认区域默认返回public firewall-cmd --get-default-zone # 将默认区域改为external firewall-cmd --set-default-zoneexternal # 查看网卡ens33绑定的区域 firewall-cmd --get-zone-of-interfaceens33 # 将ens33网卡绑定到internal区域 firewall-cmd --zoneinternal --change-interfaceens33 # 查看internal区域的所有规则 firewall-cmd --zoneinternal --list-all4.3 服务管理核心命令服务管理是 firewall-cmd 最常用的操作通过服务名配置规则无需记忆端口号核心命令包括添加 / 删除服务、查看已允许服务等默认操作均为运行时配置添加--permanent参数则为永久配置。4.3.1 服务管理常用命令表格命令功能说明firewall-cmd --list-services查看默认区域已允许的服务firewall-cmd --zonezone --list-services查看指定区域已允许的服务firewall-cmd --add-serviceservice为默认区域添加允许的服务运行时firewall-cmd --zonezone --add-serviceservice --permanent为指定区域永久添加允许的服务firewall-cmd --remove-serviceservice从默认区域移除允许的服务运行时firewall-cmd --zonezone --remove-serviceservice --permanent从指定区域永久移除允许的服务4.3.2 服务管理实操示例# 查看默认区域已允许的服务 firewall-cmd --list-services # 为默认区域临时添加http服务重启防火墙失效 firewall-cmd --add-servicehttp # 为dmz区域永久添加https、mysql服务 firewall-cmd --zonedmz --add-servicehttps --add-servicemysql --permanent # 从dmz区域永久移除ssh服务 firewall-cmd --zonedmz --remove-servicessh --permanent # 查看dmz区域已允许的服务 firewall-cmd --zonedmz --list-services4.4 端口管理核心命令对于 firewalld未预定义的服务如自定义业务端口 8080、12345需通过端口号配置规则支持单个端口和端口范围格式为端口号 / 协议如 8080/tcp、8000-9000/udp。4.4.1 端口管理常用命令表格命令功能说明firewall-cmd --list-ports查看默认区域已允许的端口firewall-cmd --zonezone --list-ports查看指定区域已允许的端口firewall-cmd --add-portport/protocol为默认区域添加允许的端口运行时firewall-cmd --zonezone --add-portport/protocol --permanent为指定区域永久添加允许的端口firewall-cmd --remove-portport/protocol从默认区域移除允许的端口运行时firewall-cmd --zonezone --remove-portport/protocol --permanent从指定区域永久移除允许的端口4.4.2 端口管理实操示例# 为internal区域永久添加8080/tcp端口 firewall-cmd --zoneinternal --add-port8080/tcp --permanent # 为dmz区域永久添加8000-9000/udp端口范围 firewall-cmd --zonedmz --add-port8000-9000/udp --permanent # 查看dmz区域已允许的端口 firewall-cmd --zonedmz --list-ports # 从dmz区域永久移除8080/tcp端口 firewall-cmd --zonedmz --remove-port8080/tcp --permanent4.5 ICMP 过滤核心命令主要用于禁止 / 允许 ICMP 报文最常用的场景是禁止 ping阻塞 echo-request 类型核心命令如下# 为默认区域临时禁止ping阻塞echo-request firewall-cmd --add-icmp-blockecho-request # 为external区域永久禁止ping firewall-cmd --zoneexternal --add-icmp-blockecho-request --permanent # 查看默认区域已阻塞的ICMP类型 firewall-cmd --list-icmp-blocks # 从external区域永久取消ping禁止 firewall-cmd --zoneexternal --remove-icmp-blockecho-request --permanent4.6 firewalld 两种配置模式核心参数firewall-cmd 的所有配置均分为运行时模式和永久模式核心区别和切换命令如下这是 firewall-cmd 的核心重点极易出错需重点掌握4.6.1 两种模式核心区别运行时模式默认命令无--permanent参数修改后立即生效防火墙 / 系统重启后配置全部失效适用于临时测试防火墙规则。永久模式命令添加--permanent参数修改后不立即生效配置写入 XML 配置文件永久保存适用于生产环境正式规则配置。4.6.2 配置模式核心操作命令# 重新加载防火墙规则将永久配置应用为运行时配置覆盖当前临时规则不中断连接 firewall-cmd --reload # 将当前运行时配置写入永久配置临时规则转为永久规则 firewall-cmd --runtime-to-permanent # 查看防火墙状态包含运行时/永久配置是否一致 firewall-cmd --state # 重启firewalld服务等同于reload不推荐可能中断连接 systemctl restart firewalld核心实操流程生产环境配置规则的标准步骤# 1. 为dmz区域永久添加http服务和8080/tcp端口 firewall-cmd --zonedmz --add-servicehttp --add-port8080/tcp --permanent # 2. 重新加载防火墙使永久配置生效 firewall-cmd --reload # 3. 验证配置是否生效 firewall-cmd --zonedmz --list-all4.7 其他常用命令# 开启应急模式丢弃所有数据包防攻击紧急情况使用 firewall-cmd --panic-on # 关闭应急模式 firewall-cmd --panic-off # 查看应急模式状态 firewall-cmd --query-panic # 为默认区域添加源地址将192.168.1.0/24网段流量导向默认区域 firewall-cmd --add-source192.168.1.0/24 # 从默认区域移除源地址 firewall-cmd --remove-source192.168.1.0/24五、firewalld 企业实战案例网关 Web 服务器防火墙配置为了让大家更好地落地 firewalld 配置本文以企业典型网络架构为例实现网关服务器和 Web 服务器的防火墙规则配置包含区域绑定、端口修改、服务过滤、ICMP 禁止等核心需求贴近生产环境。5.1 实验环境与需求5.1.1 网络拓扑网关服务器拥有 3 块网卡ens33外网口100.1.1.10/24、ens37内网口192.168.1.1/24、ens38DMZ 口192.168.2.1/24Web 服务器位于 DMZ 区网卡 ens33192.168.2.10/24提供 https 服务测试机互联网测试机100.1.1.20/24、企业内网测试机192.168.1.10/24。5.1.2 核心需求网关服务器ens33 绑定 external 区域ens37 绑定 trusted 区域ens38 绑定 dmz 区域开启 IP 伪装禁止外网 pingSSH 默认端口改为 12345Web 服务器默认区域改为 dmz仅允许 https 服务禁止 http 流量禁止 pingSSH 默认端口改为 12345仅允许互联网测试机通过 SSH 12345 端口登录网关仅允许内网测试机访问 Web 服务器的 https 服务和 SSH 12345 端口。5.2 网关服务器gateway-server配置步骤步骤 1基础配置# 1. 修改主机名 hostnamectl set-hostname gateway-server bash # 2. 开启IPv4路由转发网关必备 vi /etc/sysctl.conf # 添加以下配置 net.ipv4.ip_forward1 # 使配置生效 sysctl -p # 3. 验证firewalld运行状态 systemctl status firewalld步骤 2firewalld 区域与接口配置# 1. 设置默认区域为external firewall-cmd --set-default-zoneexternal # 2. 将ens37绑定到trusted区域永久 firewall-cmd --zonetrusted --change-interfaceens37 --permanent # 3. 将ens38绑定到dmz区域永久 firewall-cmd --zonedmz --change-interfaceens38 --permanent # 4. 重新加载配置 firewall-cmd --reload # 5. 验证激活的区域 firewall-cmd --get-active-zones步骤 3修改 SSH 端口并配置防火墙# 1. 关闭SELinux临时生产环境可配置SELinux规则 setenforce 0 # 2. 修改SSH配置文件将端口改为12345 vi /etc/ssh/sshd_config # 注释原Port 22添加 Port 12345 # 3. 重启sshd服务 systemctl restart sshd # 4. 为external区域永久添加12345/tcp端口SSH新端口 firewall-cmd --zoneexternal --add-port12345/tcp --permanent # 5. 从external区域永久移除默认ssh服务22端口 firewall-cmd --zoneexternal --remove-servicessh --permanent # 6. 为external区域永久禁止ping firewall-cmd --zoneexternal --add-icmp-blockecho-request --permanent # 7. 重新加载配置 firewall-cmd --reload # 8. 验证external区域规则 firewall-cmd --zoneexternal --list-all5.3 Web 服务器web配置步骤步骤 1搭建 HTTPS 服务环境# 1. 修改主机名 hostnamectl set-hostname web bash # 2. 安装httpd和mod_sslHTTPS必备 dnf install -y httpd mod_ssl # 3. 启动并设置开机自启httpd systemctl start httpd systemctl enable httpd # 4. 创建测试首页 echo test web /var/www/html/index.html步骤 2修改 SSH 端口# 1. 关闭SELinux setenforce 0 # 2. 修改SSH端口为12345 vi /etc/ssh/sshd_config Port 12345 # 3. 重启sshd systemctl restart sshd步骤 3firewalld 核心配置# 1. 设置默认区域为dmz firewall-cmd --set-default-zonedmz # 2. 为dmz区域永久添加https服务 firewall-cmd --zonedmz --add-servicehttps --permanent # 3. 若已添加http永久移除禁止http流量 firewall-cmd --zonedmz --remove-servicehttp --permanent # 4. 为dmz区域永久添加12345/tcp端口SSH新端口 firewall-cmd --zonedmz --add-port12345/tcp --permanent # 5. 从dmz区域永久移除默认ssh服务 firewall-cmd --zonedmz --remove-servicessh --permanent # 6. 为dmz区域永久禁止ping firewall-cmd --zonedmz --add-icmp-blockecho-request --permanent # 7. 重新加载配置 firewall-cmd --reload # 8. 验证dmz区域规则 firewall-cmd --list-all5.4 测试验证互联网测试机可通过ssh -p 12345 100.1.1.10登录网关无法 ping 网关无法访问 Web 服务器企业内网测试机可通过https://192.168.2.10访问 Web 服务器可通过ssh -p 12345 192.168.2.10登录 Web 服务器可正常访问网关内网口Web 服务器禁止所有 ping 请求仅允许 https 和 SSH 12345 端口流量符合需求。六、总结与核心要点回顾firewalld 作为 Linux 动态防火墙管理工具是企业运维的必备技能本文从原理、概念、配置到实战全面讲解了 firewalld 的核心内容以下为核心要点回顾方便大家快速记忆核心依赖firewalld 和 iptables 均依赖内核 netfilter 实现数据包过滤firewalld 为动态规则管理工具会覆盖 iptables 规则区域化管理9 个预定义区域匹配优先级为源地址 网络接口 默认区域public 为默认区域配置模式运行时临时立即生效和永久--permanentreload 后生效生产环境需配合--permanent和--reload使用核心工具图形化firewall-config适合测试、命令行firewall-cmd适合生产核心操作区域绑定、服务 / 端口添加、ICMP 过滤、配置重载是 firewalld 的基础且高频操作实战原则最小权限原则仅开放业务所需的服务 / 端口禁止不必要的 ICMP 报文如 ping修改默认端口如 SSH提升安全性。firewalld 的功能远不止本文讲解的内容还包括富规则、IPsets、直接规则等高级功能适用于更复杂的企业网络环境。掌握本文的基础内容后大家可结合实际需求深入学习高级功能打造更安全、更灵活的 Linux 防火墙体系