浅谈防火墙长连接与短连接

浅谈防火墙长连接与短连接
引言:在银行项目日常投产中,开发人员会发现系统上线后应用访问数据库连接中断的问题,这很有可能是因为应用程序与数据库之间的连接使用了长连接。当应用程序与数据库建立的同一个TCP会话的两个连续报文到达防火墙的时间间隔大于防火墙上默认TCP会话的保持时间间隔,会话超时后防火墙将从会话表中删除此TCP会话信息。所以当后续该TCP会话中的第二个报文到达防火墙后,防火墙发现会话表中无此会话条目,防火墙会根据自身的转发机制从而丢弃该非tcp syn报文,导致连接中断,所以开发人员要把使用长连接的需求告之运维人员,把防火墙上针对该条访问关系策略默认的会话时间设置久一点,从而可以避免会话中断的情况。由此可见项目的前期沟通显得至关重要。(注:本文防火墙的一些时间参数仅为华为某型号防火墙,不代表所有厂家防火墙的参数)
一、TCP连接建立和拆除过程
1、TCP标志位
SYN,ACK,FIN存放在TCP的标志位,一共有6个字符,这里就介绍这三个:
SYN:请求创建连接,在三次握手中前两次要SYN=1,表示这两次用于建立连接。
FIN:请求关闭连接,在四次分手时,我们发现FIN发了两遍。这是因为TCP的连接是双向的,所以一次FIN只能关闭一个方向。
ACK:确认接收,不管是三次握手还是四次分手,在回应的时候都会加上ACK=1,表示消息接收到了,并且在建立连接以后发送数据的时候,都需加上ACK=1,表示数据接收成功。
seq:序列号:当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接收方才能对数据包进行再次拼接。
2、TCP连接的建立-三次握手
浅谈防火墙长连接与短连接_第1张图片
1.客户端首先发起连接请求,SYN=1,ACK=0,本次发送包的序列号seq=x。
2.服务端接收到后,要告诉客户端:我接收到了!ACK=1表示回应,SYN=1表示发送数据,所以就变成了ACK=1,SYN=1,本次发送包的序列号为seq=y,希望下一次收到包的序列号为ack=x+1。
3.理论上这时的连接就创建成功了,但是客户端要再发一个消息给服务端确认一下,这时只需要ACK=1就行了,发送包的序列号seq=x+1,ack=y+1。
3、TCP连接的拆除-四次挥手
浅谈防火墙长连接与短连接_第2张图片
1.首先客户端请求关闭客户端到服务端方向的连接,这时客户端需发送FIN=1,表示要关闭一个方向的连接。(见图2)
2.服务端接收到后需要确认一下,返回ACK=1。
3.此时只关闭了一个方向,另一个方向也需要关闭。所以服务端也向客户端发送了FIN=1 ACK=1。
4.客户端接收到后发送ACK=1,表示接收成功。
二、短连接和长连接的概念
1、短连接
短连接如图3所示,是指通信双方有数据交互时,建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。而像WEB网站的http服务一般都用短连接,因为长连接对于防火墙和服务器端来说会耗费一定的资源。而像WEB网站存在频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源;如果用长连接,对于成千上万的用户,如果每个用户都占用一个连接的话,那可想而知,并发量大,防火墙的会话数爆涨,进而拖垮防火墙,对后端服务器也会造成一定的压力,所以每个用户无需频繁操作情况下需用短连接好。
缺省情况下,防火墙会话的保持时间为1200s。当某一条会话经过1200s过后,该会话连接表将被删除掉,释放防火墙资源,从而减少防火墙的工作负荷,提高网络性能。
浅谈防火墙长连接与短连接_第3张图片
2、长连接
长连接如图4所示,多用于操作频繁,点对点的通讯,适用于连接数不是太多的情况。每个TCP连接都需要建立三次握手,这需要时间。如果每个操作都是短连接,再操作的话处理效率会降低很多,所以每次建立连接后都不会断开,下次处理时直接发送数据包就可以,不用再次建立TCP连接。例如:数据库的连接建议使用长连接,如果用短连接频繁的通信会产生socket错误,而且频繁的socket创建也是对资源的浪费。
浅谈防火墙长连接与短连接_第4张图片
三、防火墙的工作原理
1、会话表匹配原则
当报文到达防火墙,先查看是否会有会话表匹配。
1)如果有会话表匹配,则匹配会话表转发。
2)如果没有匹配会话表,看是否能够创建会话表,创建的会话表的条件如下:
a、前提必须是首包,比如TCP: SYN、ICMP echo-request。
b、先匹配路由表。
c、再匹配安全策略。
2、状态检测机制
浅谈防火墙长连接与短连接_第5张图片
a、状态检测机制开启的情况下,只有首包通过设备才能建立会话表,后续包直接匹配会话表项进行转发。
b、状态检测机制关闭的情况下,即使首包没有经过防火墙,后续包例如SYN+ACK、ACK、echo-reply只要通过防火墙也可以生成会话表项。
c、UDP没有首包概念
d、首包建立会话------使用状态检测
e、状态检测主要针对TCP和ICMP报文
f、开启命令:firewall session link-state check -------默认就开启
g、关闭状态检测的命令:undo firewall session link-state check
3、详解会话表
查看会话表简要信息
display firewall session table ---------------查看会话表简要信息在这里插入图片描述
协议 虚拟防火墙有作用 源地址:源端口 目标地址:目标端口
telnet VPN:public --> public 13.1.1.100:27353 -----> 14.1.1.100:23
筛选会话:
display firewall session table servic telnnt---------筛选会话
在这里插入图片描述
筛选出telnet 这条会话信息,该会话保持是13.1.1.100发往14.1.1.100的telnet服务请求
查看防火墙默认TCP会话的保持时间
在这里插入图片描述
浅谈防火墙长连接与短连接_第6张图片
华为防火墙常用tcp服务的默认会话保持时间为1200s,我们称之为短连接,也叫短会话。
查看会话表详细信息:
display firewall session table verbose service telnet ---------查看某telnet会话详细信息
在这里插入图片描述
Zone:untrust–> trust——该会话是从untrust域到trust域的会话
TTL: 00:20:00——老化时间20min,也可以理解为防火墙设置该会话的默认存活时间为1200s。
Left: 00:19:50——剩余时间,该会话在防火墙中的剩余时间,到期后防火墙将删除该会话。
interface: GigabitEthernet1/0/0—— 出接口,匹配该会话的数据包将从该接口转发。
NextHop: 12.1.1.6——下一跳IP地址,匹配该会话转发的下一跳IP地址。
MAC: 0000-5e00-0102——下一跳MAC,匹配该会话转发的下一跳mac地址。
PolicyName: TELNET ——匹配策略,该会话匹配的防火墙策略名称。
四、防火墙会话老化时间配置
1、各协议会话默认老化时间:
浅谈防火墙长连接与短连接_第7张图片
2、Telnet会话的老化
在Telnet服务器上设置telnet服务的超时时间为1天,即1440min。
在这里插入图片描述
在客户端上telnet 14.1.1.100,建立tcp会话,防火墙默认telnet会话保持时间为1200s。
在这里插入图片描述
在这里插入图片描述
经过20min后,Left的时间变为00:00:00时,防火墙上会话被删除,客户端telnet将被中断,无法发送数据。
3、将防火墙上Telnet老化时间改长
在这里插入图片描述
在这里插入图片描述
防火墙上默认短连接的时间范围为1-40000s,最大值为11小时06分40秒。
在这里插入图片描述
TTL为11小时06分40秒,也就是40000s,防火墙的telnet会话保持时间变长
浅谈防火墙长连接与短连接_第8张图片
客户端telnet登录到服务器上,经过20min后,仍然可以进行命令操作,因为防火墙的会话保持时间被改为了11小时06分40秒,远远大于了20min。
4、将防火墙上Telnet设置为长连接
防火墙上会话aging-time的时间极限值为40000s,仍无法满足某些应用程序的需求,这时需要把它设置为长连接。配置方法:进入安全策略配置模式,进入名为“TELNET”的规则,开启长连接功能,长连接的设置时间为0-24000小时,默认为7*24=168小时,选择默认。
浅谈防火墙长连接与短连接_第9张图片
在客户机13.1.1.100上telnet14.1.1.100,查看防火墙的长连接会话表和老化时间
在这里插入图片描述
在这里插入图片描述
5、防火墙长连接会话表的快速老化
防火墙连接会话表的快速老化一般有两种情况:
1、检测到有病毒的时候,会话表立刻老化,并且加入黑名单,具体在此不做详细探究。
2、发送FIN,第一次收到TCP fin包,老化时间变为900s(默认),第二次收到TCP fin包,老化时间变为10s。
3、开启抓包工具,并且退出telnet会话,然后查看防火墙长连接会话表的老化时间。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分析:当应用程序telnet会话退出的时候,首先服务器向客户端发送TCP-Fin包,客户端发送ACK确认后再向服务器发送TCP-Fin包,防火墙收到两次TCP-FIN包后,把Telnet会话时间TTL改为10s,加速会话表的老化,这样防火墙资源得到了释放。
五、总结
至此,你应该清楚了长连接和短连接的原理。对于不同的应用程序长连接的使用场景,在防火墙中设置与之相匹配的长连接会话时间尤为重要,这样可以更好的利用网络资源。另外,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是在实际情况下,如果中间节点出现什么故障一般是难以发现的,可以在应用端用心跳包去探测维持长连接的状态,在获悉断线过后,可以通过程序进行一些相关操作,比如断线后的数据清理,重新连接等。

你可能感兴趣的:(浅谈防火墙长连接与短连接)