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

再谈会话现在IP网络里面离不开TCP、UDP这两种传输层协议,主流应用都基于这两种协议来做封装传输,对于TCP来说,在发送实际数据的时候必须先建立可靠的连接,俗称 ”三次握手”,而UDP则不需要建立连接,它有数据就直接发送出去 。当然除了这些协议以外,网络层用的比较多的ICMP、ESP、OSPF、BGP等协议,这就要求防火墙能够分析各种协议的交互模式,能够准确的识别并且建立会话信息,我们来了解了解这些常见主流协议的会话建立,对于后续排错是很有帮助的 。
 
对于TCP在防火墙上的会话建立上面说过TCP的建立需要双方进行三次会话交流,也就是“三次握手”的过程,我们来看防火墙是如何建立会话的 。

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

文章插图
 
对于一个正常的网络构建TCP建立,首先进行三次握手
(1)Client发送SYN(序列号假设为a),防火墙收到这个报文后会检查是否符合TCP协议规范,并且看安全策略是否允许该报文通过,通过后开始建立会话信息,并且实时关注后续的建立过程 。
(2)服务器回应,发送SYN+ACK(seq=b,ack=a+1),其中ack用于确认已经收到来自于Client的SYN,表示已经收到了,服务器也会发送SYN来与Client进行建立同步会话,这里序列号为b
(3)防火墙收到这个报文后检查会话表发现是来自于刚建立(1)会话表的同一个会话,直接允许通过,Client收到后,回应服务器一个ack(b+1),表示已经收到了,发送出去,防火墙发现整个TCP会话建立已经完成,会把TCP的状态变成established,表示整个TCP建立完成,等待实际数据发送 。
 
结合抓包跟状态表查看就是
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
  1. (整体的配置与案例引用第五篇的配置)

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

文章插图
 
首先Client 192.168.1.1往192.168.2.1发送SYS,seq=0,服务器收到后回应ACK1(对应Client发过来的SYN的seq=0+1),并且也同时发送一个SYN给客户端seq=也是0,客户端收到后直接回复ACK=1(对应服务器发送过来的SYN),最终会话建立,开始发送HTTP实际访问 。
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
总结:TCP连接的首发标志就是SYN报文,防火墙在状态检测开启的情况下,在收到TCP的SYN首包情况并且安全策略允许的情况下就会创建会话信息 。
对于UDP在防火墙上的会话建立UDP对于TCP来说就简单很多了,它是没有连接状态的协议,在防火墙上面的话则只要安全策略允许通过,则会直接创建会话信息 。
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 

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

文章插图
 

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

文章插图
 
对于ICMP在防火墙上的会话建立ICMP的类型非常多,我们常用的比如ping、tracert都属于ICMP范围,ping的话有两种主要的类型,一个是echo request(回显请求报文)、一个是echo replay(回显应答报文),在状态开启的情况下,防火墙收到来自于echo request(回显请求报文),并且安全策略允许的情况下,就会建立会话,如果防火墙没有收到ping的回显请求,却收到了ping的回应报文,那么会话是不会建立的,直接丢弃 。
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 

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

文章插图
 
这里注意下,ICMP是网络层协议,没有端口号的,但是防火墙会把ICMP报头中的序列号字段作为源端口号,以固定值2048作为会话的目的端口号 。
异步路由导致来回路径不一致的场景
防火墙对TCP/UDP/ICMP协议报文处理方式

文章插图
 
正常情况下,数据包的来回路径是保持一致的,这样是很正常,但是也存在特殊的环境,比如跨运营商或者是网络规划以及配置上的失误导致了来回路径不一致的情况出现,那么出现了这种情况,会遇到什么样的问题呢?(这个也是第五篇最后提的一个问题),我们来实际验证下 。
 
实验拓扑根据自己想实验难度的来搭建
防火墙对TCP/UDP/ICMP协议报文处理方式


推荐阅读