本章要点
- 理解 firewalld 防火墙的设计思想与工作机制
- 掌握 firewalld 区域(Zone)的作用与使用场景
- 熟练使用 firewall-cmd 命令行配置防火墙
- 了解 firewall-config 图形界面基本操作
- 能够完成服务、端口、网卡、ICMP 等规则配置
前言
在现代 Linux 发行版中,firewalld 已成为默认的动态防火墙管理服务。相比于传统 iptables,firewalld 提供了区域化管理 、动态更新规则 、运行时 / 永久双配置模式等更加便捷的特性,无需重启服务即可生效,大幅提升了防火墙管理的灵活性与安全性。
本章将从 firewalld 的基础概念入手,详细讲解它与 iptables 的关系、区域机制、两种配置工具的使用方法,并通过完整实例演示企业环境下的防火墙部署方案。
一、firewalld 防火墙基础
1. firewalld 简介
firewalld 是 Linux 系统下动态管理的防火墙服务,用于维护网络访问规则,实现数据包过滤、放行、端口映射、地址伪装等安全功能。它的核心特点:
- 支持 IPv4/IPv6 双栈
- 支持 区域(Zone) 安全模型
- 支持 运行时(Runtime) 和 永久(Permanent) 两种配置
- 支持动态更新规则,不中断现有连接
- 提供命令行工具
firewall-cmd和图形工具firewall-config
2. firewalld 与 iptables 的关系
- netfilter:内核层面的数据包过滤框架。
- iptables / firewalld:都是用户态管理工具,用来向 netfilter 下发规则。
- 两者不能同时启用,同一系统只能选择一种防火墙服务。
区别总结:
- iptables 清空后重新加载所有规则,容易断开连接。
- firewalld 只更新变化的规则,支持动态加载,连接不中断。
- iptables 配置文件:
/etc/sysconfig/iptables - firewalld 配置文件:
/etc/firewalld/和/usr/lib/firewalld/
二、firewalld 网络区域(Zone)
firewalld 通过区域来划分网络信任级别,每个区域拥有独立的放行策略,简化管理员配置。
1. 区域匹配顺序
当数据包进入系统时:
- 优先匹配源 IP 绑定的区域
- 其次匹配网卡绑定的区域
- 最后使用默认区域(默认是 public)
2. 常用区域及默认策略
表格
| 区域名称 | 安全策略说明 |
|---|---|
| trusted | 放行所有流量 |
| internal | 信任内网,仅放行 ssh /mdns/dhcpv6-client 等 |
| home | 家庭网络,同 internal |
| work | 工作网络,仅放行 ssh /ipp-client/dhcpv6-client |
| public | 公共网络,默认仅放行 ssh /dhcpv6-client |
| external | 网关外部网络,开启 SNAT |
| dmz | 非军事区,仅放行 ssh |
| block | 拒绝所有入站流量,直接拒绝 |
| drop | 直接丢弃所有入站流量,无响应 |
三、图形工具 firewall-config
1. 安装与启动
bash
运行
dnf install -y firewall-config
启动:应用程序 → 防火墙配置
2. 界面结构
- 运行时配置(Runtime):临时生效,重启失效
- 永久配置(Permanent):写入配置文件,重启依然有效
- 区域配置:服务、端口、协议、伪装、端口转发、ICMP 过滤
- 服务配置:预定义服务的端口、模块
3. 常用功能
- 切换默认区域
- 为网卡绑定区域
- 放行服务 / 端口
- 配置端口转发
- 启用 IP 伪装
- 过滤 ICMP(禁 ping)
四、命令行工具 firewall-cmd
1. 基础信息查询
bash
运行
firewall-cmd --get-zones # 查看所有区域
firewall-cmd --get-services # 查看所有预定义服务
firewall-cmd --get-icmptypes # 查看所有ICMP类型
firewall-cmd --get-default-zone # 查看默认区域
firewall-cmd --get-active-zones # 查看已激活区域
2. 区域管理
bash
运行
firewall-cmd --set-default-zone=public # 设置默认区域
firewall-cmd --zone=public --add-interface=ens33 # 绑定网卡
firewall-cmd --zone=public --change-interface=ens33 # 修改网卡区域
firewall-cmd --zone=public --remove-interface=ens33 # 解绑网卡
3. 服务管理
bash
运行
firewall-cmd --add-service=http # 放行HTTP服务
firewall-cmd --remove-service=http # 移除HTTP服务
firewall-cmd --add-service=http --permanent # 永久放行
4. 端口管理
bash
运行
firewall-cmd --add-port=8080/tcp
firewall-cmd --remove-port=8080/tcp
firewall-cmd --add-port=20000-25000/udp
5. 禁用 Ping(ICMP 过滤)
bash
运行
firewall-cmd --add-icmp-block=echo-request
6. 配置模式
bash
运行
firewall-cmd --reload # 加载永久配置到运行时
firewall-cmd --runtime-to-permanent # 保存当前配置为永久
五、firewalld 企业应用实例
实验环境
- 网关服务器:双网卡
- ens33(外网)→ external 区域
- ens37(内网)→ trusted 区域
- Web 服务器:单网卡 → dmz 区域
- 要求:
- 仅开放 HTTPS (443)
- SSH 端口改为 12345
- 禁止 Ping
- 内网可访问,外网受限
1. 网关配置
bash
运行
systemctl stop iptables
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --set-default-zone=external
firewall-cmd --zone=trusted --add-interface=ens37 --permanent
firewall-cmd --zone=external --add-port=12345/tcp --permanent
firewall-cmd --zone=external --remove-service=ssh --permanent
firewall-cmd --zone=external --add-icmp-block=echo-request --permanent
firewall-cmd --reload
2. Web 服务器配置
bash
运行
firewall-cmd --set-default-zone=dmz
firewall-cmd --zone=dmz --add-service=https --permanent
firewall-cmd --zone=dmz --add-port=12345/tcp --permanent
firewall-cmd --zone=dmz --remove-service=ssh --permanent
firewall-cmd --zone=dmz --add-icmp-block=echo-request --permanent
firewall-cmd --reload
本章总结
本章系统介绍了 firewalld 防火墙 的核心知识与配置方法:
-
基础架构firewalld 是基于 netfilter 的动态防火墙,与 iptables 作用相同但管理方式更灵活,支持区域、运行时 / 永久双模式。
-
区域机制 区域是 firewalld 的核心,通过信任级别划分网络,
public、dmz、trusted、external是最常用区域。 -
命令管理(firewall-cmd) 掌握区域、服务、端口、网卡、ICMP 等配置,是日常运维最常用技能。重点命令:
--add-service、--add-port、--reload、--permanent。 -
**图形工具(firewall-config)**适合快速查看与修改规则,支持服务、端口、转发、伪装等功能。
-
企业实战能够完成多区域、多网卡、自定义端口、禁 ping、内网 / 外网隔离等安全部署。