状态检测机制关闭状态下,即使首包没有经过设备,后续包只要通过设备也可以生成会话表项。
在报文来回路径不一致的组网环境中,防火墙可能只会收到通信过程中的后续报文。在这种情况下,为了保证业务正常,就需要关闭防火墙的状态检测功能。当关闭状态检测功能后,可以通过后续报文建立会话,保证业务的正常运行。
状态检测防火墙之后防火墙才有的功能:
防火墙就相当于门岗,会话表就是一个详细的登记信息。
会话表的生成:会话表是自动在防火墙上生成的。
假设A和B之间通过防火墙互联,A给B发送数据包,匹配上安全策略之后(默认安全策略除外),会在防火墙上自动生成会话表,当B给A回数据包经过防火墙时无需匹配安全测录,只要可以匹配上会话表就可以回来
诞生会话表的目的,除了是为了减少工程师配置之外,他更主要是关注到安全性。
如果现在没有会话表【状态检测机制】,那么,你要么粗略的去写安全策略(两个策略T-un Un-T ,动作action permit)
这种情况下就无法起到保护安全的作用,相当于外网上所有的用户都可以访问我内部网络和内部服务器
如果现在没有会话表【没有状态检测机制】【就和包过滤防火墙一样】,假设你去精细化的放行对应服务的IP地址+端口(但是公网上各种服务器的IP+端口太多了,你是不可能放行的过来的)
咱那么搞:Untrust访问内部Trunst区域做精细化划分,允许外网哪个服务访问我的内网服务器,
1、假设将所有可以访问我内网服务器的网段全部放行,假设现在只有百度服务器和腾讯服务器对应的网站、
2、要知道一点,所有大厂的服务器都是多地部署,做主备,假设正好武汉市的百度服务器需要维护,无法提供功能,此时我们访问百度服务器时,可能时其他地方的百度服务器提供业务,我们还需要将其他地方服务器的公网IP地址写上,这个过程很麻烦
3、假设现在不是只有百度和腾讯服务器,现阶段有N个外网服务器,就需要写N个安全策略,一去一回的,相当于要写2N个
4、并且公网上的IP地址和端口号形态各异,可能会定时变化(有些公司是通过运营商PPPOE拨号上网的,IP和端口可能不固定)。在书写安全策略时,困难会进一步增大
怎么样我才能够让一个正常的合法的数据包,既能够通过防火墙出去且回来 ,又能够避免公网上的用户主动访问内部呢?(主动访问内部的流量你无法判断他是合法用户还是非法用户的)
举个例子:
#### 我主动找你加微信,你回我 =好人
#### 我不找你加微信,你主动加我微信 =坏人
多了一个会话表(session-table机制)【display firewall session table】这个表的作用就是我们说的状态检测机制的核心知识点!!!有这个表之后,防火墙就可以去进行**前后文消息关联性的判断了。**
就可以保证主动出去的数据包能够正常回来,与此同时避免了对方主动访问我内部!!
在防火墙上匹配安全策略通过成功之后---也就是允许在在防火墙上通行的流量,才会在防火墙上生成会话表
主要用于控制“单向(单向主动发起)”通信的场景
单向:我主动找你说话,你可以对我进行回应,但是你不能主动来找我,你主动来找我,我必定不吊你
扩展:通过防火墙的会话表,如何判断网络问题:
首先根据防火墙的原理:如果流量可以匹配安全策略(默认除外),正常在不同区域之间转发,那么防火墙上就会生成会话表
上图:最下面有限接入的用户PC1和PC2想要访问互联网中的PC5,在流量访问过程中需要经过两台防火墙。
1、如果防火墙上有会话表但是访问目的地址不通
问题就在防火墙到要访问到目的地址上,这一块网段有问题
2、如果防火墙上没有会话表
1、问题就在防火墙安全策略上,可以查看一下安全策略,看看是否安全策略没有匹配上或者匹配了默认的安全策略
2、问题就在源设设备到达防护墙这一段的网络中。排查一下网络信息
[FW1]dis firewall session table 【查看简要的会话表信息】
2024-01-24 13:09:47.880
Current Total Sessions : 5
icmp VPN: public --> public 192.168.1.1:5644 --> 192.168.2.1:2048
icmp VPN: public --> public 192.168.1.1:5388 --> 192.168.2.1:2048
icmp VPN: public --> public 192.168.1.1:5900 --> 192.168.2.1:2048
icmp VPN: public --> public 192.168.1.1:6156 --> 192.168.2.1:2048
icmp VPN: public --> public 192.168.1.1:5132 --> 192.168.2.1:2048
[FW1]dis firewall session table verbose 【查看详细的会话表信息】
2024-01-24 13:10:12.010
Current Total Sessions : 2
----两条会话内容
icmp VPN: public --> public ID: c387f510c302cf8f4c65b10c30
---描述了一个什么报文,并且VPN的转发流程
Zone: dmz --> untrust TTL【time to live】: 00:00:20 Left: 00:00:17
---描述了那两个安全区域之间互访,TTL---会话表的老化时;----Left会话表的剩余时间,还剩多少秒就要老化
Recv Interface: GigabitEthernet1/0/0
---防火墙从哪个接口接收的报文
Interface: GigabitEthernet1/0/1 NextHop: 192.168.2.1 MAC: 5489-9809-3d14
---从防火墙的哪一个接口发出去,吓一跳IP地址是多少,吓一跳接口的MAC地址是多少,
在这里可以通过防火墙上的入接口和出接口判断流量是在哪两个安全区域之间互访的
<--packets: 0 bytes: 0 --> packets: 1 bytes: 60
192.168.1.1:13068 --> 192.168.2.1:2048 PolicyName: permit_pc1-pc2
---描述了流量的SIP和DIP,并且有SP和DP,并且这条流量允许在防火墙上通过匹配了哪一个安全策略
icmp VPN: public --> public ID: c487f510c302dd01c5d65b10c32
Zone: dmz --> untrust TTL: 00:00:20 Left: 00:00:19
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 192.168.2.1 MAC: 5489-9809-3d14
<--packets: 1 bytes: 60 --> packets: 1 bytes: 60
192.168.1.1:13580 --> 192.168.2.1:2048 PolicyName: permit_pc1-pc2
---这两条流量都是ICMP报文,可以按照上面的分析恩熙下面的东西
问题:为什么防火墙上的会话表突然没了,如果有流量通过防护墙之后突然又有了?
答:因为到点儿就删除了,会话表有时效性,不同协议的流量生成的会话表的老化时间是不一样的
回答这个问题之前,首先需要知道会话表的作用是什么:
就是为了回程流量,可以不用匹配安全策略,就可以通过防火墙,
-----说白了,就是我找你,你回应我可以(回应我时匹配的防火墙的会话表),但是你不能主动找我说话!!!
问题:这个会话表是随心所欲随机删除吗?
答:那肯定不是!那如果是这样的话,出去的包回不来了,那不完犊子了吗。
分为两种情况:
1、如果有一个流量持续经过防火墙一直在在匹配这个会话,那么会话的生存时间就会不停的刷新,那这个会话防火墙是不会删除的。
2、如果一个流量半天没有匹配上这个会话来给我回包的话,也就是在会话的生存时间周期里面都没有流量匹配到这一条会话,防火墙就会把他删除。
可以结合会话表的内容来说: TTL【time to live】: 00:00:20 Left: 00:00:17
比如ICMP的报文生成的会话:TTL值为20,也就意味着生存时间周期为20S ,Left:会话表的剩余时间,
当有流量匹配会话表是,Left时间就会刷新,每次刷新都会和TTL时间相同,并依次向下递减,如果在Left时间减到0这一段时间内,都没有流量匹配会话表,也就意味着会话表会从防火墙中删除
会话表针对各种协议存活时间不同,主要原因是因为各个技术(各个协议)本身工作机制就不相同。
以ping测试举例,ping测试他的保存时间是相对较短的(20秒)因为基本上没有什么需要等待的时间。
以数据库查询举例(tcp 3306端口),我要让你数据库给我查询100W条信息,并且把这100W条信息通过数据包的方式发送回来(那你的数据库需要先在本地查询出结果,才能把数据包发回来呀)
这个查询时间,是根据查询的内容和数量决定的,所以对于数据库来说,这个会话表的默认保存时间必须要长一点,不能说我数据库还没查询完成,会话表过期了,回程流量过不了防火墙了【防护墙给拦截了】,那不是坏事了嘛、
firewall-nat session { { dns | ftp | ftp-data | http | icmp | tcp | tcp-proxy | udp | sip | sip-media | rtsp | rtsp-media | pptp | pptp-data } | { tcp | udp } user-define port-number } aging-time time-value,配置防火墙会话表老化时间。
缺省情况下,各协议的老化时间为:DNS(120秒)、ftp(120秒)、ftp-data(120秒)、HTTP(120秒)、icmp(20秒)、tcp(600秒)、tcp-proxy(10秒)、udp(120秒)、sip(1800秒)、sip-media(120秒)、rtsp(60秒)、rtsp-media(120秒)、pptp(600秒)、pptp-data(600秒
比如FTP-data (120S ):因为FTP数据上传和下载时,如果双穿和下载的是一个大包,时间如果过短,那么文件还没传完,防火墙上的会话就终端了,那么就会导致数据包传输终端,纯纯歇逼了
问题:
假设A和B通过防火墙连接,假设A给B发送报文,生成了会话表,假设A又给B发送报文了,防火墙的会话表是会再生成新的会话还是刷新会话
从两个方面回答:
1、如果再次发送数据包时,数据包的内容没有改变,还是基于第一条数据流的报文【比如FTP控制链接建立过程】,那么只会刷新第一条这条数据流首包生成会话表,并不会重新创建会话表
2、如果再次发送数据包时,数据包的内容改变了,比如发送ICMP报文,一次请求和回应就为一条数据流。
A再给B发送报文时,报文中的DP和SP发生改变,那么就意味着这是一条新的数据流,就会在防火墙上生成新的会话表
其实说白了,就是看数据包的SIP、DIP、SP、DP、协议号等这些信息是否改变了,如果改变了,那么就会生成新的会话表哦
会话表为什么要老化,或者说时防火墙上的会话表为什么会被删除?
前提:需要注意不同型号不同版本的防火墙可以存放的会话表的数量是不一样的
节约设备资源
1、会话表就是为了满足单次通信时,对方的信息能够发回来(不检查安全策略),已经通信完成的情况下,就可以把不用的会话表删除掉,节约设备资源。
什么叫单次通信?:A给B发送数据包经过防火墙,防火墙匹配安全策略成功之后(默认拒绝策略除外),生成会话表,B给A会的数据包,可以不匹配安全策略,直接匹配会话表去访问A。
安全方面
欺骗行为:
2、防止一个通信完成的会话一直保留,被人欺骗使用(只能给我发送合理的上下文能够衔接上的数据包进来)
---什么叫合理的上下文能够衔接的数据包???---就是五元组和会话表的五元组一样,这种欺骗行为的危害性没那么大
恶意攻击:
3、假设有一个人不断的变化的发送数据包,目的就是为了侵占我防火墙的会话表。无法为后续业务通信,导致出现问题。