首先是安装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同时也上不去了,郁闷!)。