(一)下载相应的内核、内核补丁包、iptables源代码、源代码L7补丁。并做好编译内核前的准备:
1、下载相应补丁包,linux内核补丁版本一定要与所下载内核版本号一致,否则打内核补丁时出现找不到文件提示!我
之前就犯下了这个错误!
l7-protocols-2008-10-04.tar.gz iptables源代码补丁包
linux-2.6.25.tar.bz2 linux内核源代码
netfilter-layer7-v2.20.tar.gz L7内核补丁包
iptables-1.4.2.tar.tar iptables源代码
2、将他们cp到/usr/src目录下并解压缩,相信大家都会
3、建立符号链接
ln -s linux.2.6.25 linux
(二)给内核打补丁(在新内核源码目录运行)
1、刚开始我下载的是2.6.27的内核,觉得最新的就是最好的,可是没想到内核补丁文件还没出来支持2.6.27的,所
以走了一段弯路,先把走弯路的错误提示写给大家以防以后出现此提示不知道什么原因:
打补丁命令:
patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
报错如下:
[root@ftp2 src]# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- linux-2.6.25/net/netfilter/Kconfig 2008-04-16 21:49:44.000000000 -0500
|+++ linux-2.6.25-layer7/net/netfilter/Kconfig 2008-04-29 00:40:01.000000000 -0500
--------------------------
File to patch:
原因在于补丁包内没有我的2.6.27的补丁,就吧2.6.25补丁打进去,最后结果就报错了呵呵!
2、接下来说一下正确的操作。经过“广告杀手”的提示,我下载了2.6.25的内核并按照上面的命令打补丁,一切OK
打补丁命令:
patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
(三)给内核打补丁、编译新内核
1、进入到刚解压完成的内核源码目录执行(如果原来编译过执行make clean 和make mrproper):
make oldconfig
网上说这个命令是这个意思:make oldconfig会自动对比之前的kernel config,根据之前版本的配置生成一个kernel
config,这样方便我们在编译新核心的时候,无须在从头修改所有的核心设置 。运行完命令后会出现很多询问你的选项
,不知道的就回车(很多,好像是询问新内核与老内核模块的差异是否安装),不要盲目回车,后面有关于Layer 7的模
块千万不要跳过,否则白忙活了!
2、make oldconfig顺利完成后用make menuconfig命令查看一下Layer 7内核模块是否已经选上了。我的2.6.25的位置
在
NETWORKING-->NETWORKING OPTIONS-->Network packet filtering framework(Netfilter) -->Core Netfilter
Configuration-->Layer 7 match suppport
如果有了Layer 7模块选项了就OK了,这步完成了
3、编译内核
make 编译内核
make modules 编译模块
make modules_install 安装模块
make install 安装内核
这几步我这里没有遇到什么问题,也许算幸运吧 呵呵。内核编译完成!重启,要注意在启动是grub上默认是进入老内
核版本,最好直接连接到服务器,grub出现时选择新编译的内核,我的是2.6.25。如过是ssh远程连接编译的内核要注
意了。
这样内核编译完成,进入下一步给iptables打L7补丁。
(四)最后一步!给iptables打上L7补丁,并且安装iptables 1.4.2
1、进入到iptables的源码目录,将/usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward目录下的
libxt_layer7.c libxt_layer7.man 这两个文件拷贝到/usr/src/iptables-1.4.2/extensions目录下
2、进入到/usr/src/iptables-1.4.2/extensions目录下,执行
chmod +x layer7-test 不知道为什么呵呵,尽管执行
3、进入到iptables1.4.2源码目录执行以下命令给iptables1.4.2打补丁,由于没有针对我的2.6.25的补丁,所以就装了最新的2.6.20,其他版本的补丁没有试过
patch -p1 < ../netfilter-layer7-v2.20/iptables-1.4-for-kernel-2.6.20forward-layer7-2.20.patch
4、接下来就是安装打好补丁的iptables1.4.2了,进入到iptables1.4.2源码目录,执行以下命令:
./configure --with-ksource=/usr/src/linux/
make KERNEL_DIR=/usr/src/linux
make install
不出意外的情况下应该OK
5、安装iptables1.4.2的Layer7 协议文件
cd l7-protocols-2008-10-04
make install
如果没报错就大功告成了,下面进行测试
6、最后执行个过滤规则看是否正确
iptables -t mangle -I PREROUTING -m layer7 --l7proto edonkey -j DROP
如果没报错说明正确
到此,iptables layer 7模块已安装完毕。
文章出处:DIY部落(http://www.diybl.com/course/6_system/linux/Linuxjs/20090317/161968.html)