暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

防火墙实现原理

生有可恋 2022-02-11
2202

防火墙的实现原理有两种,其中一种是包过滤,另一种是会话过滤。这两种不同的技术,在写防火墙策略时差异会非常大。


先说一下会话是什么,会话是对tcp数据传输过程的封装。我们知道 tcp 连接的建立有三次握手,然后开始传数据,最后有四次挥手断开连接。这个数据传输的过程就是会话。


网络防火墙一般都是基于会话过滤技术的,也就是说一个会话如果满足防火墙策略,这种情况我们称做策略命中。策略命中后,这个会话就会按照策略的放行要求进行放行或阻断。对于一个会话中的数据包来说,是有来有回的,但我们只需要一条策略就可以让会话过程维持下来,而不需要写两条相反方向的防火墙策略。


我们举个例子,比如放行 samba 文件共享服务



此时的策略是按目的地址+目的端口进行放行。此时不管数据包是从服务器到客户端,还是由客户端到服务器,只要满足目的地址+目的端口的规则要求,会话就会被放行。


如果按照数据包的传输方向,一个会话包含来来回回的两个方向的数据包,一台主机的IP地址,即可能是目的地址,又可能是源地址。所以在网络防火墙中,目的地址是指会话中的目的地址,只要会话满足策略放行要求,会话中回去部分的数据包是不会被策略阻断的。


也就是说只用写一条策略就可以让会话保持畅通了,不用再写一条相反方向的允许策略。


从包的传输上只能看到源地址和目的地址,这个定义了包的传输方向。从会话上来看,一个会话有发起者,有响应者。发起者的数据包中的目的地址就是会话中的响应者,响应者的数据包也有源地址和目的地址,但此时会话中的角色,它是被动的,它不是会话的发起者。



从网络防火墙的会话监控上也能看出它的逻辑,网络并不是按照包过滤,而是按照会话进行过滤。所以一条策略就可以起到控制会话的作用,如果写两条允许策略就有点多余了。


如果强行写两条方向相反的策略,会发现策略的命中上,上一条策略已经全命中了,后面一条相反方向的策略完全没有命中,也就是全被上一条策略拦截了。



第二种防火墙是基于包过滤技术,这种技术更原始,它没有会话的概念。一个数据包过来的,会被拆解成包头和数据。包头中含有源地址、目的地址、源端口、目的端口。数据包从外面进来,这种包叫做入站,从主机出去,把出去的包叫出站。比如 iptables,里面有 INPUT 链 和 OUTPUT 链,分别代表一个包从外面进到主机和从主机出去。



基于包过滤的防火墙为了让一个会话完整,必须入站、出站都放行,也就是要写两条放行策略,不然数据包进来就出不去了,会话就断了。


所以在写防火墙策略时,首先要评估的就是防火墙是基于会话放行的,还是基于数据包进行放行的。会话过滤技术是在包过滤技术的基础上做了封装,把数据包基于会话的角色分为发起者和响应者。在数据包层面只有源地址和目的地址,没有会话中发起者的概念。

文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论