历经1天多的实验终于把l7 filter 的安装给搞定了。
总结一下,以后会用到。

不得不说Iptables 有了l7 filter 的支持以后管理网络会变得更加轻松。

封杀QQ,迅雷等用不着忙着找端口号,封IP,忙活了好就,下个版本已更新发现又得重新来。其实不用l7 filter也挺好的,

看喜好吧。

先说下,我是根据这个网站做出来的,期间遇到小小麻烦,所以才决定整理一下。(http://waringid.blog.51cto.com/65148/290886/)

首先你要知道你安装的Linux版本,我用的是CentOS6.4 在官网下载了一个nimiIOS安装的。

安装之前要注意这么几个事情:

1:分区格式的问题,要知道,l7 filter支持的内核目前只到2.6.28现在的CentOS6都是2.6.33以上。

   在CentOS5时代支持ext4分区格式吗?不支持。

   因此,我在此次实验中编译了N次内核成功之后,打算看到成功的喜悦,但是呢?启动不起来了.../boot分区读不出来,不支持ext4我之前是默认安装的,带LVM逻辑卷的,所以懒得说那些了,反正与ext4有关嘛。

我也不知道能不能把分区格式全改了,直接重装了。要知道编译一次内核1个多小时啊...(电脑配置不高,怀念之前的i5CPU了...)

2:如果用CentOS5安装(我用的是CentOS5.5x64没任何问题)就不遇到编译上的错误,编译的时候提示缺少gcc。。。什么什么的都不是事,装上重新编译就完事了,如果不是缺少这些而报错了?...用CentOS6版本的要做好准备。


开始:

    下载安装包:
      http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2
wget http://netfilter.org/projects/iptables/files/iptables-1.4.7.tar.bz2
wget http://downloads.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz?use_mirror=nchc
wget http://downloads.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz?use_mirror=nchc

     这几步跟上面的连接都一样,步骤也都一样,大家参考。

     简单说下步骤,第一件是要搞定内核,我在l7 filter官网上下载不到document,不知道怎么回事,也很想知道第一个吃螃蟹的人是咋吃的。
     内核咋搞定?
     先解压,同时把netfilter-layer7-v2.22.tar.gz也解压了。

     进入linux内核解压的包中,打上layer7补丁。这样编译内核的时候才能选择支持layer7这个选项。
     打完补丁之后,再make menuconfig选择支持的模块。
     然后make modules
         make module_install
         make install
     没有报错就是成功了。

----------------不要把事情想的复杂,要明白,第一件事搞定内核---------------

内核安装完成之后,重启系统。

在选择内核版本的时候选择刚刚安装的内核启动系统。

启动起来了就可以happy了。后面的事情就很简单了。


---------------卸载老版本Iptables-----------------

卸载之前做好备份工作,把你的老Iptables策略导出来,方便以后导入。

iptables-save > /root/date

date就是备份文件

还有就是备份/etc/init.d/iptables 文件,当时忘了备份了,唉,好后悔啊。

卸载:rpm -e --nodeps `rpm -qa|grep iptables`

--------------安装Iptables---------------
解压Iptables ,把netfile。。。。文件夹里的相关文件复制到iptables解压包的extents目录下

cp /root/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/*  /root/iptables-1.4.7/extensions

然后编译安装
./configure --with-ksource=/root/linux-2.6.28(指定内核源码包)

make

make install

-----------------安装l7*****----------------
解压l7-protocols-2009-05-28.tar.gz
cd l7-protocols-2009-05-28

make install

ok,这个就装好了

---------------------不出意外你的新的Iptables安装好了把该还原的东西都还原吧-------------

---------------------CentOS6编译遇到的错误--------------

如果你最小化安装的,这个在编译内核的时候会提示你安装好多东西。

比如gcc 比如perl 还有make  还有patch 还有个忘了,反正提示的很详细。

这不是重点,重点是该装的都装上之后编译了半个小时报了个错误。这是最要命的。

报错如下:

scripts/unifdef.c:209: error: conflicting types for ‘getline’,/usr/include/stdio.h:651: note: previous declaration of ‘getline’ was here


这个错误在网上也能找到解决办法。不过不大好找。

好了,直接说解决办法。(感觉这个才是我写此文的最终目的)。

在Linux内核解压里找到scripts这个文件夹
进入,找到一个名字为 unifdef.c的文件,好的,用vi编辑它。
找到209行,你会找到错误中提示的getline关键字,把它改了,改成parseline
这时候再输入make 继续编译,它又报错了,呵呵,看到它提示的行号了没?

看到了就照着行号改(vi编辑模式下,显示行号命令,在命令状态下输入:set nu)

好了,一共3处,改好之后就ok了,编译不会出错,顶多有几个warning.

接着就执行make modules吧~~哈哈~~

有说要改grub.conf文件,我没改,手动选择。

好了,最后要说的是,看l7 能封杀那些协议,在/etc/l7-protocols/protocols里面

另外,此规则能加在iptables FORWARD 链上,貌似POSTROUTING加不上,PREROUTING能加上吧。

以后慢慢试试吧。上面连接说的很明了了。

就这些。