debian环境下 l7-filter 的安装教程
debian环境下 l7-filter 的安装教程
本文欢迎大家转载,请保留作者信息。
请注明转自linuxsir.org,作者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/patch-o-matic-ng/snapshot/patch-o-matic-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/sourceforge/l7-filter/netfilter-layer7-v1.3.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-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
完成。
有什么问题或错误欢迎大家批评指正。
本文欢迎大家转载,请保留作者信息。
请注明转自linuxsir.org,作者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/patch-o-matic-ng/snapshot/patch-o-matic-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/sourceforge/l7-filter/netfilter-layer7-v1.3.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-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
完成。
有什么问题或错误欢迎大家批评指正。