软件环境: Red Hat Enterprise Linux Server release 5.8

            内核 :2.6.28.10

目标功能:
    为iptables增加layer7补丁,实现应用层过滤。通过独立的l7-protocols协议包提供对各种应用层数据的特征识别定义,来完成整体实现过程

目的:

     练习给内核打补丁,练习给软件打补丁 

过程:

     1、给内核打补丁,并重新编译

     2、给iptables源码打补丁,并重新编译iptables

     3、安装l7proto协议定义包

     4、用iptables命令设置应用层过滤规则

 

准备工作 :

         linux内核源码包: linux-2.6.28.10.tar.gz 

         layer补丁源码包:netfilter-layer7-v2.22.tar.gz

         iptables源码包: iptables-1.4.6.tar.bz2

         协议定义包: l7-protocols-2009-05-28.tar.gz

步骤

 一、重新编译内核

       1、合并kernel+layer7 补丁

          

 
  
  1. # tar xf linux-2.6.28.10.tar.gz -C /usr/src/  
  2. # tar xf netfilter-layer7-v2.22.tar.gz -C /usr/src/ 
  3. # cd /usr/src/ 
  4. # ln -sv linux-2.6.28.10 linux  
  5. #cd linux  
  6. # patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch  把补丁融合到内核   

 

        2、配置新内核

 
  
  1. # cp /boot/config-2.6.18-308.el5 .config  使用当前系统内核配置文件 修改一下  
  2. #make menuconfig  
  3.  
  4. 配置内核参数  
  5.  使用↑↓ → ← 方向键 来选择
  6. 菜单项 <Select>、<Exit>、<Help>
  7. 空格键用于选择配置类型
  8. 对不同功能的配置选择
  9. [   ]:空选时表示不需要在新内核中使用该功能
  10. [ M ]:表示将此项功能编译为模块,以便在需要时加载  Module
  11. [ * ]:将此项功能直接编入新内核,作为新内核的一部分需要配置哪些内核编译参数
  12.  
  13. Networking support → Networking Options →Network packet filtering framework →Core Netfilter Configuration 
  14. <M>  Netfilter connection tracking support  
  15. <M>  “layer7” match support 
  16. <M>  “string” match support 
  17. <M>  “time”  match support 
  18. <M>  “iprange”  match support 
  19. <M>  “connlimit”  match support 
  20. <M>  “state”  match support 
  21. <M>  “conntrack”  connection  match support 
  22. <M>  “mac”  address  match support 
  23. <M>   "multiport" Multiple port match support 
  24.  
  25.  
  26. Networking support → Networking Options →Network packet filtering framework → IP: Netfilter Configuration 
  27. <M> IPv4 connection tracking support (required for NAT) IP包过滤功能
  28. <M>   Full NAT 
  29.     <M>     MASQUERADE target support                                                                                    
  30.     <M>     NETMAP target support                                                                                
  31.     <M>     REDIRECT target support  

还有一些内核参数我们用不到的也可以去掉(例如ipv6的 打印机的) ,编译就会稍微快一点 ,但是如果我们还不熟悉 ,最好就都编译上。这个根据个人情况而定。

       3、编译及安装模块,新内核

#make && make modules_install && make install 

       4、重启选择新的内核引导

 
  
  1. # vim /etc/grub.conf 
  2. default=0      这里改为 0 从新内核引导  
  3. timeout=5 
  4. splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz 
  5. hiddenmenu 
  6. title Red Hat Enterprise Linux Server (2.6.28.10lay7) 新内核  
  7.         root (hd0,0) 
  8.         kernel /vmlinuz-2.6.28.10lay7 ro root=/dev/vol0/root rhgb quiet 
  9.         initrd /initrd-2.6.28.10lay7.img 

二、重新编译iptables

      1、卸载现有的iptables  

 
  
  1. # cp /etc/rc.d/init.d/iptables /tmp 
  2. # cp /etc/sysconfig/iptables-config /tmp 
  3. #rpm -e --nodeps iptables iptables-ipv6 iptstate
  4. ^忽略依赖关系 ^卸载原来的iptables   

      2、合订补丁,并重新安装iptables 

 
  
  1. # tar jxvf iptables-1.4.6.tar.bz2 –C  /usr/src 
  2. # cd /usr/src/iptables-1.4.6 
  3. # cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.*   ./extensions/ 
  4.   整合补丁
  5.  
  6. # ./configure  --prefix=/ --with-ksource=/usr/src/linux 
  7. ^安装位置 linux的源码包的位置
  8. # make 
  9. # make instal 
  10. #mv /tmp/iptables /etc/rc.d/init.d
  11. #mv /tmp/iptables-config /etc/sysconfig/iptables-config
  12. #chkconfig --add iptables 开机自动启动

 三、安装l7-protocols协议定义包

 
  
  1. # tar zxvf l7-protocols-2009-05-28.tar.gz 
  2. # cd l7-protocols-2009-05-28 
  3. # make install 

 四、用iptables命令设置应用层过滤规则

      匹配格式:-m layer7 --l7proto 协议名

      协议定义文件位于: /etc/l7-protocols/protocols 

      支持以下常见应用层协议的过滤:

 
  
  1. qq:腾讯公司QQ程序的通讯协议 
  2. msnmessenger:微软公司MSN程序的通讯协议 
  3. msn-filetransfer:MSN程序的文件传输协议 
  4. bittorrent:BT下载类软件使用的通讯协议 
  5. xunlei:迅雷下载工具使用的通讯协议 
  6. edonkey:电驴下载工具使用的通讯协议 

     规则实例 :

1、layer7匹配

    限制QQ

#iptbles -A FORWARD -m layer7 --l7proto qq -j drop 

     限制 xunlei 

#iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP

2、时间匹配

匹配格式:-m time --timestart 起始时间 --timestop 结束时间 --wekdays 每周的哪些天

     时间: 18:00

      每周的哪些天: Mon、Tue、Wed、Thu、Fri、Sat、Sun

#iptables -A FORWARD -p tcp --dport 80 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT

3、并发连接数匹配

匹配格式:-m connlimit --connlimit-above 上限数

#iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 100 --connlimit-mask 24 -j DROP

4、字符串匹配

匹配格式:-m string --string “字串” --algo 算法

算法指的是用于比对数据包中字符串的特定方法,可以为 bm 或 kmp ,其中任一种均可

#iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP