firewalld 防火墙
表格区域核心策略适用场景trusted允许所有数据包内网信任服务器、本地测试环境拒绝入站,允许 ssh/mdns 等常用内网服务家庭 / 企业内网环境work拒绝入站,允许 ssh/ipp 等办公服务办公网络public拒绝入站,仅允许 ssh/dhcpv6-client公网服务器(默认区域)external拒绝入站,仅允许 ssh,支持 IP 伪装外网网关服务器dmz拒绝入站,仅允许 ssh非军
firewalld 是 Linux 系统中主流的动态防火墙管理工具,相比传统的 iptables,它支持动态配置规则且无需重启服务,还通过网络区域实现了精细化的流量管控,是 Linux 网络安全防护的核心工具之一,广泛应用于 CentOS 7+、EulerOS 等主流发行版。
一、firewalld 核心基础
1. 工作原理
firewalld 本身不具备数据包过滤能力,其核心作用是定义和管理防火墙规则,真正执行数据包过滤的是 Linux 内核的netfilter模块。它与 iptables 的本质都是向 netfilter 传递规则,只是规则的组织、管理方式不同。
2. 与 iptables 的核心区别
表格
| 特性 | firewalld | iptables |
|---|---|---|
| 配置存储 | /usr/lib/firewalld/、/etc/firewalld/(XML 文件) | /etc/sysconfig/iptables(单一配置文件) |
| 规则生效 | 动态修改,无需清除旧规则,不中断现有连接 | 修改需清除所有旧规则,重新加载新规则 |
| 配置模式 | 运行时配置(临时)、永久配置(持久化) | 仅一种配置,修改即生效(重启后丢失需手动保存) |
| 管理方式 | 区域化管理,支持图形 / 命令行 | 规则链管理,仅命令行 |
3. 两大核心配置模式
- 运行时配置:临时生效,系统 /firewalld 服务重启后失效,适合临时调试规则。
- 永久配置:配置保存在 XML 文件中,需执行重载命令才会生效,重启后不丢失,适合生产环境固定规则。
二、firewalld 网络区域(Zone)
区域是 firewalld 的核心特性,它将网络流量按源 IP、网络接口划分到不同安全等级的区域,每个区域预设不同的访问策略,简化防火墙管理。流量匹配区域按 “源地址→网络接口→默认区域” 的顺序,匹配即停止。
常用预定义区域(按信任度从高到低)
表格
| 区域 | 核心策略 | 适用场景 |
|---|---|---|
| trusted | 允许所有数据包 | 内网信任服务器、本地测试环境 |
| home/internal | 拒绝入站,允许 ssh/mdns 等常用内网服务 | 家庭 / 企业内网环境 |
| work | 拒绝入站,允许 ssh/ipp 等办公服务 | 办公网络 |
| public | 拒绝入站,仅允许 ssh/dhcpv6-client | 公网服务器(默认区域) |
| external | 拒绝入站,仅允许 ssh,支持 IP 伪装 | 外网网关服务器 |
| dmz | 拒绝入站,仅允许 ssh | 非军事区(如公网可访问的应用服务器) |
| block | 拒绝所有入站,仅回应 icmp 拒绝包 | 需严格限制访问的服务器 |
| drop | 丢弃所有入站,无任何回应 | 高安全要求服务器,防止端口探测 |
默认区域:系统默认为public,可根据实际环境修改(如内网服务器可改为internal)。
三、firewalld 常用操作(命令行 firewall-cmd)
firewall-cmd是 firewalld 的核心命令行工具,所有配置均可通过它实现,永久配置需加--permanent参数,配置后执行--reload重载生效,以下为最常用操作,均基于 CentOS/EulerOS。
1. 基础状态管理
# 启动firewalld
systemctl start firewalld
# 设置开机自启
systemctl enable firewalld
# 查看运行状态
systemctl status firewalld
# 重载规则(永久配置生效,不中断连接)
firewall-cmd --reload
# 应急模式(丢弃所有数据包,紧急防护)
firewall-cmd --panic-on
# 关闭应急模式
firewall-cmd --panic-off
2. 区域管理
# 查看默认区域
firewall-cmd --get-default-zone
# 设置默认区域(如改为dmz)
firewall-cmd --set-default-zone=dmz --permanent
# 查看所有可用区域
firewall-cmd --get-zones
# 查看当前激活的区域(绑定了接口/源地址的区域)
firewall-cmd --get-active-zones
# 查看指定区域的所有规则(如public)
firewall-cmd --zone=public --list-all
# 为网卡绑定区域(如ens33绑定internal)
firewall-cmd --zone=internal --add-interface=ens33 --permanent
3. 服务管理
firewalld 预定义了 70 + 常用网络服务(如 http、ssh、mysql),存放在/usr/lib/firewalld/services/,直接通过服务名配置,无需手动指定端口,更便捷。
# 查看所有预定义服务
firewall-cmd --get-services
# 查看默认区域允许的服务
firewall-cmd --list-services
# 允许默认区域访问http服务(永久)
firewall-cmd --add-service=http --permanent
# 允许dmz区域访问mysql服务(永久)
firewall-cmd --zone=dmz --add-service=mysql --permanent
# 移除默认区域的ssh服务(永久)
firewall-cmd --remove-service=ssh --permanent
4. 端口管理
针对非预定义服务(如自定义端口、修改默认端口的服务),需手动指定端口 / 协议(TCP/UDP)配置。
# 查看默认区域开放的端口
firewall-cmd --list-ports
# 开放默认区域8080/TCP端口(永久)
firewall-cmd --add-port=8080/tcp --permanent
# 开放dmz区域12345-12350/TCP端口段(永久)
firewall-cmd --zone=dmz --add-port=12345-12350/tcp --permanent
# 关闭默认区域8080/TCP端口(永久)
firewall-cmd --remove-port=8080/tcp --permanent
5. ICMP 过滤(禁 ping / 允许特定 icmp)
ICMP 协议用于网络故障检测(如 ping),可通过 firewalld 过滤特定 ICMP 类型,提升服务器安全性。
# 查看所有可过滤的ICMP类型
firewall-cmd --get-icmptypes
# 禁止默认区域ping(阻塞echo-request,永久)
firewall-cmd --add-icmp-block=echo-request --permanent
# 解除默认区域ping限制(永久)
firewall-cmd --remove-icmp-block=echo-request --permanent
6. 配置持久化
# 将当前运行时配置(临时)保存为永久配置
firewall-cmd --runtime-to-permanent
四、图形化配置工具(firewall-config)
对于不熟悉命令行的用户,可使用 firewall-config 图形化工具,支持所有命令行的配置功能,操作直观,无需记忆命令。
- 启动方式:终端输入
firewall-config直接打开(需安装图形界面); - 核心操作:
- 顶部选择运行时 / 永久配置模式,与命令行对应;
- 左侧选择区域,右侧可直接勾选允许的服务、手动添加端口、配置ICMP 过滤;
- 菜单栏选项可修改默认区域、重载防火墙、开启应急模式;
- 优势:配置实时预览,无需手动执行重载,永久配置修改后点击应用即可标记,最终执行重载生效。
五、补充实用知识点
1. 自定义服务
若常用非预定义端口(如 ssh 改为 12345),可创建自定义服务,方便后续区域管理:
- 复制预定义服务模板:
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-custom.xml; - 编辑 xml 文件,修改
<port>标签的端口号为 12345; - 重载防火墙:
firewall-cmd --reload,即可通过ssh-custom服务名配置。
2. 端口转发(仅 IPv4,需开启 IP 伪装)
适用于网关服务器,将外网访问的端口转发到内网服务器,需先开启区域的masquerade(IP 伪装):
# 开启external区域IP伪装(永久)
firewall-cmd --zone=external --add-masquerade --permanent
# 将外网80端口转发到内网192.168.1.10的8080端口(永久)
firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.10:toport=8080 --permanent
3. 源地址绑定区域
将特定 IP / 子网的流量定向到指定区域,实现基于源地址的精细化管控:
# 将192.168.1.0/24子网的流量定向到trusted区域(永久)
firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent
# 移除该源地址绑定(永久)
firewall-cmd --zone=trusted --remove-source=192.168.1.0/24 --permanent
4. 配置文件优先级
firewalld 的配置文件分为系统默认(/usr/lib/firewalld/)和用户自定义(/etc/firewalld/),用户自定义配置会覆盖系统默认配置,且修改后仅需重载即可生效,无需修改系统文件。
5. 与 iptables 共存问题
若系统中同时安装了 firewalld 和 iptables,firewalld 会接管 netfilter 规则,重启 firewalld / 系统后,iptables 手动配置的规则会被覆盖,因此生产环境建议只保留一种防火墙管理工具。
六、核心使用原则
- 最小权限原则:仅开放业务所需的服务 / 端口,无关服务一律关闭(如公网服务器仅开放 http/https/ssh);
- 公网服务器建议:默认区域设为
public/dmz,禁止 ping,修改 ssh 默认端口,仅允许指定源 IP 访问 ssh; - 配置生效原则:所有永久配置必须执行
--reload重载,否则不生效; - 调试原则:先通过运行时配置调试规则,测试无误后执行
--runtime-to-permanent保存为永久配置。
firewalld 的核心是区域化、动态化,掌握区域的匹配规则和常用命令行操作,即可满足 90% 以上的生产环境防火墙配置需求,相比 iptables 更简洁、更易维护
更多推荐
所有评论(0)