sullybear 发表于 2010-10-7 12:07:20

l7-filter的原理讨论

l7-filter是一个netfilter的流量匹配模块,采用pat的方式,利用正则表达式描述数据包应用层的内容,去逐个匹配数据包。在匹配过程中,内核需要对数据包完成解包、匹配、封包的过程,会消耗系统大量的资源,而且在匹配阶段,由于pat是以文件的形式存在(应该是加载到了内存中),对于文件的匹配会是一个非常消耗系统资源的过程(ipp2p是直接将pat写到了程序中)。因此,如果进行逐包匹配,会造成严重的性能瓶颈。采用纯粹的l7-filter配合tc的方式在流量稍大的网络中,不但起不到流控的效果,反而造成设备的流量瓶颈。(比如snort官方文档就宣布只支持200M以内的流量,假如我记得没错的话)。

因此,我个人的理解为要把l7-filter理解为数据包识别模块,而非流量匹配模块,也就是利用l7-filter来阻挡特定的、个别的数据包(单个或者少数的数据包),已达到我想要达到的效果(即封堵某类应用软件的效果)。如果只是对少量数据包进行解包、匹配、封包的操作,可有效节省系统资源,避免造成瓶颈。

有人说想要流控呢,我的推荐是panabit,用吧,效果大家都知道。

那么panabit是如何做到性能的效果的呢。我个人的猜测是这样的,其实pa还是采用了“数据包识别”的思想,但是在这个基础上采用四元组进行流控(即官方所谓的节点)。即对少部分非常有特征的数据包采用应用层识别并判断属于哪种协议,再记录四元组写入内存,对剩下的数据包采用四元组匹配的方式进行流控,这样就可以避免逐包匹配。同时还能解决skype这种l7-filter无法处理的加密流量(skype的协议特征非常明显,但是l7-filter无法处理,非得采用连接跟踪和四元组匹配有机状态结合的方式处理)。

以上均为个人理解,可能有误。欢迎讨论。

lanren101 发表于 2010-10-8 11:39:44

为什么没有人顶?看不明白也帮楼主顶一顶。

hackwen 发表于 2010-10-8 18:12:13

不懂.顶一下

tomxo 发表于 2011-4-9 10:22:32

不懂,楼主高深
页: [1]
查看完整版本: l7-filter的原理讨论