防火墙发展史简介
包过滤防火墙
早期防火墙需要对报文逐包过滤,但一般只对包头进行检测,只对三层、四层协议进行过滤,没有上层协议识别的功能(目前大多数攻击发生在应用层,包过滤不会检测应用层)
代理防火墙
在代理防火墙中,防火墙充当了客户端的代理,也就是说防火墙完全隔离了内网与外网,客户端的所有报文必须经过防火墙检查、转发后才能到外网,代理防火墙将检查所有报文的应用层,并将检查的内容信息放入决策过程。虽然包过滤能力很强,但因其配置过程繁琐、设备要求较高、还要开发专用代理软件等缺点,导致其非常不灵活
基于状态检测的防火墙
通过跟踪网络连接的过程,以流量为单位,确定连接是否可靠。目前最常见的防火墙
复合型防火墙
下一代防火墙,又称统一安全网关——USG,在基于状态的防火墙上又集成了IDS、IPS、AV防病毒等功能,多种功能协调工作
基于状态检测的防火墙
基本运作模式简述
状态检测"机制,是以流量为单位 来对报文进行检测和转发,即:对一条流量的第一个报文(首包)进行包过滤规则检查,第一次来的包(防火墙可以区分是去的,还是回的),并将判断结果作为该条流量的"状态"记录进会话表项,建立两个缓存的session(一个去包缓存、一个回包缓存),后续属于同一数据流的数据包匹配缓存表后放行
基于状态检测防火墙组成
在基于状态检测的防火墙中,有两张表:规则表 和 状态表(会话表)
规则表
规则表表示了防火墙的过滤规则
规则表由 六元组构成
sa | da | sp | dp | protocol_type | direction |
源地址 | 目的地址 | 源端口 | 目的端口 | 协议类型 | 数据流方向 |
状态表
状态表表示了数据包连接的属性
状态表由 九元组构成
protocol_type | state | sequence_number | Timeout | N |
协议类型 | 该次连接的状态 | TCP包序列号(其他此处为空) | 该次连接超时值 | 连接以通过数据包个数 |
protocol_type:分为TCP、UDP、ICMP、其他协议
三大模块:
- 协议处理模块
针对数据链路层和网络层进行过滤
- 规则匹配模块
根据事先配置的规则对数据包进行过滤
- 状态检测模块
分析协议的工作原理和流程
具体匹配流程
1:数据包首先会到达状态检查模块,通过对数据包分析、提取数据包报文头文件信息,检查数据包是否符合在状态表中某个已经建立的有效的会话连接记录,如符合记录则根据报文头信息更新状态表并放行。
2:若与状态表中无匹配表项,则检测其与规则表是否匹配,不匹配直接丢弃
3:若匹配进一步判断是否允许建立新连接,这时根据 IP 协议承载的上层不同
协议类型建立新表项,最终报文加载状态信息进行处理。
TCP数据包的检测流程
TCP是基于连接的协议,通过三次握手确保数据的稳定传输
在TCP连接首次建立的过程中:
- 发起连接的SYN报文只通过规则表的检查,
- 其余报文(非SYN数据包)则需要通过状态表的匹配
状态检测接口接收到 TCP 数据包后:
1:首先对 TCP 包进行完整性检查
和流量检查: 通过检查来判断数据包长度是否相等、物理地址是否正确等等
2:其次判断是否是 SYN 连接
3:若为SYN首包,由于TCP连接通过三次握手建立(SYN->SYN/ACK->ACK),所以在确认SYN为三次握手的首包,并匹配规则表后,会建立一个临时的"连接未完成表"——Pending表,Pending表是为还未进行的两次握手(SYN/ACK,ACK)建立的临时表,从而避免了后续的握手包还需要经过规则表匹配,提高效率
相关攻击及防御措施
伪造TCP报文防护
为了防止攻击者伪造TCP报文,攻击者可以伪造成与正常用户一样的6元组,这时需要通过9元组中的参数N,对TCP报文的序号(为了保证传输的可靠性,TCP对每一个报文都进行了编号,攻击者无从伪造编号)进行检测
SYN Flood攻击防护
为了防止SYN Flood等DDOS攻击,需要对超时时间进行限制(状态表九元组中Timeout表项),对超时未建立连接的SYN报文即使丢弃