目录
[1. 背景](#1. 背景)
[2. 核心作用](#2. 核心作用)
[1. 定义](#1. 定义)
[2. 核心功能](#2. 核心功能)
[3. 扩展能力](#3. 扩展能力)
[1. 按是否专用设备划分](#1. 按是否专用设备划分)
[2. 按工作原理划分](#2. 按工作原理划分)
[3. 四类防火墙对比](#3. 四类防火墙对比)
[(三)Linux 防火墙体系](#(三)Linux 防火墙体系)
[1. 发展历程](#1. 发展历程)
[2. 三层架构](#2. 三层架构)
[3. 主流工具对比](#3. 主流工具对比)
[五、项目实施:firewalld 防火墙部署](#五、项目实施:firewalld 防火墙部署)
[(一)安装 firewalld](#(一)安装 firewalld)
[1. 检查安装](#1. 检查安装)
[2. YUM 安装](#2. YUM 安装)
[(三)firewalld 区域(zone)管理](#(三)firewalld 区域(zone)管理)
[1. 区域作用](#1. 区域作用)
[2. 预定义区域(默认规则)](#2. 预定义区域(默认规则))
[3. 规则类型](#3. 规则类型)
[1. 两种配置模式](#1. 两种配置模式)
[2. 基础查询命令](#2. 基础查询命令)
[3. 区域设置](#3. 区域设置)
[4. 服务管理](#4. 服务管理)
[5. 端口管理](#5. 端口管理)
[6. 紧急模式](#6. 紧急模式)
[7. 直接规则(iptables 兼容)](#7. 直接规则(iptables 兼容))
[8. 富规则(高级控制)](#8. 富规则(高级控制))
[六、综合实战:Web 服务 + 端口转发](#六、综合实战:Web 服务 + 端口转发)
[七、进阶:NAT 地址转换(firewalld 实现)](#七、进阶:NAT 地址转换(firewalld 实现))
[(一)NAT 基础](#(一)NAT 基础)
[(二)firewalld NAT 实现](#(二)firewalld NAT 实现)
[1. 双网卡网关服务器](#1. 双网卡网关服务器)
[2. SNAT(共享上网)](#2. SNAT(共享上网))
[3. DNAT(发布内网 Web)](#3. DNAT(发布内网 Web))
[1. firewalld 与 iptables 兼容问题](#1. firewalld 与 iptables 兼容问题)
[2. nftables 基础(未来趋势)](#2. nftables 基础(未来趋势))
[3. 生产最佳实践](#3. 生产最佳实践)
[4. 防火墙无法解决的风险](#4. 防火墙无法解决的风险)
一、项目整体框架
- 项目引入:网络安全需求提升,防火墙成为网络边界防护核心组件
- 需求分析:掌握防火墙原理、工具使用、部署方法与生产应用
- 知识准备:防火墙基础、分类、Linux 防火墙体系
- 项目实施:firewalld 安装、区域、命令、图形配置、综合应用
- 反思与进阶:NAT 实现、内外网服务发布
- 小结:防火墙安全价值与 NAT 作用
二、项目引入
1. 背景
- 网络普及→攻击成本降低→服务器必须做安全防护
- 防火墙是访问控制技术,管控网络数据交换
- 全球超半数用户受防火墙保护,是网络安全必备技术
2. 核心作用
- 隔离内外网,按规则放行 / 拦截流量
- 提供审计、监控、NAT、VPN 等扩展能力
三、需求分析
- 理解防火墙工作原理与安全价值
- 掌握 Linux 防火墙工具(firewalld/iptables)
- 能按场景部署防火墙规则
- 适配生产环境的防火墙应用方式
四、知识准备
(一)防火墙概述
1. 定义
位于内部网与外部网之间的安全屏障,按管理员预设规则控制数据包进出,允许授权通信、拒绝未授权访问,并生成访问日志。
2. 核心功能
- 边界防护:强制内外网流量经防火墙,提升内网私密性
- 访问限制:仅放行符合安全策略流量,保护脆弱服务
- 审计监控:记录网络行为,异常报警,集中降低管理成本
- 自身安全:具备抗渗透能力,保证防火墙不被攻破
3. 扩展能力
支持NAT(地址转换) 、VPN(虚拟专用网) 功能
(二)防火墙分类
1. 按是否专用设备划分
| 类型 | 原理 | 特点 | 适用场景 |
|---|---|---|---|
| 硬件防火墙 | 程序固化在芯片,硬件执行过滤 | 性能高、CPU 占用低、稳定 | 企业网络边界、核心网关 |
| 软件防火墙 | 纯软件运行在主机系统 | 占用资源、安全性较低 | 单机 / 个人 PC |
典型软件防火墙:Windows 防火墙、天网防火墙
2. 按工作原理划分
(1)包过滤防火墙
- 工作层级:网络层
- 原理:检查 IP/TCP/UDP 头(源 / 目的 IP、协议、端口、ICMP 类型)
- 优点:性能好、扩展性强
- 缺点:不识别应用层内容,易被 IP 伪造绕过
(2)代理服务型防火墙(应用层网关)
- 工作层级:应用层
- 原理:代理客户端请求,中转内外网流量
- 优点:应用层控制精细
- 缺点:网络层防护弱,不维护连接状态
(3)状态检测防火墙
- 工作层级:网络层 + 传输层
- 原理:建立状态连接表,跟踪会话上下文
- 优点:安全性高于包过滤,对应用透明
- 缺点:应用层控制弱,无法识别木马 / 垃圾邮件
(4)复合型防火墙
- 整合:状态检测 + 透明代理 + 防病毒 + 内容过滤 + IDS+VPN
- 工作层级:覆盖 OSI 1~7 层
- 优点:网络层强防护、应用层细管控
- 定位:企业级主流下一代防火墙(NGFW)
3. 四类防火墙对比
- 包过滤:无法防 IP 伪造,不支持应用层
- 代理型:网络层保护弱,无状态表
- 状态检测:不检查数据区,应用层控制弱
- 复合型:全报文检查,强安全、多功能
(三)Linux 防火墙体系
1. 发展历程
| 内核版本 | 过滤机制 | 管理工具 |
|---|---|---|
| Linux 2.0 | ipfw | ipfwadm |
| Linux 2.2 | ipchain | ipchains |
| Linux 2.4/2.6/3.0 | netfilter | iptables |
| Linux 3.13+ | netfilter | firewalld、iptables、nftables |
2. 三层架构
- 内核层:netfilter 框架
- 内核内置的包过滤引擎,用户不可直接操作
- 结构:表 → 链 → 规则,决定数据包处理方式
- 中间层:守护进程对接内核与用户层,传递规则
- 用户层:管理工具
- iptables:传统静态防火墙
- firewalld:RHEL7 + 默认,动态、支持区域
- nftables:iptables 替代方案,语法更简洁
3. 主流工具对比
- iptables:静态规则,修改需重启,底层基于 netfilter
- firewalld:动态管理,运行时 / 永久配置分离,支持区域(zone)
- nftables:新框架,统一替代 iptables/ip6tables/arp/ebtables,firewalld 0.8 + 默认后端
五、项目实施:firewalld 防火墙部署
(一)安装 firewalld
1. 检查安装
rpm -qa | grep firewalld
2. YUM 安装
yum install -y firewalld*
RHEL7/CentOS7 默认已安装
(二)服务控制命令
# 启动
systemctl start firewalld
# 重启
systemctl restart firewalld
# 停止
systemctl stop firewalld
# 查看状态
systemctl status firewalld
# 开机自启
systemctl enable firewalld
# 禁止开机自启
systemctl disable firewalld
(三)firewalld 区域(zone)管理
1. 区域作用
按信任级别划分网络,简化安全策略管理
2. 预定义区域(默认规则)
| 区域 | 默认策略 |
|---|---|
| block(阻塞) | 拒绝入站,返回 icmp-host-prohibited |
| work(工作) | 内网信任,仅放 ssh/ipp-client/dhcpv6-client |
| home(家庭) | 放 ssh/ipp-client/mdns/samba-client |
| public(公共) | 默认区域,仅放 ssh/dhcpv6-client |
| dmz(隔离区) | 仅放 ssh,缓冲内外网 |
| trusted(信任) | 允许所有入站 |
| drop(丢弃) | 直接丢弃,无任何响应 |
| internal(内部) | 同 home,高信任 |
| external(外部) | 仅放 ssh,默认开启 SNAT 伪装 |
3. 规则类型
- 标准规则:基础放行 / 拒绝服务 / 端口
- 直接规则(direct):嵌入原生 iptables 规则,适配应用程序
- 富规则(rich):高级语法,支持日志、端口转发、速率限制、精细访问控制
(四)图形界面配置
firewall-config
- 路径:应用程序 → 杂项 → 防火墙
- 功能:可视化勾选服务 / 端口、切换区域、配置永久规则
(五)命令行:firewall-cmd(核心)
1. 两种配置模式
- 运行时(runtime):立即生效,重启失效
- 永久(permanent) :写入配置,需
--reload生效
2. 基础查询命令
# 版本
firewall-cmd --version
# 运行状态
firewall-cmd --state
# 所有区域
firewall-cmd --get-zones
# 默认区域
firewall-cmd --get-default-zone
# 活跃区域
firewall-cmd --get-active-zones
# 查看区域所有规则
firewall-cmd --zone=public --list-all
# 查看所有区域规则
firewall-cmd --list-all-zones
3. 区域设置
# 设置默认区域
firewall-cmd --set-default-zone=home
# 网卡绑定区域
firewall-cmd --zone=public --add-interface=ens33
# 查询网卡所属区域
firewall-cmd --get-zone-of-interface=ens33
4. 服务管理
# 查看所有服务
firewall-cmd --get-services
# 永久添加http服务
firewall-cmd --permanent --zone=public --add-service=http
# 永久移除ssh服务
firewall-cmd --permanent --remove-service=ssh
# 重载生效
firewall-cmd --reload
5. 端口管理
# 永久开放80/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
# 永久开放端口段
firewall-cmd --permanent --zone=public --add-port=8080-8888/tcp
# 移除端口
firewall-cmd --permanent --zone=public --remove-port=80/tcp
6. 紧急模式
# 拒绝所有包
firewall-cmd --panic-on
# 取消紧急
firewall-cmd --panic-off
# 查询状态
firewall-cmd --query-panic
7. 直接规则(iptables 兼容)
# 仅允许172.16.43.252访问22端口
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.16.43.252 -j ACCEPT
# 查看所有直接规则
firewall-cmd --direct --get-all-rules
8. 富规则(高级控制)
# 丢弃10.6.1.2所有流量
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="10.6.1.2" drop'
# 拒绝192.168.0.11
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
# 端口转发:80→8888(172.16.43.0/24网段)
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=172.16.43.0/24 forward-port port=80 protocol=tcp to-port=8888"
六、综合实战:Web 服务 + 端口转发
环境
- Server:172.16.43.254
- Web 端口修改为:8888
- 要求:用户访问 80 端口自动转发到 8888
步骤
启动防火墙并开机自启
systemctl start firewalld
systemctl enable firewalld
启动 httpd
systemctl start httpd
修改 httpd 监听端口
vim /etc/httpd/conf/httpd.conf
Listen 8888
systemctl restart httpd
开放端口段
firewall-cmd --permanent --zone=public --add-port=8080-8888/tcp
firewall-cmd --reload
配置富规则端口转发
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=172.16.43.0/24 forward-port port=80 protocol=tcp to-port=8888"
firewall-cmd --reload
测试
curl 172.16.43.254
七、进阶:NAT 地址转换(firewalld 实现)
(一)NAT 基础
- 全称:Network Address Translation
- 作用:
- 解决 IPv4 地址不足
- 隐藏内网 IP,提升安全
- 类型:
- SNAT(源地址转换):出口转发,内网访问外网
- DNAT(目的地址转换):端口映射,外网访问内网服务
(二)firewalld NAT 实现
1. 双网卡网关服务器
- ens33(external):172.16.43.252(外网)
- ens38(internal):10.0.0.2(内网)
- 内网服务器:10.0.0.3(Web/FTP/Mail)
2. SNAT(共享上网)
# 网卡绑定区域
firewall-cmd --permanent --zone=external --change-interface=ens33
firewall-cmd --permanent --zone=internal --change-interface=ens38
# 开启伪装(SNAT)
firewall-cmd --permanent --zone=external --add-masquerade
# 开启内核转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# 重载
firewall-cmd --reload
内网客户端网关设为:10.0.0.2
3. DNAT(发布内网 Web)
# 开放http
firewall-cmd --permanent --zone=external --add-service=http
# 端口转发:80→10.0.0.3:80
firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.0.3
firewall-cmd --reload
八、项目小结
- 防火墙是服务器安全边界核心
- firewalld 支持动态规则、区域管理、运行 / 永久配置
- 可实现:端口放行、服务控制、富规则、NAT 转换
- 生产价值:单机防护 + 网关防火墙 + 内网安全隔离
九、扩展知识(补充提升)
1. firewalld 与 iptables 兼容问题
- 同一系统不可同时运行firewalld 与 iptables
- 关闭 iptables:
systemctl stop iptables && systemctl disable iptables
2. nftables 基础(未来趋势)
# 安装
yum install -y nftables
# 启动
systemctl start nftables
# 基础规则示例
nft add rule inet filter input tcp dport 22 accept
3. 生产最佳实践
- 公网服务器默认使用public/dmz区域
- 最小权限:仅开放业务必需端口
- 重要服务用富规则 + 源 IP 限制
- 定期备份规则:
firewall-cmd --list-all-zones > firewall-backup.conf - 开启日志:
firewall-cmd --set-log-denied=all
4. 防火墙无法解决的风险
- 应用层漏洞(SQL 注入、XSS)
- 内部攻击、社会工程学
- 需配合:WAF、入侵检测(IDS/IPS)、杀毒、日志审计