防火墙技术(三):状态检测和会话机制
状态检测
当报文到达防火墙后,防火墙允许报文通过,同时还会针对报文访问的这个行为建立会话,会话中包含PC发出的报文信息如地址和端口等
当收到报文的回应报文时,防火墙会把回应报文的信息和会话中的信息进行比对,如果信息匹配,则直接允许回应报文通过
###会话
- 会话是通信双方建立的连接在防火墙上的具体体现,代表两者的连接状态
- 一条会话就表示通信双方的一个连接
- 防火墙上多条会话的集合就叫作会话表
- –>符号前面的是源,符号后面的是目的
会话的五元组: - 源地址
- 源端口
- 目的地址
- 目的端口
- 协议
对于一些没有端口信息的报文,比如ICMP协议,报文中不带端口信息,防火墙会把ICMP报文头中ID字段值作为ICMP会话的源端口,会以固定值2048作为ICMP会话的目的端口
比如IPSec中的AH协议和ESP协议,也不带端口信息,防火墙会直接将这两个协议的会话中的源和目的端口都记录为0
查看会话信息
### 查看会话表
display firewall session table
###状态检测和会话机制补遗
### 会话详细信息
display firewall session table verbose
- Zone 表示报文在安全区域之间流动的方向,trust–> untrust表示报文是从Trust区域流向Untrust区域
- TTL 表示该条会话的老化时间,这个时间到期后,这条会话也将会被清除
- Left 表示该条会话剩余的生存时间
- Interface 表示报文的出接口,报文从这个接口发出
- NextHop 表示报文去往的下一跳的IP地址,本组网中是Web服务器的IP地址
- MAC 表示报文去往的下一跳的MAC地址,本组网中是Web服务器的MAC地址
- <–packets:4 bytes:465 表示会话反向方向上的报文统计信息,即Web服务器向PC发送报文的个数和字节数
- –>packets:7 bytes:455 表示会话正向方向上的报文统计信息,即PC向Web服务器发送报文的个数和字节数
会话是动态生成的,但不是永远存在的。如果长时间没有报文匹配,则说明通信双方已经断开了连接,不再需要该条会话了。此时,为了节约系统资源,防火墙会在一段时间后删除会话。该时间称为会话的老化时间,即TTL
老化时间的取值非常重要,某种业务的会话老化时间过长,就会一直占用系统资源,有可能导致其他业务的会话不能正常建立;会话老化时间过短,有可能导致该业务的连接被防火墙强行中断,影响业务运行。华为防火墙已经针对不同的协议设置了相应的会话默认老化时间
比如ICMP的会话老化时间是20s, DNS的会话老化时间是30s等
### 调整TTL老化时间
firewall session aging-time dns 10
网络中还有一种类型的业务,一条连接上的两个连续报文可能间隔时间很长,最具代表性的就是SQL数据库业务。用户查询SQL数据库服务器上的数据时,查询操作的时间间隔可能会远大于SQL数据库业务的会话老化时间,防火墙上该业务的会话老化之后,就会出现用户访问SQL数据库变慢或者无法继续查询的问题
如果只靠延长这些业务所属协议的会话老化时间来解决这个问题,会导致一些同样属于这个协议,但是其实并不需要这么长的老化时间的会话长时间不能得到老化,占用了系统资源,影响其他业务
为此,华为防火墙提供了“长连接”功能,通过ACL规则来识别报文,只有匹配ACL规则的特定报文的会话老化时间才会被延长。与单纯的通过调整协议的会话老化时间相比,长连接功能的控制粒度更加精确。默认情况下,应用了长连接功能的报文的会话老化时间是168h(相当长了吧!),当然这个时间也可以手动调整
备注:目前仅支持对TCP协议类型的报文配置长连接功能
### 长连接配置
acl 3000
rule permit tcp source 192.168.0.1 0 destination 172.16.0.2 0 destination-port eq sqlnet
quit
firewall zone interzone trust untrust
long-link 3000 outbound
###状态检测和会话创建
防火墙上的状态检测功能将属于同一个连接的报文都视为一个整体数据流,用会话来表示这条连接
- 判断一个TCP连接的主要标志就是SYN报文,我们也把SYN报文称为TCP连接的首包。对于TCP协议,防火墙只有收到SYN报文并且配置的规则允许SYN报文通过才会建立会话,后续的TCP报文匹配会话直接转发。如果防火墙没有收到SYN报文,只收到了SYN+ACK或ACK等后续报文,是不会创建会话的,并且会将这些报文丢弃
- 内部网络访问外部网络的请求报文直接通过路由器到达外部网络,而外部网络的回应报文,先经过路由器转发到防火墙,由防火墙处理后再转发到路由器,最后由路由器发送到内部网络。也就是说,防火墙无法收到SYN报文,只收到了SYN+ACK报文。这种通信双方交互的报文不同时经过防火墙的情况,叫作报文来回路经不一致
### 查看防火墙丢包信息
display firewall statistic system discard### 查看会话详细信息
display firewall session table verbose### 取消关闭状态检测功能
undo firewall session link-state check
TCP报文来回不一致情况
###UDP
UDP不同于TCP,他没有连接状态协议,对于UDP,防火墙收到UDP报文后,无论状态检测功能是处于开启还是关闭,只要防火墙配置的规则允许UDP报文通过,防火墙就会就会建立会话
###ICMP
对于Ping报文,在开启状态检测功能时,防火墙只有收到Ping回显请求报文,并且防火墙上配置的规则允许Ping回显请求报文通过,才会建立会话
如果防火墙没有收到Ping回显请求报文,只收到了Ping回显应答报文,是不会创建会话的,并且会将Ping回显应答报文丢弃。在关闭状态检测功能时,防火墙收到Ping回显请求报文和Ping回显应答报文,都会创建会话