linux系统 firewalld防火墙
1. 什么是 firewalld?
- 作用:Linux 系统中用于管理防火墙规则的工具,基于
netfilter/iptables
,但提供了更友好的动态管理接口。 - 特点:支持动态更新规则、区域(Zone)概念、服务 / 端口分组管理,适合复杂网络环境。
2. 核心组件
- firewalld 服务:运行于用户空间,负责规则管理。
- netfilter/iptables:内核空间的数据包过滤机制,firewalld 最终通过它实现规则。
二、firewalld 基本操作
1. 服务控制(需 root 权限)
# 查看状态
systemctl status firewalld
# 启动/停止/重启/开机自启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
systemctl enable firewalld
systemctl disable firewalld
2. 基础命令行工具:firewall-cmd
语法格式:
firewall-cmd [选项] [参数]
- 常用选项
--permanent
:设置永久规则(重启后生效),不加则为临时规则。--reload
:重新加载配置,使永久规则生效。--zone
:指定区域(默认public
)。
三、区域(Zone)管理
1. 区域概念
-
作用:预定义的规则集合,根据网络环境信任程度分配不同权限(如
public
、home
、internal
等)。 -
默认区域
区域 用途描述 常见规则示例 public 公共网络(低信任) 仅允许 SSH、DHCPv6-client home 家庭网络(中等信任) 允许 SSH、MDNS、Samba 等 internal 内部网络(高信任) 类似 home,默认允许流量互访 补充
1. drop(丢弃)
- 安全等级:最高(拒绝所有主动连接)。
- 规则策略
- 拒绝所有入站连接,仅允许出站连接。
- 对入站数据不响应(直接丢弃,不返回任何消息)。
- 适用场景:
极端安全环境(如隔离区),仅允许本机主动访问外部网络,禁止任何外部设备连接本机。
2. block(阻止)
- 安全等级:高(拒绝入站连接,但返回错误信息)。
- 规则策略
- 拒绝所有入站连接,但会向发起连接的设备返回
ICMP 拒绝
消息(如Host Unreachable
)。 - 允许出站连接。
- 拒绝所有入站连接,但会向发起连接的设备返回
- 适用场景:
需要明确告知外部设备 “连接被拒绝” 的场景(比drop
更友好,但安全性略低)。
3. public(公共)
- 安全等级:较高(默认区域,严格限制入站连接)。
- 规则策略
- 仅允许少量常用服务(如 SSH、DHCPv6 客户端)的入站连接。
- 允许所有出站连接。
- 适用场景:
公共网络(如咖啡店、机场 Wi-Fi),对安全性要求较高,仅开放必要服务。
4. external(外部)
- 安全等级:中等(常用于 NAT 场景)。
- 规则策略
- 等同于
public
区域,但默认启用 NAT(网络地址转换),通常用于路由器的外网接口。 - 允许出站连接,入站连接仅开放特定服务(需手动配置)。
- 等同于
- 适用场景:
计算机作为路由器连接外部网络时(如共享网络连接),对外网隐藏内部主机。
5. dmz(非军事区)
- 安全等级:中等(允许有限的入站连接)。
- 规则策略
- 允许特定服务的入站连接(如 Web 服务器、邮件服务器),但比
internal
/trusted
更严格。 - 允许所有出站连接。
- 允许特定服务的入站连接(如 Web 服务器、邮件服务器),但比
- 适用场景:
部署公开服务的服务器(如 Web 服务器),介于内外网之间,提供有限的外部访问权限。
6. work(工作)
- 安全等级:中等(信任局域网内设备)。
- 规则策略
- 允许更多的入站连接(如 DHCP 服务器、SSH、SMB 文件共享、mDNS 发现等)。
- 允许所有出站连接。
- 适用场景:
办公网络(可信局域网),允许设备间的资源共享和服务发现。
7. home(家庭)
- 安全等级:中等(信任家庭网络设备)。
- 规则策略
- 类似
work
区域,但默认开放更多本地服务(如 FTP、Samba 共享、UPnP 等)。 - 允许设备间通过 mDNS 发现彼此(如打印机、智能设备)。
- 类似
- 适用场景:
家庭网络,允许家庭成员设备之间的安全通信和资源共享。
8. internal(内部)
- 安全等级:较低(高度信任内部网络)。
- 规则策略
- 允许几乎所有入站连接(如文件共享、媒体服务、远程桌面等)。
- 允许所有出站连接。
- 适用场景:
完全可信的内部网络(如企业内网),设备间可自由通信。
9. trusted(可信)
- 安全等级:最低(完全信任所有连接)。
- 规则策略
- 允许所有入站和出站连接,无任何限制。
- 适用场景:
绝对安全的网络(如本地虚拟机网络),无需任何防火墙限制。
2. 区域操作命令
# 查看所有区域
firewall-cmd --get-zones
# 查看当前活动区域
firewall-cmd --get-active-zones
# 查看指定区域的规则
firewall-cmd --zone=public --list-all
# 将接口(如 eth0)加入指定区域
firewall-cmd --zone=home --change-interface=eth0 --permanent
firewall-cmd --reload # 生效
四、规则管理核心操作
1. 端口 / 服务管理
场景 1:开放单个端口
# 临时开放 80 端口(TCP)
firewall-cmd --add-port=80/tcp
# 永久开放 443 端口(TCP)并重新加载
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
场景 2:开放服务(通过服务名称)
-
查看预定义服务
ls /usr/lib/firewalld/services/ # 服务定义文件路径
-
示例:开放 HTTP/HTTPS 服务
firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload
场景 3:删除规则
firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --remove-service=http --permanent
firewall-cmd --reload
. 富规则(Rich Rules)—— 高级配置
作用:定义更复杂的规则(如源 / 目标地址限制、协议参数等)。
语法格式:
firewall-cmd --zone=区域 --add-rich-rule="规则语句"
示例:
-
允许来自192.168.1.0/24
网段的主机访问 22 端口:
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.1.0/24 port port=22 protocol=tcp accept" --permanent
-
拒绝所有来自10.0.0.1
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.20.0/24 reject" --permanent
五、运行时规则与永久规则
类型 | 生效方式 | 持久性 | 应用场景 |
---|---|---|---|
临时规则 | 立即生效 | 重启后丢失 | 测试或临时调整 |
永久规则 | 需执行 --reload | 重启后保留 | 长期生效的配置 |
注意:
- 永久规则修改后必须执行
firewall-cmd --reload
才能生效。 - 临时规则优先级高于永久规则(相同规则冲突时临时优先)。