LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5630|回复: 20

debian环境下 l7-filter 的安装教程!bt类p2p软件的克星。

[复制链接]
发表于 2005-5-22 16:25:18 | 显示全部楼层 |阅读模式
debian环境下 l7-filter 的安装教程

本文欢迎大家转载,请保留作者信息。
请注明转自linuxsir.cn,作者memory。

l7-filter(Application Layer Packet Classifier for Linux)是linux下的开源项目,它是基于应用层数

据识别的分类器。它可以分类数据包而不管你使用的是哪些端口,这对那些经常变换端口的网络应用进行

数据流整形非常有用。l7-filter已经开发到v1.3版,功能已经比较完善。它以kernel、iptables的补丁的
形式提供的,尚未合并到kernel的源代码中。

debian linux是当前流行的几大linux发行版之一。它的优势就是其有着强大的软件包管理工具集,能够很

好的自动解决软件包之间的相互依赖关系,以及便捷的升级方式。本文将介绍怎样以debian的方式来安装

使用l7-filter。



1、安装编译相关工具
apt-get install debhelper kernel-package fakeroot libncurses5-dev bzip2



2、获取源代码

(1)获取debian官方源代码包(unstable)
cd /usr/src
apt-get source kernel-image-2.6.11-686
apt-get install kernel-tree-2.6.11
apt-get source iptables

iptables的当前debian官方版本是1.2.11。下载debian的iptables源代码是为了使用其编译脚本,后边会

介绍。


(2)到iptables主页下载最新版本,官方主页http://www.netfilter.org。下 ... 使用得版本:
wget http://ftp.netfilter.org/pub/pat ... ng-20050520.tar.bz2
wget http://ftp.netfilter.org/pub/iptables/iptables-1.3.1.tar.bz2


(3)layer7 filter 官方主页下载补丁和协议定义包,主页http://l7-filter.sourceforge.net/
wget http://jaist.dl.sourceforge.net/ ... -layer7-v1.3.tar.gz
wget http://jaist.dl.sourceforge.net/ ... s-2005-05-19.tar.gz

解开这两个包:
tar -xzf netfilter-layer7-v1.3.tar.gz
tar -xzf l7-protocols-2005-05-19.tar.gz



3、准备编译iptables

(1)拷贝新版本源代码到debian的iptables源代码目录中:
cp patch-o-matic-ng-20050520.tar.bz2 iptables-1.3.1.tar.bz2 kernel-source-2.6.11.tar.bz2

iptables-1.2.11/upstream


(2)修改debian脚本
cd iptables-1.2.11
vi scripts/prep.sh
修改下面几行为:
iptables="iptables-1.3.1"
pomng="patch-o-matic-ng-20050520"
kernel="kernel-source-2.6.11"

找到下面两行:
unpack "$ipset"
> ${build}/ipset/Makefile

在其后添加:
(cd "$iptables_profectio"; \
  patch -p1 < /usr/src/netfilter-layer7-v1.3/iptables-layer7-1.3.patch; \
  chmod o+x extensions/.layer7-test;
  > ippool/ippool)
(cd "$kernel_profectio"; patch -p1 <

/usr/src/netfilter-layer7-v1.3/kernel-2.6.11-layer7-1.3.patch)

上面几行在脚本运行时将会把iptables和kernel的layer7 filter 补丁打上。

iptables编译时有个小问题,一直没能很好的解决,那就是修改后的源代码编译时总是不能编译出ippool

这个工具,不知为何。但debian在给编译结果打包时总是要找这个东西。无奈,我只能采取欺骗的手法,

先在ippool目录中建个假的ippool完事。这也就是上边:
> ippool/ippool
这一句的用意。


(3)修改debian的iptables版本
vi debian/changlog
修改第一行为:
iptables (1.3.1-1) unstable; urgency=medium
编译后iptables的debian包版本就是1.3.1-1


(4)去掉1.2.11版iptables的patch,因为现在用的是1.3.1版的:
cd patches
mv all all.old
mkdir all


(5)编译iptables

make binary

如果不出什么异常的话,/usr/src下应该多出两个叫iptables_1.3.1-1_i386.deb和iptables-dev_1.3.1-1

_i386.deb的包,这就是编译成果。

注意:这一步会因为kernel以前打过一些补丁出现问题,直接回车跳过即可。



4、编译kernel

(1)拷贝iptables编译时使用的kernel源代码
cd /usr/src/kernel-image-2.6.11-i386-2.6.11
cp -R ../iptables-1.2.11/debian/build/kernel-source-2.6.11 .


(2)kernel编译的准备工作
vi debian/rules
找到下面这一行:
       tar jxf /usr/src/kernel-source-$(version).tar.bz2
改为:
#       tar jxf /usr/src/kernel-source-$(version).tar.bz2
实际就是注释掉,因为源代码我们已经从iptables目录中拷贝过来了。

删除不必要的配置文件,只保留你需要的平台配置。比如我只保留686、686-smp和default配置:
rm ./config/k7* ./config/386

如果你不删除,rules脚本将为每个配置建立相应的build目录。每个配置文件都是以面对平台的处理器命

名的,如386、686、k7等,而且要为每种配置编译生成相应的debian包,很耗时间。

运行debian脚本:
./debian/rules unpack

这步结束后,多出几个目录形如:build-686、build-686-smp,default对应的就是kernel-source-2.6.11

目录。目录个数是根据具体配置来的。


(3)为每个平台配置kernel
以686为例:
cd build-686
make menuconfig
进入
Device Drivers  --->
  Networking support  --->
    Networking options  --->
      Network packet filtering (replaces ipchains)  --->
        IP: Netfilter Configuration  --->
          <M>   Layer 7 match support (EXPERIMENTAL)

记住:为每个你需要编译的平台作上面这一步,否则在编译是会停在那里等你确认。


(3)编译kernel
cd /usr/src/kernel-image-2.6.11-i386-2.6.11
./debian/rules binary-arch

要是没什么异常的话,在上级目录中将为每个平台建立了各自的.deb包。



5、安装

(1)安装l7 protocol
cd l7-protocols-2005-05-19
make install

这一步很简单,实际就是把这个整个目录拷贝到了/etc下


(2)安装iptables
cd /usr/src
dpkg -i iptables_1.3.1-1_i386.deb
dpkg -i iptables-dev_1.3.1-1_i386.deb


(3)安装kernel
dpkg -i kernel-image-2.6.11-1-686_2.6.11-3_i386.deb



6、测试成果

禁用bt的iptables规则:
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j DROP

官方howto不建议上边的这种用法,因为l7的协议定义实际上就是正则表达式,有的数据包可能会匹配多种

协议,造成误判。他建议用tc工具分配一个带宽很窄的通道,将那些不期望的数据都定向到此通道。具体

说法和用法还是参照其主页howto。



7、禁止升级kernel、iptables软件包

测试无误后,使用包管理命令禁止更新这两个包:
echo iptables hold | dpkg --set-selections
echo kernel-image-2.6.11-1-686 hold | dpkg --set-selections


完成。

有什么问题或错误欢迎大家批评指正。
发表于 2005-5-22 18:14:50 | 显示全部楼层
不错的东西,sp啊。不过。为什么不直接用官方的内核,那样才更有代表性。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-22 21:16:21 | 显示全部楼层
Post by faint
不错的东西,sp啊。不过。为什么不直接用官方的内核,那样才更有代表性。。。

用linux做软路由的毕竟是少数,而且l7-filter也刚刚稳定,所以还没有纳入到内核源码中。等到l7稳定一段时间后,我想会归到内核中的。
回复 支持 反对

使用道具 举报

发表于 2005-5-23 00:01:25 | 显示全部楼层
偶很早就关注l7了,可惜偶怕编译这东西,内核和iptables又要重新编译过。Debian官方有就方便了。
转到网络与服务器版本吧,那里讨论这方面的比较多些。tc对bt方面好像不也不太行。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-23 17:01:39 | 显示全部楼层
我前边已经说过了,我采用的就是debian官方的编译方法,而且使用的也是官方配置,所以编译出来的kernel应该说就是官方的,只不过增加了l7的补丁而已。如果你有耐心,那就慢慢等官方的带有l7补丁的kernel吧,我相信会很漫长。
回复 支持 反对

使用道具 举报

发表于 2005-6-2 10:53:47 | 显示全部楼层
推荐meomry大虾看看morph-sources 2.6.11-morph10 "Dante":
As promised here's another update for the 2.6.11 series. Changelog:
software-suspend-2.1.8.9-for-2.6.11
made the ACPI patch optional
inotify-0.23-rml-2.6.12-rc4-8.patch
updated to linux 2.6.11.11
updated l7 patch to 1.4
added schedbatch and schediso from ck

项目主页:http://morph-sources.sourceforge.net/
下载地址:http://sourceforge.net/projects/morph-sources/
回复 支持 反对

使用道具 举报

发表于 2005-6-2 15:48:11 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-2 23:33:55 | 显示全部楼层
嗯,不错,又多了几种选择。
回复 支持 反对

使用道具 举报

发表于 2005-6-3 09:02:04 | 显示全部楼层
好文章,建议加精。可惜是unstable的,不知道能不能在sarge上做。

要不我也留个位,日后好找。:-)
回复 支持 反对

使用道具 举报

发表于 2005-6-13 09:51:24 | 显示全部楼层
我用2.6.8的源代码来编译的,做好后我把qq关闭,发现屏幕一直跳layer7: out of memory in match, bailing,不知道谁有没有这个的解决经验??
我在编译的时候设置CONFIG_IP_NF_MATCH_LAYER7_MAXDATALEN=10240(默认是2048),不知道是不是这个不够大造成的,那个CONFIG_IP_NF_MATCH_LAYER7_DEBUG我就没敢设置了,设置后会使系统变得很慢。


嗯,确实不能去做猜想,CONFIG_IP_NF_MATCH_LAYER7_MAXDATALEN这个值使用默认的就好了,要不也许会有意想不到的麻烦。
我又编译了内核,,晕啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表