CentOS 7 中的 firewalld 详解
firewalld
1. firewalld 简介

firewalld 是 CentOS 7 中默认的防火墙管理工具,取代了传统的 iptables,它提供了动态的管理防火墙规则的功能,并且支持网络区域(zone)和服务的概念,firewalld 使用 DBus 接口进行配置和管理,这使得其操作更加灵活和方便。
2. firewalld 与 iptables 的区别
2.1 基于区域 vs 基于接口
firewalld:使用区域来管理网络流量,每个区域可以包含多个网络接口,并根据不同的信任级别设置相应的访问规则。
iptables:直接基于网络接口设置规则,没有区域的抽象概念。
2.2 配置方式

firewalld:通过firewallcmd
命令行工具或图形界面工具firewallconfig
进行配置,支持运行时配置和永久配置。
iptables:通过手动编辑配置文件/etc/sysconfig/iptables
或使用命令行工具iptables
进行配置。
2.3 动态更新
firewalld:可以在不中断现有连接的情况下动态更新防火墙规则。
iptables:修改规则后需要重新加载所有规则,可能会中断现有连接。
firewalld 的基本概念
1. 区域(Zone)

firewalld 使用区域来管理和控制网络流量,每个区域代表一个信任级别,定义了该区域内允许或拒绝的流量,CentOS 7 默认提供以下几种区域:
区域名称 | 描述 |
trusted | 信任区域,放通所有传入流量 |
public | 公共区域,默认区域,允许有限的传入流量 |
external | 外部区域,用于外部流量 |
home | 家庭区域,通常用于家庭网络 |
internal | 内部区域,通常用于内网 |
work | 工作区域,用于工作网络 |
dmz | 隔离区域,也称为非军事区 |
block | 阻止区域,拒绝所有传入流量 |
drop | 丢弃区域,丢弃所有传入流量,不产生 ICMP 错误响应 |
2. 服务(Service)
服务是一组预定义的规则,用于允许特定的流量进入系统,HTTP、HTTPS、SSH 等服务都有对应的规则集,用户也可以自定义服务。
3. 端口管理
除了使用服务外,firewalld 还允许用户直接开放或关闭特定的端口,可以使用addport=8080/tcp
命令开放 HTTP 的默认端口。
firewalld 的配置方法
1. 安装和启动 firewalld
- sudo yum install firewalld
- sudo systemctl start firewalld
- sudo systemctl enable firewalld
2. 查看当前配置
2.1 查看默认区域
- sudo firewallcmd getdefaultzone
2.2 查看活动区域及其接口
- sudo firewallcmd getactivezones
2.3 查看指定区域的配置
- sudo firewallcmd zone=public listall
3. 配置区域和服务
3.1 添加服务到区域
- sudo firewallcmd permanent zone=public addservice=http
3.2 添加端口到区域
- sudo firewallcmd permanent zone=public addport=8080/tcp
3.3 修改区域绑定的接口
- sudo firewallcmd zone=work changeinterface=eth0
3.4 删除服务或端口
- sudo firewallcmd permanent zone=public removeservice=http
- sudo firewallcmd permanent zone=public removeport=8080/tcp
4. 重载防火墙配置
在对防火墙配置进行更改后,需要重新加载配置以使更改生效:
- sudo firewallcmd reload
常见问题及解答(FAQs)
Q1: 如何更改默认区域?
A1: 使用以下命令更改默认区域:
- sudo firewallcmd setdefaultzone=trusted
Q2: 如何查看某个区域的详细信息?
A2: 使用以下命令查看指定区域的详细信息:
- sudo firewallcmd zone=public listall
Q3: 如果需要临时开放一个端口,应该怎么做?
A3: 可以使用runtimetopermanent
选项将临时规则转换为永久规则:
- sudo firewallcmd zone=public addport=9090/tcp runtimetopermanent
Q4: 如何完全禁用 firewalld?
A4: 可以通过停止并禁用 firewalld 服务来完全禁用它:
- sudo systemctl stop firewalld
- sudo systemctl disable firewalld
Q5: 如何备份和恢复 firewalld 配置?
A5: 备份配置文件:
- sudo cp /usr/lib/firewalld/zones/*.xml /backup/
恢复配置文件:
- sudo cp /backup/*.xml /usr/lib/firewalld/zones/
- sudo firewallcmd reload
firewalld 作为 CentOS 7 中的默认防火墙管理工具,提供了强大的功能和灵活的配置方式,通过理解和掌握区域、服务和端口的概念,用户可以有效地管理系统的网络流量,确保系统的安全性,firewalld 的动态更新特性使得其在不中断现有连接的情况下调整防火墙规则成为可能,极大地提高了网络管理的灵活性和效率。