Orange的运维学习日记--31.Linux防火墙深度详解

Orange的运维学习日记–31.Linux防火墙深度详解

防火墙深度介绍

防火墙的目的

在网络边界或主机边缘建立信任与不信任区域的分界
通过预设安全策略阻断未经授权的访问并监控可疑流量
平衡可用性与安全性,为内部网络或关键服务提供防护

核心功能

  • 流量检测与过滤
    检查每个进出数据包的源地址、目的地址、端口号、协议类型和状态
  • 状态跟踪
    对已建立连接进行跟踪,仅允许合法会话的数据包通过
  • 日志与审计
    记录规则命中、异常事件与流量统计,以便故障排查与安全分析
  • 报文修改
    支持网络地址转换(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 错误
匹配流程
  1. 根据传入接口关联的区域应用规则
  2. 若接口无关联,则按照源地址分配至特定区域
  3. 若源地址未指定,则分配至默认区域(public)
  4. lo 回环接口默认属于 trusted 区域

规则匹配优先级

  1. 端口转发与伪装
  2. 允许(accept)规则
  3. 拒绝(reject/drop)规则
  4. 记录(log)和审计(audit)规则
  5. 富规则优先级高于普通规则
  6. 若所有规则不匹配则默认拒绝(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 类型、富规则、网卡与源地址管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值