一、使 l7过滤应用层协议
 1.         L7概念:是一个 linux内核包分类器,和其他的分类器不同, L7不仅仅是对协议的端口定义,它的表达式和应用层协议匹配,以此来检验使用的是那种协议?
 2.         L7对处理器和内存敏感,使用 L7情况:
                         i.需要匹配一些使用未定义的协议端口( P2P文件应用共享)
                       ii.              有意义的通讯使用非标准端口(如: http使用了 8080端口)
 3.         L7的组成:三部分组成:一个是内核补丁,一个是 iptables补丁,一个是协议定义文本。
 4.         使用 netfilter/iptables封锁企业 QQ,msn, xulei
                        i.              需要的软件包: linux-2.6.-28.tar.bz2, netfilter-layer7-v2.21.tar.gz, iptables-1.4.8.tar.bz2.l7-protocols.tar.gz
                      ii.              把上面的软件包解压到 /usr/src (个人习惯 )
a)         Tar –jxvf linux-2.6.-28.tar.bz2 –C /usr/src
b)        Tar –jxvf iptables-1.4.8.tar.bz2 –C /usr/src
c)         Tar –zxvf netfilter-layer7-v2.21.tar.gz –C /usr/src
d)        Tar –zxvf ll7-protocols.tar.gz –C /usr/src
                    iii.              卸载 系统自带的 iptables
a)         先用 rpm –qa | grep iptables
b)        Rpm –e iptables iptables-ipv6 –nodeps (yum remove iptable)
                     iv.              安装 l7
a)         给新内核打上 l7补丁 
Ø   Cd /usr/src/linux-2.6.28.8
Ø   Patch –p1 < /usr/src/net/netfilter-layer7-v2.21/keer-2.6*.patch
                       v.              编译内核
 a)         编译环境: GCC  yum –y install gcc* rpm –import /etc/pki/rpm-gpg/RPM*
b)        修改内核配置项 
Ø   Make mrproper(清除已编译的内核 )
Ø   Make oldconfig 全部保持默认  mv /boot/config-2.6.18-186.el5 /usr/src/linux-2.6.28.8/.config
Ø   Make menuconfig (需要安装 ncurses-devel,可以编译成模块,再模块安装 )
General setup  --->
Prompt for development and/or incomplete code/drivers  必选
 Networking  --->
Networking options  --->
Network packet filtering framework (Netfilter)  --->
Network packet filtering framework (Netfilter)  --->
Core Netfilter Configuration  --->   该项下的所有项目建议都选上
        <M> Netfilter connection tracking support  这个项目必需选上,下面才会出现 layer7的选项
           <M>   "layer7" match support         必选                                 
                        Layer 7 debugging output   必选     
        IP: Netfilter Configuration  --->    该项下的所有项目必需都选上 
u  编译并安装新内核  make && make modules_install && make install
u  设置新内核为默认启动,如果远程连接服务器则必须要设置,在 /etc/gurb.conf 中将 default=1改成 default=0
                      vi.              编译安装 iptables并支持 layer7
a)         编译安装 iptables并支持 layer7
Ø   Cp –R
/usr/src/netfilter-layer7-v2.22/iptables-1.4.1forward-for-kernel-2.6.20forward/libxt_layer7.* /usr/src/iptables-1.4.8/extensions/
Ø   [root@l1 iptables-1.4.8]#./configure –with-ksource=/usr/src/linux-2.6.28
Ø   Make && make install
b)         安装 l7协议 
Ø   Mkdir /etc/l7-protocols
Ø   Mv /usr/src/ l7-protocols-2009-5-10 /usr/src/l7-protocols
Ø   Cp –R /usr/src/ l7-protocols /usr/src/iptables-1.4.8/
Ø   Make && make install
二、layer7规则示例
 1.         layer7 match
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto qq -j DROP 
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto msnmessenger -j DROP 
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto msn-filetransfer -j DROP 
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto xunlei -j DROP 
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto edonkey -j DROP 
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto bittorrent -j DROP
2.         string match
[root@l1 /]# iptables -A FORWARD -p udp –dport 53 -m string –string "tencent" –algo bm -j DROP 
[root@l1 /]# iptables -A FORWARD -p udp –dport 53 -m string –string "verycd" –algo bm -j DROP 
[root@l1 /]# iptables -A FORWARD -p tcp –dport 80 -m string –string "sex" –algo bm -j DROP
3.         state match
[root@l1 /]# iptables -A FORWARD -m state –state NEW -p tcp ! –syn -j DROP 
[root@l1 /]# iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
4.         connlimit match
[root@l1 /]# iptables -A FORWARD -p tcp –syn -m connlimit –connlimit-above 100 –connlimit-mask 24 -j DROP
5.         time match
[root@l1 /]# iptables -A FORWARD -p tcp –dport 80 -m time –timestart 8:00 –timestop 17:00 –weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT  |