第202篇:防火墙包过滤与会话表
关键词
包过滤、会话表、状态检测、五元组、会话老化、TCP 状态跟踪、ASPF、会话表安全
一、包过滤基础
1.1 什么是包过滤
包过滤是最基本的防火墙技术,依据每个报文头部的信息决定转发或丢弃:
包过滤的检查维度(五元组): | 源 IP 10.0.0.1 | 目的 IP 8.8.8.8 | 源端口 12345 | 目的端口 443 | 协议号 TCP(6) | | --- | --- | --- | --- | --- |
1.2 无状态包过滤 vs 有状态包过滤
无状态包过滤(传统 ACL):
每个报文独立检查
不关心连接状态
需要双向放行规则
例:允许内网访问外网 HTTP
入方向:允许 10.0.0.0/24 → 任何 80
出方向:允许 任何 → 10.0.0.0/24 临时端口
↑ 问题:出方向规则太宽泛,有安全隐患
有状态包过滤(状态防火墙):
维护会话表
只检查首包,后续报文查会话表
自动创建反向通道
例:只需一条规则
入方向:允许 10.0.0.0/24 → 任何 HTTP
回复报文自动允许
二、会话表(Session Table)
2.1 会话表的结构
每个经过防火墙的 TCP/UDP 连接都在会话表中有一条记录:
display firewall session table
Current Total Sessions: 56123
TCP 10.0.0.1:12345 → 8.8.8.8:443
Zone: Trust → Untrust
VPN: public → public
State: ESTABLISHED
TTL: 3600s
Create: 2024-03-15 10:00:00
Last Hit: 2024-03-15 10:05:23
UDP 10.0.0.1:54321 → 8.8.8.8:53
Zone: Trust → Untrust
State: ACTIVE
TTL: 180s
会话表的关键字段:
| 字段 | 说明 | 示例 |
|---|---|---|
| 五元组 | 源/目的 IP + 端口 + 协议 | 10.0.0.1:12345→8.8.8.8:443 TCP |
| 安全区域 | 入接口和出接口所属区域 | Trust→Untrust |
| 连接状态 | TCP 连接当前状态 | ESTABLISHED / CLOSING |
| TTL | 剩余生存时间 | 3600 秒 |
| 创建时间 | 会话建立的时间 | 2024-03-15 10:00:00 |
2.2 会话建立流程
TCP 连接建立时,防火墙的会话创建过程:
客户端 防火墙 服务器
│ │ │
│ 1. SYN (首包) │ │
│─────────────────────────→ │ │
│ │ 2. 创建会话表条目 │
│ │ 状态: SYN_SENT │
│ │ │
│ │ 3. 转发 SYN │
│ │─────────────────────────→ │
│ │ │
│ │ 4. SYN+ACK │
│ │←──────────────────────────│
│ │ 5. 匹配会话表 │
│ │ 状态: SYN_RECEIVED │
│ │ │
│ 6. SYN+ACK │ │
│←──────────────────────────│ │
│ │ │
│ 7. ACK │ │
│──────────────────────────→│ │
│ │ 8. 状态: ESTABLISHED │
│ │ │
│ │ 9. 转发 ACK │
│ │──────────────────────────→ │
连接建立成功,后续数据报文直接匹配会话表转发
2.3 会话老化机制
不同类型的会话有不同的超时时间:
协议/场景 默认超时时间 说明
──────────────────────────────────────────
TCP ESTABLISHED 3600 秒(1h) 正常连接
TCP SYN_SENT 10 秒 连接未建立
TCP FIN_WAIT 10 秒 正常关闭中
TCP CLOSE_WAIT 30 秒 对端关闭
TCP TIME_WAIT 2 秒 彻底关闭
UDP 180 秒(3min) 无连接协议
ICMP 20 秒 临时响应
FTP 数据通道 30 秒 ASPF 动态创建
# 调整会话老化时间(安全加固场景)
firewall session aging-time
tcp ESTABLISHED 1800 # 从 3600s 减到 1800s
udp 120 # 从 180s 减到 120s
三、TCP 状态跟踪
3.1 防火墙维护的 TCP 状态机
防火墙为每个 TCP 会话维护简化的状态机:
┌───────────┐
│ CLOSED │
└─────┬─────┘
│ 收到 SYN
┌─────┴─────┐
│ SYN_SENT │
└─────┬─────┘
│ 收到 SYN+ACK
┌─────┴─────┐
│SYN_RCVD │
└─────┬─────┘
│ 收到 ACK
┌─────┴─────┐
│ESTABLISHED│ ← 数据交互阶段
└─────┬─────┘
│ 收到 FIN
┌─────┴─────┐
│ CLOSING │
└─────┬─────┘
│ 双向 FIN 交换完成
┌─────┴─────┐
│ CLOSED │ → 删除会话
└───────────┘
3.2 状态检测的安全优势
状态检测如何防御攻击:
1. SYN Flood 防护
对 SYN_SENT 状态会话的数量进行限制
# 配置
firewall syn-flood protect enable
firewall syn-flood protect threshold 1000
2. TCP 序列号检查
验证 TCP 序列号是否在合法窗口内
防止 TCP 劫持和会话注入
3. 非对称路由处理
如果出方向和入方向路径不同,需要开启 Asymmetric Routing 处理
firewall asymmetric-route enable
四、会话表的安全防护
4.1 会话表耗尽攻击
攻击者通过大量伪造连接填满会话表,导致正常连接无法建立:
会话表容量:100 万条
攻击流量:5 万 SYN/秒(伪造源 IP)
20 秒内会话表填满 → 正常用户无法新建连接
防护措施:
1. 限制单源 IP 的最大会话数
firewall session limit source-ip 10.0.0.1 1000
2. 限制单目的 IP 的最大会话数
firewall session limit destination-ip 8.8.8.8 5000
3. 限制单安全区域的会话总数
firewall session limit zone trust 500000
4.2 会话表查看与管理
# 查看会话统计
display firewall session statistics
Total sessions: 56123
TCP: 45678
UDP: 10234
ICMP: 211
Session creation rate: 1234/sec
Session deletion rate: 1200/sec
# 按条件过滤查看会话
display firewall session table source-ip 10.0.0.1
display firewall session table destination-port 80
# 手动清除会话
reset firewall session table
reset firewall session table source-ip 10.0.0.1
五、包过滤与 NAT 的协同
5.1 NAT 对会话表的影响
有 NAT 时的会话表:
转换前:10.0.0.1:12345 → 8.8.8.8:80 (Trust→Untrust)
转换后:203.0.113.1:2048 → 8.8.8.8:80 (Trust→Untrust)
↑ ↑
NAT 转换了源地址 目的地址不变
会话表记录的是转换后的五元组:
Original: 10.0.0.1:12345 ↔ 203.0.113.1:2048
Reply: 8.8.8.8:80 → 203.0.113.1:2048
5.2 配置示例
# NAT + 包过滤组合配置
nat-policy
rule name Source_NAT
source-zone trust
destination-zone untrust
source-address 10.0.0.0 mask 255.255.255.0
action source-nat easy-ip # 接口地址 NAT
!
security-policy
rule name Trust_to_Internet
source-zone trust
destination-zone untrust
action permit
# 注意:NAT 在安全策略之前或之后执行(取决于设备)
六、总结
| 知识点 | 核心要点 |
|---|---|
| 包过滤 | 基于五元组检查每个报文 |
| 无状态 vs 有状态 | 无状态逐包检查,有状态维护会话 |
| 会话表 | 记录每个连接的状态、老化时间、五元组 |
| TCP 状态跟踪 | SYN→SYN_RCVD→ESTABLISHED→CLOSING→CLOSED |
| 会话老化 | TCP 3600s、UDP 180s、ICMP 20s |
| 安全防护 | 会话数限制、SYN Flood 防护、序列号检查 |
七、思考
- 有状态防火墙和无状态包过滤的主要区别是什么?
- 会话表在防火墙的转发流程中扮演什么角色?
- TCP 连接的会话状态是如何从 SYN 转换到 ESTABLISHED 的?
- 如果防火墙会话表被填满,会发生什么?如何防护?
- NAT 环境下,会话表记录的是转换前还是转换后的地址?
下篇预告:第203篇《状态防火墙 vs 包过滤防火墙》——深入对比两种防火墙架构的原理、优缺点和适用场景。