给你的主机防火墙添加l7-filter
 
     linux系统自带的防火墙也可以起到过滤字符串或特定的报文的共能,但是其过滤能力远远有限,不能进行一些 常用协议及软件的过滤,如大家最熟悉的QQ、p2p下载协议等,l7-filter 便为我们的防火墙提供了更加强大的 过滤功能,对于过滤常见的软件或协议来说不仅不费吹灰之力,操作还极其方简单。
     我们先来认识一下l7-filter
     l7-filter即7层过滤器,L7过滤器是一个软件包,它提供了对Linux的Netfilter的子系统可以基于互联网协议 , 在他们的数据包的应用层数据进行分类的分类。 这个工具的主要目标是使尽可能的识别点对点等节目,使用不 可预知的端口号,正因它是为后来才给linux的Netfilter一个软件包,所以我们要为linux的内核选择相对应的l7 软件包,对内核打l7补丁,然后重新编辑内核,开启相应的模块功能,因为l7是对iptables的功能提升,也需要 对iptables打补丁、重新编译,最终我们再安装一个协议包,这个协议包里包含了l7能够进行过滤的协议即可。
      需要准备的压缩包:
      1、linux-2.6.28.10.tar.gz   因l7的版本对内核版本的限制,内核的版本不要过新。
      2、iptables-1.4.6.tar.bz2    iptables的源码安装包
      3、netfilter-layer7-v2.22.tar.gz l7的源码安装包
      4、l7-protocols-2009-05-28.tar.gz  l7的协议包
 
我们直接开始操作:(说明:只要没有明确操作目录,就不必切换目录)
一、对内核的工作
   1、解压内核和内核补丁:
         tar xvf linux-2.6.28.10.tar.gz -C  /usr/src 
         tar xvf netfilter-layer7-v2.22.tar.gz -C  /usr/src/
         进入工作目录
         cd /usr/src/ 
         创建linux-2.6.28.10的连接linux(关于内核编译的步骤及原理在我博客中有相关的文章,在此不再重复)
         ln -sv linux-2.6.28.10 linux
         cd linux
     2、给内核打补丁
          patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch 
     3、重新配置、编译、安装内核    
          拷贝一个内核配置的样本
          cp /boot/config-2.6.18-164.el5 .config
          make menuconfig 
          根据对内核的配置进行如下修改    
          进入Networking support  --->Networking options  --->Network packet filtering framework (Net filter)  --->  Core Netfilter Configuration进行如下修改
          <M> Netfilter connection tracking support
          <M>   "string" match support                                          
          <M>   "time" match support 
          <M>   "layer7" match support 
          <M>iprange" address range match support
          <M>   "connlimit" match support
          <M>   "state" match support
          <M>   "conntrack" connection tracking match support
          <M>   "mac" address match support
          <M>   "multiport" Multiple port match support 
          进行完相应的修改之后则保存退出
           编译、安装内核
           make                   编译模块
           make modules_install   安装内核模块
           make install           安装内核
     3、测试新编译的内核      
           用新编译的内核重新启动系统,当系统能正常启动之后再进行下面的操作,不然将出现错误提示。
二、编译安装iptables
     1、备份系统原有的iptables启动脚本和配置文件
           cp /etc/init.d/iptabless ~/iptables  将iptables的启动脚本备份至家目录
           cp /etc/sysconfig/iptables-config ~/  
     2、卸载系统原有的与iptables有关的rpm包
           rpm -e iptables-ipv6 iptables iptstate --nodeps
     3、解压、编译、安装iptables-1.4.6.tar.bz2 源码包
           tar xvf iptables-1.4.6.tar.bz2 -C /usr/src
           cd /usr/src/iptables-1.4.6
           cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libx_layer7.* ./extensisons/
           ./configure --prefix=/usr  --with-ksource=/usr/src/linux
            make
            make install
三、编译安装l7-protocols-2009-05-28.tar.gz协议包
      1、解压
            tar xvf l7-protocols-2009-05-28.tar.gz 
      2、编译安装(不需要编译)
            cd l7-protocols-2009-05-28
            make install
四、修改、还原iptables的服务脚本和配置文件
            mv ~/ipitables /etc/rc.d/init.d/
            cd !$
            修改服务脚本
            vim iptables
            在莫行模式下输入
            :%s@/bin/$IPTABLES@/usr/sbin/$IPTABLES@g
     保存退出
            cp iptables-config /etc/sysconfig/   还原配置文件  
     好了,我们就可以启动服务了  
            service iptables start
     到此我们的l7就安装成功我们可以简单练习一下,禁止192.168.10.0/24内的主机上QQ,命令如下:
          iptables -t filter -A FORWARD -s 192.168.10.0/24 -m layer7 --17proto qq -j REJECT 
       
     至于软件或协议的控制也是如此的方便。