本文介绍自己正学的四个模块的的添加,使netfilter/iptables添加新功能。

四个模块分别为:

ipt_connlimit:限制tcp并发连接,据说这个可以防DDOS;

ipt_ipp2p:控制P2P协议;

ipt_time:根据时间控制;

layer7:应用层的一些协议控制,QQ,迅雷

我的linux是RHEL5.5,实际上只缺少layer7和ipp2p两个功能模块,但这次都做了一下。

需求软件包:

1.跟所应用linux系统正在使用的相同版本的内核源码,如果是redhat GNU/linux的话,建议下载红帽提供的源码,我这里使用的是: kernel-2.6.18-194.el5.src.rpm

2.跟系统iptables相同的netfilter源码包,我使用的是:iptables-1.3.5.tar.bz2 

3. layer7的内核补丁包:netfilter-layer7-v2.9.tar.gz 和应用层协议包:l7-protocols-2009-05-10.tar.gz 

4.一个内核添加模块的补丁工具:patch-o-matic-ng-20080214.tar.bz2

 

步骤:

 

 
  
  1. [root@test ~]# rpm -ivh kernel-2.6.18-194.el5.src.rpm 
  2. [root@test ~]# cd /usr/src/redhat/SPECS/ 
  3. [root@test ~]# rpmbuild -bp --target=$(uname -m) kernel-2.6.spec 
  4. [root@test ~]# cp -r /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 /usr/src/linux 
  5. [root@test ~]# cd /usr/src/linux/ 
  6. [root@test ~]# vim /usr/src/linux/Makefile 
  7. --------------------------- 
  8. VERSION = 2 
  9. PATCHLEVEL = 6 
  10. SUBLEVEL = 18 
  11. EXTRAVERSION = -194.el5     #这里要修改为内核的小版本好,就是uanme -r给出的2.6.18之后的部分# 
  12. --------------------------- 
  13. [root@test ~]# cd 
  14. [root@test ~]# tar xvf iptables-1.3.5.tar.bz2 
  15. [root@test ~]# cp -r iptables-1.3.5 /usr/src/iptables 
  16. [root@test ~]# export KERNEL_DIR=/usr/src/linux/ 
  17. [root@test ~]# export IPTABLES_DIR=/usr/src/iptables/ 
  18. [root@test ~]# tar xvf patch-o-matic-ng-20080214.tar.bz2 
  19. [root@test ~]# cd patch-o-matic-ng-20080214 
  20. [root@test ~]# ./runme --download 
  21. [root@test ~]# ./runme connlimit    #提示时选择y确认即可 
  22. [root@test ~]# ./runme time    #提示时选择y确认即可 
  23. [root@test ~]# ./runme ipp2p     #提示时选择y确认即可 
  24. [root@test ~]# cd .. 
  25. [root@test ~]# tar zxvf netfilter-layer7-v2.9.tar.gz 
  26. [root@test ~]# cd /usr/src/linux/ 
  27. [root@test ~]# patch -p1 < /root/iptables_ext/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch 
  28. [root@test ~]# patch -p1 < /root/iptables_ext/netfilter-layer7-v2.9/iptables-layer7-2.9.patch 
  29. [root@test ~]# cd /usr/src/linux 
  30. [root@test ~]# make menuconfig    # 配置内核选项 
  31. ---------------------------- 
  32. networking 
  33.     ----> networking options 
  34.         ---> network packet filtering(replaces inchains) 
  35.             ---> [*] Network packet filtering debugging 
  36.             --->IP: Netfilter Configuration      #如果能看到含有下面的五项说明你前面的工作正确 
  37.                 ---> <M>  Layer 7 match support (EXPERIMENTAL)  
  38.                      [*]  Layer 7 debugging output 
  39.                      <M> TIME match  support 
  40.                      <M> IPP2P match support 
  41.                      <M> Connections/IP limit match support  
  42.  
  43. ---------------------------- 
  44. [root@test ~]# cd /usr/src/linux/net/ipv4/netfilter 
  45. [root@test ~]# cp Makefile Makefile.bak 
  46. [root@test ~]# vim Makefile  #清空内容,并配置如下: 
  47. ---------------------------- 
  48. obj-m :ipt_connlimit.o ipt_time.o ipt_ipp2p.o ipt_layer7.o 
  49. KDIR := /lib/modules/$(shell uname -r)/build 
  50. PWD := $(shell pwd) 
  51. default: $(MAKE) -C $(KDIR) M=$(PWD) modules 
  52. ---------------------------- 
  53. [root@test ~]# cd /usr/src/linux/ 
  54. [root@test ~]# make M=net/ipv4/netfilter/   #如果出错请先运行下面两条命令 
  55. [root@test ~]# make oldconfig && make prepare 
  56. [root@test ~]# make scripts 
  57. [root@test ~]# make M=net/ipv4/netfilter/  #这是在net/ipv4/netfilter就产生了我们需要的几个模块 ko后缀文件 
  58. [root@test ~]# ls net/ipv4/netfilter |grep ko 
  59. ipt_connlimit.ko 
  60. ipt_ipp2p.ko 
  61. ipt_layer7.ko 
  62. ipt_time.ko 
  63. [root@test ~]# cp net/ipv4/netfilter/*.ko /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ 
  64. [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_connlimit.ko 
  65. [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_time.ko 
  66. [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_ipp2p.ko 
  67. [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_layer7.ko 
  68. #如果有出现插入模块出错的情况,请先插入ip_conntrack x——tables 这两个模块 
  69. #插入模块正常,但使用出错时,是由于缺少所需的库,我们需要编译下iptables源码产生需要的库文件 
  70. [root@test ~]# cd /usr/src/iptables/ 
  71. [root@test ~]# make 
  72. #将产生的几个库文件拷贝至 /lib/iptables/ 下即可 
  73.  
  74. #安装layer7的协议包 
  75. [root@test ~]# cd 
  76. [root@test ~]# tar xvf l7-protocols-2009-05-10.tar.gz 
  77. [root@test ~]# cd l7-protocols-2009-05-10 
  78. [root@test ~]# make install 
  79.  
  80. 至此,你的内核已经可以使用这些新添加的模块功能了,ipp2p模块有时遇到错误不好解决,正在探索
  81.  
  82.