Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1371420
  • 博文数量: 244
  • 博客积分: 10311
  • 博客等级: 上将
  • 技术积分: 3341
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-14 21:50
文章分类

全部博文(244)

文章存档

2013年(6)

2012年(5)

2011年(16)

2010年(11)

2009年(172)

2008年(34)

分类: LINUX

2009-03-16 19:22:28

(一)下载相应的内核、内核补丁包、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模块已安装完毕。
阅读(2783) | 评论(5) | 转发(0) |
0

上一篇:Linux下双网卡绑定

下一篇:大端\小端模式

给主人留下些什么吧!~~

chinaunix网友2009-07-04 08:33:45

参考一篇英文文档的说明: * notice do not patch the patch "iptables-1.4-for-kernel-2.6.20forward-layer7-2.20.patch" for iptables 1.4.1.1 and newer. if you do that there is an error will be appear: libipt_layer7.c: In function 'help': libipt_layer7.c:41: error: 'IPTABLES_VERSION' undeclared (first use in this function) libipt_layer7.c:41: error: (Each undeclared identifier is reported only once libipt_layer7.c:41: error: for each function it appears in.)

chinaunix网友2009-07-04 08:32:28

呵呵,这一步开始按他的步骤弄了很久,iptables都make不过去,后来重新解压一份iptables安装包,手动复制libxt_layer7.c libxt_layer7.man 这两个文件拷贝到/usr/src/iptables-1.4.2/extensions目录下再编译,就OK了

newcch2009-07-04 08:08:27

打补丁的目的(个人认为)只是为了能编译出相关的模块如iptables_nat.ko等,所以我修改源码也围绕这个目的,最终编译出所需的模块,iptables能正常进行SNAT、DNAT。如有需要多交流。

newcch2009-07-04 08:05:02

该文档是网上转载的,我用的2.6.21版本没打此补丁,修改了内核相关地方,iptables能正常进行SNAT、DNAT。

chinaunix网友2009-07-03 17:25:10

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 你上面这一步有些多余了,而且执行了这一步,make的时候会报错: libipt_layer7.c: In function 'help': libipt_layer7.c:41: error: 'IPTABLES_VERSION' undeclared (first use in this function) libipt_layer7.c:41: error: (Each undeclared identifier is reported only once libipt_layer7.c:41: error: for each function it appears in.)