firewalld 配置
教学目标
- 掌握 firewalld 的基本概念和工作原理
- 熟悉 firewalld 的命令语法和配置方法
- 学会管理 firewalld 的区域和服务
- 能够应用 firewalld 解决实际网络安全问题
- 了解 firewalld 与 iptables 的区别和联系
主要知识点
1. firewalld 基本概念
- firewalld:Linux 系统中的动态防火墙管理器,支持网络区域概念
- 区域(Zones):预定义的网络环境,每个区域有不同的安全级别
drop:最低安全级别,丢弃所有入站流量block:阻止所有入站流量,返回错误信息public:默认区域,只允许选定的服务external:用于外部网络,启用 NATinternal:用于内部网络,较高安全级别dmz:用于非军事区,有限访问内部网络work:用于工作网络,信任网络中的大多数主机home:用于家庭网络,信任网络中的所有主机trusted:最高安全级别,允许所有流量
- 服务(Services):预定义的网络服务,包含相关的端口和协议
- 规则(Rules):定义如何处理网络流量的规则
- 运行时配置:临时配置,重启后失效
- 永久配置:持久化配置,重启后仍然有效
2. firewalld 命令语法
# 基本命令格式
firewall-cmd [选项]
# 常用选项
--state:查看防火墙状态
--get-zones:查看所有可用区域
--get-default-zone:查看默认区域
--set-default-zone=ZONE:设置默认区域
--get-active-zones:查看当前激活的区域
--zone=ZONE:指定操作的区域
--add-service=SERVICE:添加服务
--remove-service=SERVICE:移除服务
--add-port=PORT/PROTOCOL:添加端口
--remove-port=PORT/PROTOCOL:移除端口
--add-rich-rule='RULE':添加富规则
--remove-rich-rule='RULE':移除富规则
--reload:重新加载配置
--runtime-to-permanent:将运行时配置保存为永久配置
--permanent:操作永久配置3. firewalld 区域管理
查看区域:
firewall-cmd --get-zones firewall-cmd --get-default-zone firewall-cmd --get-active-zones设置默认区域:
firewall-cmd --set-default-zone=public将接口分配到区域:
# 运行时配置 firewall-cmd --zone=public --add-interface=eth0 # 永久配置 firewall-cmd --permanent --zone=public --add-interface=eth0 firewall-cmd --reload
4. firewalld 服务管理
查看服务:
firewall-cmd --get-services firewall-cmd --zone=public --list-services添加服务:
# 运行时配置 firewall-cmd --zone=public --add-service=ssh firewall-cmd --zone=public --add-service=http firewall-cmd --zone=public --add-service=https # 永久配置 firewall-cmd --permanent --zone=public --add-service=ssh firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload移除服务:
# 运行时配置 firewall-cmd --zone=public --remove-service=ssh # 永久配置 firewall-cmd --permanent --zone=public --remove-service=ssh firewall-cmd --reload
5. firewalld 端口管理
添加端口:
# 运行时配置 firewall-cmd --zone=public --add-port=8080/tcp firewall-cmd --zone=public --add-port=8080-8090/tcp # 永久配置 firewall-cmd --permanent --zone=public --add-port=8080/tcp firewall-cmd --permanent --zone=public --add-port=8080-8090/tcp firewall-cmd --reload移除端口:
# 运行时配置 firewall-cmd --zone=public --remove-port=8080/tcp # 永久配置 firewall-cmd --permanent --zone=public --remove-port=8080/tcp firewall-cmd --reload
6. firewalld 富规则
富规则:提供更灵活的规则配置,支持源地址、目标地址、端口、协议等多种条件
添加富规则:
# 允许特定 IP 访问 SSH firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' # 拒绝特定 IP 访问 HTTP firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.200" service name="http" reject' # 限制特定 IP 的访问速率 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" limit value="20/m" accept'查看富规则:
firewall-cmd --zone=public --list-rich-rules
7. firewalld 配置管理
运行时配置与永久配置:
# 运行时配置(临时) firewall-cmd --zone=public --add-service=http # 永久配置 firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --reload # 将运行时配置保存为永久配置 firewall-cmd --runtime-to-permanent配置文件位置:
- 服务配置:
/usr/lib/firewalld/services/ - 区域配置:
/usr/lib/firewalld/zones/ - 永久配置:
/etc/firewalld/
- 服务配置:
8. firewalld 与 iptables 的区别
| 特性 | firewalld | iptables |
|---|---|---|
| 管理方式 | 动态管理,无需重启 | 静态管理,需要重启 |
| 配置方式 | 区域和服务为中心 | 规则为中心 |
| 配置文件 | XML 格式 | 文本格式 |
| 依赖关系 | 基于 iptables/nftables | 直接操作 Netfilter |
| 易用性 | 更高,适合新手 | 更灵活,适合高级用户 |
实用案例分析
案例 1:基本防火墙配置
场景:配置一个基本的防火墙,只允许 SSH、HTTP 和 HTTPS 服务。
配置步骤:
# 查看当前状态
firewall-cmd --state
# 设置默认区域为 public
firewall-cmd --set-default-zone=public
# 添加所需服务(运行时配置)
firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=https
# 保存为永久配置
firewall-cmd --runtime-to-permanent
# 验证配置
firewall-cmd --zone=public --list-services案例 2:允许特定 IP 访问
场景:只允许特定 IP 地址访问服务器的 SSH 服务,拒绝其他所有 IP。
配置步骤:
# 移除默认的 SSH 服务
firewall-cmd --permanent --zone=public --remove-service=ssh
# 添加富规则,只允许特定 IP 访问 SSH
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.101" service name="ssh" accept'
# 重新加载配置
firewall-cmd --reload
# 验证配置
firewall-cmd --zone=public --list-rich-rules案例 3:配置端口转发
场景:将外部访问服务器 8080 端口的流量转发到内部 192.168.1.100 的 80 端口。
配置步骤:
# 启用 IP 转发
firewall-cmd --permanent --add-masquerade
# 添加端口转发规则
firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.100:toport=80
# 重新加载配置
firewall-cmd --reload
# 验证配置
firewall-cmd --list-all案例 4:配置富规则实现高级访问控制
场景:配置一个规则,允许来自 192.168.1.0/24 网络的主机访问 HTTP 服务,但限制速率为每分钟最多 20 个连接。
配置步骤:
# 添加富规则
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" limit value="20/m" accept'
# 重新加载配置
firewall-cmd --reload
# 验证配置
firewall-cmd --zone=public --list-rich-rules课后练习
基本配置练习:
- 查看当前防火墙状态和默认区域
- 设置默认区域为 public
- 添加 SSH、HTTP 和 HTTPS 服务
- 验证配置是否生效
区域管理练习:
- 创建一个新的区域 testzone
- 将 eth0 接口分配到 testzone
- 为 testzone 添加 FTP 服务
- 验证配置
端口管理练习:
- 添加自定义端口 8888/tcp
- 添加端口范围 9000-9010/tcp
- 验证配置
- 移除添加的端口
富规则练习:
- 配置只允许特定 IP 访问 SSH 服务
- 配置拒绝特定 IP 访问 HTTP 服务
- 配置速率限制规则
配置管理练习:
- 进行运行时配置更改
- 将运行时配置保存为永久配置
- 编辑配置文件,手动添加一个服务
- 重新加载配置并验证
故障排除练习:
- 模拟一个场景:配置完 firewalld 后,SSH 无法连接
- 分析并解决这个问题
总结
本章节详细介绍了 Linux 系统中 firewalld 防火墙的配置方法,包括:
- firewalld 的基本概念和工作原理
- firewalld 的命令语法和配置方法
- 区域管理和服务管理
- 端口配置和富规则配置
- 运行时配置和永久配置的管理
- firewalld 与 iptables 的区别
- 实际应用场景的解决方案
通过学习本章节,您应该能够熟练使用 firewalld 配置和管理 Linux 系统的防火墙,保护服务器和网络的安全。firewalld 提供了更友好的用户界面和更灵活的配置方式,特别适合初学者使用。在实际应用中,建议根据具体的网络环境和安全需求,选择合适的防火墙工具和配置策略。
扩展阅读
- firewalld 官方文档:详细的 firewalld 官方文档
- Red Hat Enterprise Linux 防火墙指南:Red Hat 的防火墙配置指南
- Linux 防火墙详解:Linux.com 的 firewalld 教程
- firewalld 富规则示例:firewalld 富规则的使用示例