防火墙对TCP/UDP/ICMP协议报文处理方式( 二 )


文章插图
 
难度一点的,这个环境实现其实比较简单的,防火墙策略全放,然后写静态去往server1指向ISP2,而回Client的流量边界指向ISP1,这样就来回路径不一致了,但是这个有点太繁琐了,所以博主这里比较推荐大家用一个简单点的拓扑 。

防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
PC去往服务器的时候直接通过路由器抵达,而返回的数据包,则路由器利用策略路由特性强制它交给防火墙,防火墙在写192.168.1.1的路由指向10.1.1.1交给路由器,形成一个路径不一致的环境,策略可以全放 。(具体步骤就不在给出了,购买课程了的朋友可以直接看视频讲解,留言处有环境源文件提供,都可以直接参考)
 
实际测试下(分别抓取E0/0/1以及G1/0/0 10.1.2.2接口的包,这里图上面显示错误了,实际G1/0/0在上面 G1/0/1是下面的口)
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
首先客户的发起访问,这个结果肯定是失败的 。
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
可以发现,路由器上面能够看到客户端发起的SYN建立,以及服务器回应的SYN+ACK,而防火墙上面只收到了SYN+ACK 。
 
这个时候数据转发路径与处理情况就是这样
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
(1)Client1发起TCP首包SYN建立,交给路由器处理
(2)路由器查询路由表直接丢给Server1
(3)Server1回应SYN+ACK,在路由器返回的时候,由于对接服务器的接口调用了策略路由,它会把这个数据包强制的交给10.1.2.2处理,这个时候防火墙收到后发现会话表并没有存在该数据包的匹配信息,而且这个包不是TCP的首发SYN包,则直接丢弃 。
 
导致这个丢弃的原因我们在上面已经深入了解了防火墙对于TCP建立会话的前提条件就是收到的包必须是首发SYN的包,而这里防火墙收到的是首发是SYN+ACK,那么防火墙则直接不予处理丢弃掉 。那么在实际中真的遇到这样的情况了,防火墙也是可以处理的,由于状态检测机制的存在,它会检测各种协议的特征与是否规范,我们可以关闭这个功能,防火墙就不会对连接的状态进行分析,就相当于包过滤的策略一样,后续报文只要有安全策略允许,则直接通过 。
 
[USG6000V1]undo firewall session link-state check :关闭很简单,一条命令搞定,这里博主提醒,关闭状态检测功能,防火墙就失去了它的魅力所在了,除非在一些特殊的环境,不建议关闭这个功能 。
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
这个时候客户端访问成功了 。
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
防火墙的会话表会发现,收到的为0,发出去的有数据,这是因为Client1发送的流量直接路由器转发给服务器了,服务器回应的流量才经过防火墙,所以出现了这种特殊的状况 。
 
总结TCP/UDP/ICMP协议会话创建的情况会话创建的情况包括开启状态检测机制与关闭,上面TCP已经验证完毕了,也可以趁着这个环境验证下UDP与ICMP,博主就不在演示了,这里给出一个总结。
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
建议大家可以在开启与关闭下测试测试TCP、UDP、ICMP协议的情况,对于大家在学习状态检测、会话机制有很大的帮助,也为排错提供了一个很好的思路 。
 
博主经验分享在实际中如果遇到了特殊环境,确实需要关闭状态检测的情况下,但是关闭状态检测防火墙就回到了传统的包过滤时代功能了,防火墙提供了一个非常好的功能,就是可以指定某些流量关闭状态检测,其余的保持不变 。
#
acl number 3000
rule 5 permit ip source 192.168.2.1 0 destination 192.168.1.1 0
#
firewall session link-state exclude acl 3000
#
firewall session link-state check
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
可以看到这个功能就很实用,带来的风险也不大,对于特定会话存在这种情况的,用ACL匹配出来,可以利用exclude来关闭状态检测,这样的话对应ACL的不启用状态检测,其余的还是会启用 。
WEB操作关闭状态检测


推荐阅读