连接跟踪

2012-11-28来源 : 互联网

Netfilter是第三代防*墙架构,连接跟踪是建立在Netfilter基础上的一个应用实例。为什么需要连接跟踪?连接跟踪被用来记录和跟踪连接的状态,是状态防*墙跟NAT的基础,NAT对内实现IP伪装,对外起到透明代理,负载均衡的作用。不同的协议可以根据自身协议的特点在连接跟踪机制的指导和约束下开发协议本身的连接跟踪功能,*后再统一将其交给连接跟踪机制管理。

连接跟踪在Netfilter的NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT两个HOOK点里以较高的优先级注册连接跟踪入口函数,然后以较低的优先级在NF_IP_LOCAL_IN和NF_IP_POST_ROUTING注册连接跟踪出口函数。入口函数对每个连接的**个报文进行查询,如果这个连接未被记录,则创建一个新的连接,出口函数将未被filter表过滤的连接真正加入到连接跟踪表项上。

连接跟踪以一个tuple(源地址/端口+目的地址/端口)四元组来标识一个连接,连接跟踪会建立两个方向的tuple,Original是主机发送出去的包的连接跟踪,Reply就是其相应回包的连接跟踪。

数据包的连接状态一般有以下几种:

IP_CT_ESTABLISHED:数据包是一个已建立连接的一部分,并且处在初始方向(初始方向为Original)。

IP_CT_RELATED:数据包属于一个已建连接的相关连接,在其初始方向(比如FTP,数据连接就是控制连接的一个相关连接)。

IP_CT_NEW:数据包试图建立新的连接。

IP_CT_ESTABLISHED+IP_CT_IS_REPLY:数据包是一个已建连接的一部分,并且处在响应方向(相应方向为Reply)。

IP_CT_RELATED+IP_CT_IS_REPLY:数据包属于一个已建连接的相关连接,并且处于相应方向。

连接跟踪里*重要的就是连接跟踪表。连接跟踪表是一个记录所有数据包连接信息的Hash散列表,实际上是以数据包的Hash值映射的双向循环链表数组,由全局变量ip_conntrack_hash所指向,节点元素是ip_conntrack_tuple_hash类型的对象,包含源地址/端口、目的地址/端口和协议号。事实上ip_conntrack_tuple_hash是对ip_conntrack_tuple的一个封装,将其组成一个双向链表而已。

连接跟踪表里有一个期望连接的成员变量,作用是当协议通信需要两个连接的时候,期望连接可以让这两个连接联系起来,比如FTP、PPTP、L2TP协议。另外连接跟踪还提供了一个helper功能模块,用来完成对连接跟踪的扩展。允许我们在一个数据包即将离开Netfilter框架时对其进行一些*后的处理。

需要注意的是,连接跟踪和包过滤是两个*立的功能。连接跟踪创建的连接结构并不成为数据包被允许或禁止的依据,只是在过滤的时候可以匹配连接跟踪里的状态进而决定对数据包采取什么操作。可以这样说,连接跟踪只是个基础,就算建立了连接,*后的去留还是要看过滤表中的规则,连接跟踪本身不具备对包的判决功能。这跟一般意义上的状态检测不同(在状态监测中,如果有连接存在,就不检查过滤规则,只进行相应的状态变迁)。这会造成效率上的降低,因为内核不管连接跟踪状态如何,都要去查询过滤规则表来进行下一步操作。并且,数据包的过滤是在NAT目的地址转换之后,源地址转换之前进行的,在添加过滤规则的时候要注意这一点。

 

 

渝ICP备2024022750号-1

Copyright©2004-2024 3158.CN. All Rights Reserved 重庆市上台九悟酒销售有限公司 版权所有

3158招商加盟网友情提示:投资有风险,选择需谨慎