安装L7-filter Userspace

layer7很多人都听过,我以前安装layer7未果,今次领导要求限制qq,只好重新研究了一下,特此做了记录跟大家共享。
layer7有kernel版本和userspace版本,相对而言userspace版本不用对内核进行升级和编译,不需要重启。但是使用起来不如kernel的方便,而且对于内核版本还是有一定的要求,因此实在没办法的时候,恐怕还是得用kernel版本的,这里我使用userspace版本,只是供大家参考,毕竟现在软件变化太快了。

安装环境:linux版本rhel4.5,内核版本2.6.18(升级过一次),iptables版本1.3.8
下载必要的包l7-filter-userspace-0.11.tar.gz、libnetfilter_queue-0.0.17.tar.bz2、l7-protocols-2009-05-28.tar.gz、libnfnetlink-0.0.41.tar.bz2、libnetfilter_conntrack-0.0.99.tar.bz2。这些安装包可以从 http://l7-filter.sourceforge.net下到,还有一些可以从 ftp.netfilter.org下载。

软件包安装顺序要注意,除了libnetfilter_queue和ibnetfilter_conntrack可以不分先后,其他请尽可能按照我写的顺序安装。
记住layer7-userspace不是在任何版本的kernel下都可以使用的,另外iptables的版本最好也不要太低,当然太高了也可能有麻烦,看介绍是说最好是内核版本从2.6.14到2.6.19.7之间。有问题的话一定要参考 http://l7-filter.sourceforge.net/HOWTO-userspace。
我的/usr/include/linux/netlink.h文件,在内核从2.6.9升级到2.6.18后,并没有被新版本的内核文件替代,因此我手工替代了一下,将新内核对应的netlink.h替换了老的那个??这是我后来才发现的,中间消耗了我很多时间去解决因这个问题导致的错误。

首先是安装libnfnetlink,你可以在任何目录安装(看你把下载的软件包放在了哪里,我默认在软件包放置的目录下操作):
tar jxvf libnfnetlink-0.0.41.tar.bz2
cd libnfnetlink-0.0.41
./configure
make
make install
安装完毕,开始装libnetfilter_queue(libnetfilter_queue和libnetfilter_conntrack应该是先装谁都行)
cd ..
tar jxvf libnetfilter_queue-0.0.17.tar.bz2
cd libnetfilter_queue-0.0.17
如果这个时候直接./configure,会提示找不到libnfnetlink.pc,这个文件是系统软件pkg-config需要的,因此找到这个文件??安装libnfnetlink的时候它已经生成了,cp到/usr/local/lib/pkgconfig/下(也有可能是/usr/lib/pkgconfig/下,你可以看看你机器上哪个目录下有很多的.pc文件),复制完成后重新./configure,依然可能会报错,诸如无法辨识的参数"URL"之类,编辑一下这个.pc文件,把URL那行注释掉就可以,现在我假设你已经做完了上述的一切事宜。
./configure
make
make install
然后是libnetfilter_conntrack:
tar jxvf libnetfilter_conntrack-0.0.99.tar.bz2
cd libnetfilter_conntrack-0.0.99
./configure
make
make install
完毕,开始安装l7-filter-userspace-0.11
cd ..
tar zxvf l7-filter-userspace-0.11.tar.gz
cd l7-filter-userspace-0.11
此时如果./configure,还是会出现类似提示找不到libnetfilter_conntrack.pc或者libnetfilter_queue.pc的提示,记得怎么安装它俩的吧,如法炮制,找到libnetfilter_conntrack.pc和libnetfilter_queue.pc,复制到/usr/local/lib/pkgconfig/下(也有可能是/usr/lib/pkgconfig/下),修改文件,注释掉URL那行,ok,我假定你已经做完这些步骤了。
./configure
make
make install
现在软件基本算安装完了,需要安装layer7的协议集7-protocols-2009-05-28.tar.gz(你用的时候可能已经很新了)
cd ..
tar zxvf l7-protocols-2009-05-28.tar.gz
cd l7-protocols-2009-05-28
make install
这会在/etc下面生成一个l7-protocols目录,里面放置可以被分辨的协议,你也可以自己定义协议。
现在可以说你已经安装完layer7-userspace了。
现在自己做一个/etc/l7-filter.conf文件,内容比如
qq    9
http    10
根据手册介绍,标记只能从3以后开始打,之前的是系统占用的。另外根据l7-userspace-HOWTO,执行modprobeip_conntrack_netlink,加载新的模块,lsmod|grepcontrack可以看ip_conntrack_netlink的功能被添加。现在执行
l7-filter -vv -f /etc/l7-filter.conf
如果没有报错,证明已经可以使用layer7了。我在服务器上安装的时候,提示我找不到libnfnetlink.so.0、libnetfilter_queue.so.1什么的,还是由于lib的目录有问题,找到这些文件,复制到/usr/lib(也有可能是/usr/include/lib)里面,就没事了。
这个程序的用途是,将每个进入队列的数据包打一个标签,根据我的/etc/l7-filter.conf文件,凡是qq协议的数据包,都会标记为9,http会标记为10。
使用方法如下:我们在iptables中添加这样的记录
iptables -A FORWARD -j QUEUE(这里也可以是iptables -A FORWARD -j NFQUEUE),作用是让某些数据包进入队列然后交给l7-filter处理。
l7-filter -f /etc/l7-filter.conf    //后面可以加-q参数,如果你选择了特定的队列
然后你就可以对被打上标签的数据包做处理了。不过由于这是数据包在经过forward链的时候做了标记处理,因此丢弃的时候只好在iptables的其他位置,比如:
iptables -t mangle -A POSTROUTING -m mark --mark 9 -j DROP
当然一定要在数据包经过FORWARD表以后的位置上处理,不然没有意义了。ok,现在通过你机器转发传送QQ数据包已经被禁止了(我观察了一下,似乎我的MSN同时也上不去了,郁闷!)。

好了,如果有什么问题或者建议(比如对我那段安装libnetfilter_conntrack等三个软件的不堪经历有什么好见解的),大家可以一起探讨。

警告:如果按上述方法还会出现编译错误,那么请更换conntrack和queue版本再试!

queue问题:nfq_test.c找不到nfld_fd,此符号在netlink中有,所以编译时要加载此模块,queue可能在configure时默认没有加入,所以导致了此错误发生。解决方法是:

在其Makefile中的LDFLAGS选项中加入-lnfnetlink,也就是:LDFLAGS=-lnfnetlink!


你可能感兴趣的:(安装L7-filter Userspace)