Orange的运维学习日记--31.Linux防火墙深度详解
Orange的运维学习日记–31.Linux防火墙深度详解
文章目录
- Orange的运维学习日记--31.Linux防火墙深度详解
- 防火墙深度介绍
- 防火墙的目的
- 核心功能
- 过滤方式
- 区域划分与部署
- NAT 与地址伪装
- 性能与扩展
- 防火墙演进
- 防火墙类型
- 按保护范围
- 按实现方式
- 按网络协议层级
- 网络层防火墙
- 应用层防火墙(Web 应用防火墙或代理网关)
- Linux 防火墙框架
- Netfilter 子系统
- Nftables 子系统
- 静态防火墙与动态防火墙
- firewalld 防火墙
- firewalld 简介
- firewalld 与 iptables 关系
- 区域概念
- 默认提供的区域
- 匹配流程
- 规则匹配优先级
- firewalld 配置
- 配置方法
- 配置文件位置
- firewall-cmd 命令行管理
- 基本概念
- 区域管理
- 来源(source)管理
- 接口(interface)管理
- 服务管理
- 自定义服务
- 端口管理
- 伪装(masquerade)管理
- 端口转发管理
- ICMP 配置
- icmp-block-inversion
- icmp-blocks
- 协议管理
- 富规则(rich rule)
- 直接规则(direct rule)
- 应急模式
- 其他实用选项
- 综合案例
- firewall-config 图形工具
- firewall-config 图形工具
防火墙深度介绍
防火墙的目的
在网络边界或主机边缘建立信任与不信任区域的分界
通过预设安全策略阻断未经授权的访问并监控可疑流量
平衡可用性与安全性,为内部网络或关键服务提供防护
核心功能
- 流量检测与过滤
检查每个进出数据包的源地址、目的地址、端口号、协议类型和状态 - 状态跟踪
对已建立连接进行跟踪,仅允许合法会话的数据包通过 - 日志与审计
记录规则命中、异常事件与流量统计,以便故障排查与安全分析 - 报文修改
支持网络地址转换(NAT)、端口转发、地址伪装(masquerade)
过滤方式
- 包过滤(Stateless Packet Filter)
基于静态访问控制列表(ACL)快速检查数据包头部,无连接状态记录 - 状态检测(Stateful Inspection)
维护连接跟踪表,仅允许与已有会话相关的响应报文通过 - 代理与应用层网关
在应用层完全解析协议,实现深度包检测与内容审查 - 深度包检测(DPI)
对应用层载荷内容进行正则或特征匹配,防范高级攻击
区域划分与部署
- 边界防火墙
部署于企业或数据中心与互联网之间,阻断外部威胁 - 内部防火墙
将敏感子网(如生产环境、财务系统)与普通办公网隔离 - DMZ(隔离区)
放置面向外网的应用服务器,单向受控访问,降低被入侵面 - 分层防御
边界→局域网→主机三层防护,任何一层被突破仍有后续屏障
NAT 与地址伪装
- 源地址转换(SNAT)
将内部主机伪装为防火墙地址,隐藏真实网络拓扑 - 目的地址转换(DNAT)
将外部请求重定向到内部服务器,实现端口转发与负载均衡 - 透明代理
无需客户端配置,通过网络拓扑自动引导流量到防火墙
性能与扩展
- 硬件加速
专用ASIC或FPGA提升包过滤与加解密性能 - 集群与高可用
多防火墙节点组成集群,主动-被动或主动-主动保证不中断切换 - 分布式防护
在各骨干交换机或虚拟云主机上部署微分段防火墙,实现零信任
防火墙演进
- 第一代:单纯包过滤
- 第二代:状态检测
- 第三代:应用层网关
- 第四代:集成入侵防御系统(IPS)与行为分析
- 第五代:基于威胁情报与机器学习的自适应防御
防火墙类型
按保护范围
- 主机防火墙 保护单台主机
- 网络防火墙 保护防火墙一侧的整个局域网
按实现方式
- 硬件防火墙 在专用硬件上实现,如华为、华三、天融信等
- 软件防火墙 在通用硬件平台上运行,如 iptables、firewalld
按网络协议层级
网络层防火墙
- 工作在 OSI 模型第四层,亦称包过滤防火墙
- 依据访问控制列表 ACL 检查源地址、目的地址、端口和协议状态等
- 优点:透明、处理速度快、易维护
- 缺点:无法检测应用层内容
应用层防火墙(Web 应用防火墙或代理网关)
- 工作在 OSI 模型第七层,或充当 HTTP/HTTPS 代理
- 功能要点
- 异常协议检测 只允许符合 HTTP 标准的请求
- 增强输入验证 防止网页篡改、信息泄露、木马植入
- 漏洞屏蔽 能在漏洞公开后快速屏蔽攻击
- 基于规则与异常双重保护 通过更新规则库和行为检测拦截攻击
- 状态管理 追踪用户会话并识别暴力攻击
- 隐藏表单域、响应监视、信息泄露保护等增强功能
- 优点:对应用层攻击提供直接防护
- 缺点:处理性能相对较低
Linux 防火墙框架
Netfilter 子系统
- Linux 内核中负责网络过滤的数据包处理引擎
- 在数据包到达用户空间前进行检查,可修改、丢弃或路由
- 用户态工具:
- iptables 用于 IPv4 包过滤
- ip6tables 用于 IPv6 包过滤
- arptables 用于 ARP 协议过滤 防护 ARP 欺骗
- ebtables 用于链路层过滤 多用于桥接模式控制 VLAN
ls -1 /sbin/*tables
输出结果
/sbin/arptables -> xtables-nft-multi /sbin/ebtables -> xtables-nft-multi /sbin/ip6tables -> xtables-nft-multi /sbin/iptables -> xtables-nft-multi
Nftables 子系统
- Netfilter 的新一代实现,使用单一用户空间工具 nft
- 优点
- 更快的数据包处理与规则集更新
- 统一接口管理所有协议,避免前端冲突
静态防火墙与动态防火墙
- 静态防火墙
- 每次修改都重新加载所有规则,导致网络短暂中断
- 典型代表:iptables 服务通过
service iptables reload
重载规则
- 动态防火墙
- 仅更新变更部分即可生效,无需重载整个规则集
- 典型代表:firewalld
firewalld 防火墙
firewalld 简介
- Red Hat 推出的动态防火墙管理工具
- 后端默认使用 nftables
- RHEL 7 之前默认使用 iptables;RHEL 7 及以后默认改为 firewalld
- 建议同时安装时仅启用一个防火墙以免规则冲突
firewalld 与 iptables 关系
- firewalld 提供 daemon、服务、命令行与图形配置工具
- 底层依然调用内核 Netfilter 处理规则
区域概念
firewalld 将网络流量划分至不同区域(zone),每个区域拥有独立规则集
默认提供的区域
- trusted 允许所有传入流量
- public 允许 SSH、DHCPv6-Client 等预定义服务
- external 允许 SSH 并对转发流量启用伪装
- home 允许 SSH、mDNS、Samba-Client、DHCPv6-Client
- internal 同 home
- work 允许 SSH、DHCPv6-Client
- dmz 允许 SSH
- block 拒绝所有非相关入站流量
- drop 丢弃所有非相关入站流量且不返回 ICMP 错误
匹配流程
- 根据传入接口关联的区域应用规则
- 若接口无关联,则按照源地址分配至特定区域
- 若源地址未指定,则分配至默认区域(public)
- lo 回环接口默认属于 trusted 区域
规则匹配优先级
- 端口转发与伪装
- 允许(accept)规则
- 拒绝(reject/drop)规则
- 记录(log)和审计(audit)规则
- 富规则优先级高于普通规则
- 若所有规则不匹配则默认拒绝(trusted 区域除外)
firewalld 配置
配置方法
- 直接编辑
/etc/firewalld
或/usr/lib/firewalld
目录下的 XML 文件 - firewall-cmd 命令行工具
- firewall-config 图形工具
配置文件位置
/usr/lib/firewalld
软件包提供的默认配置/etc/firewalld
管理员自定义配置建议存放处
firewall-cmd 命令行管理
基本概念
- 配置状态
- runtime 运行时配置,立即生效
- permanent 永久配置,需
--reload
重新加载才生效
- 操作建议
- 同时使用
--permanent
与立即生效命令 - 默认区域为 public,可用
--zone
指定其他区域
- 同时使用
区域管理
# 查看全部区域
firewall-cmd --get-zones# 查看激活区域(已关联接口或源)
firewall-cmd --get-active-zones# 查看与设置默认区域
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=trusted# 新建与删除区域(需 --permanent)
firewall-cmd --permanent --new-zone=myzone
firewall-cmd --permanent --delete-zone=myzone# 重新加载永久配置
firewall-cmd --reload# 查看所有区域详情
firewall-cmd --list-all-zones# 查看当前默认区域详情
firewall-cmd --list-all
来源(source)管理
# 将源地址分配到 home 区域
firewall-cmd --add-source=192.168.1.0/24 --zone=home# 查询与移除源地址
firewall-cmd --list-sources --zone=home
firewall-cmd --get-zone-of-source=192.168.1.0/24
firewall-cmd --remove-source=192.168.1.0/24 --zone=home
接口(interface)管理
# 查询接口所属区域
firewall-cmd --get-zone-of-interface=ens32# 变更与移除接口
firewall-cmd --change-interface=ens32 --zone=home
firewall-cmd --remove-interface=ens32 --zone=home# 绑定接口到区域
firewall-cmd --add-interface=ens32 --zone=public
服务管理
# 列出预定义服务
firewall-cmd --get-services# 添加/查询/删除服务放行
firewall-cmd --add-service=http
firewall-cmd --query-service=http
firewall-cmd --remove-service=http
自定义服务
# 新建与删除服务
firewall-cmd --permanent --new-service=myserv
firewall-cmd --permanent --delete-service=myserv# 配置服务端口与协议
firewall-cmd --permanent --service=myserv --add-port=8080/tcp
firewall-cmd --permanent --service=myserv --add-protocol=icmp
端口管理
# 添加/查询/删除端口放行
firewall-cmd --add-port=5900/tcp
firewall-cmd --query-port=5900/tcp
firewall-cmd --remove-port=5900/tcp
伪装(masquerade)管理
# 启用与查询伪装
firewall-cmd --add-masquerade
firewall-cmd --query-masquerade# 禁用伪装
firewall-cmd --remove-masquerade
端口转发管理
# 添加端口转发(需先启用伪装)
firewall-cmd --add-masquerade
firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80# 查询与移除转发规则
firewall-cmd --query-forward-port=port=8000:proto=tcp:toport=80
firewall-cmd --remove-forward-port=port=8000:proto=tcp:toport=80
ICMP 配置
icmp-block-inversion
- 默认 no 放行所有 ICMP 类型
- 设置 yes 禁止所有 ICMP 再通过富规则放行特定源
firewall-cmd --add-icmp-block-inversion
firewall-cmd --query-icmp-block-inversion
icmp-blocks
# 列出可用 icmptypes
firewall-cmd --get-icmptypes# 屏蔽 echo-request 实现禁止 ping
firewall-cmd --add-icmp-block=echo-request
firewall-cmd --list-icmp-blocks
firewall-cmd --remove-icmp-block=echo-request
协议管理
# 添加/查询/删除协议放行
firewall-cmd --add-protocol=icmp
firewall-cmd --query-protocol=icmp
firewall-cmd --remove-protocol=icmp
富规则(rich rule)
-
灵活自定义源、目的、服务、速率限制、日志和审计等
-
语法模板
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.1.8.0/24" service name="http" limit value="3/s" log prefix="http-error" level="error" audit limit value="1/s" accept'
-
查询与删除
firewall-cmd --list-rich-rules firewall-cmd --remove-rich-rule='rule protocol value="icmp" drop'
直接规则(direct rule)
-
直接规则优先于 firewalld 规则,用于补充复杂场景
-
需了解 iptables 表、链、目标等概念
-
常用命令
firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.0.0/24 -j blacklist firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP firewall-cmd --reload firewall-cmd --direct --get-all-rules
应急模式
--panic-on
启用 panic 模式 丢弃所有流量--panic-off
关闭 panic 模式--query-panic
查询当前状态
其他实用选项
--runtime-to-permanent
将运行时配置写入永久配置--timeout
设置规则生存时长 便于调试
综合案例
-
禁止单个主机 ping 本机
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.1.8.10" icmp-type name="echo-request" reject' firewall-cmd --complete-reload
-
仅允许单个主机 ping 本机
firewall-cmd --permanent --add-icmp-block-inversion firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.1.8.10" icmp-type name="echo-request" accept' firewall-cmd --complete-reload
firewall-config 图形工具
-
直观式管理 firewalld 可视化界面
-
需安装 firewall-config、xorg-x11-xauth、libglvnd-glx
-
功能模块
- 选项菜单 重载、防火墙应急、默认区域切换、保存运行时至永久
- 查看菜单 显示当前详情与日志
-
仅允许单个主机 ping 本机
firewall-cmd --permanent --add-icmp-block-inversion firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.1.8.10" icmp-type name="echo-request" accept' firewall-cmd --complete-reload
firewall-config 图形工具
- 直观式管理 firewalld 可视化界面
- 需安装 firewall-config、xorg-x11-xauth、libglvnd-glx
- 功能模块
- 选项菜单 重载、防火墙应急、默认区域切换、保存运行时至永久
- 查看菜单 显示当前详情与日志
- 区域配置 服务、端口、协议、源端口、伪装、端口转发、ICMP 类型、富规则、网卡与源地址管理