分类: LINUX
2010-10-19 23:29:17
本文介绍自己正学的四个模块的的添加,使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
步骤:
- [root@test ~]# rpm -ivh kernel-2.6.18-194.el5.src.rpm
- [root@test ~]# cd /usr/src/redhat/SPECS/
- [root@test ~]# rpmbuild -bp --target=$(uname -m) kernel-2.6.spec
- [root@test ~]# cp -r /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 /usr/src/linux
- [root@test ~]# cd /usr/src/linux/
- [root@test ~]# vim /usr/src/linux/Makefile
- ---------------------------
- VERSION = 2
- PATCHLEVEL = 6
- SUBLEVEL = 18
- EXTRAVERSION = -194.el5 #这里要修改为内核的小版本好,就是uanme -r给出的2.6.18之后的部分#
- ---------------------------
- [root@test ~]# cd
- [root@test ~]# tar xvf iptables-1.3.5.tar.bz2
- [root@test ~]# cp -r iptables-1.3.5 /usr/src/iptables
- [root@test ~]# export KERNEL_DIR=/usr/src/linux/
- [root@test ~]# export IPTABLES_DIR=/usr/src/iptables/
- [root@test ~]# tar xvf patch-o-matic-ng-20080214.tar.bz2
- [root@test ~]# cd patch-o-matic-ng-20080214
- [root@test ~]# ./runme --download
- [root@test ~]# ./runme connlimit #提示时选择y确认即可
- [root@test ~]# ./runme time #提示时选择y确认即可
- [root@test ~]# ./runme ipp2p #提示时选择y确认即可
- [root@test ~]# cd ..
- [root@test ~]# tar zxvf netfilter-layer7-v2.9.tar.gz
- [root@test ~]# cd /usr/src/linux/
- [root@test ~]# patch -p1 < /root/iptables_ext/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch
- [root@test ~]# patch -p1 < /root/iptables_ext/netfilter-layer7-v2.9/iptables-layer7-2.9.patch
- [root@test ~]# cd /usr/src/linux
- [root@test ~]# make menuconfig # 配置内核选项
- ----------------------------
- networking
- ----> networking options
- ---> network packet filtering(replaces inchains)
- ---> [*] Network packet filtering debugging
- --->IP: Netfilter Configuration #如果能看到含有下面的五项说明你前面的工作正确
- ---> <M> Layer 7 match support (EXPERIMENTAL)
- [*] Layer 7 debugging output
- <M> TIME match support
- <M> IPP2P match support
- <M> Connections/IP limit match support
- ----------------------------
- [root@test ~]# cd /usr/src/linux/net/ipv4/netfilter
- [root@test ~]# cp Makefile Makefile.bak
- [root@test ~]# vim Makefile #清空内容,并配置如下:
- ----------------------------
- obj-m := ipt_connlimit.o ipt_time.o ipt_ipp2p.o ipt_layer7.o
- KDIR := /lib/modules/$(shell uname -r)/build
- PWD := $(shell pwd)
- default: $(MAKE) -C $(KDIR) M=$(PWD) modules
- ----------------------------
- [root@test ~]# cd /usr/src/linux/
- [root@test ~]# make M=net/ipv4/netfilter/ #如果出错请先运行下面两条命令
- [root@test ~]# make oldconfig && make prepare
- [root@test ~]# make scripts
- [root@test ~]# make M=net/ipv4/netfilter/ #这是在net/ipv4/netfilter就产生了我们需要的几个模块 ko后缀文件
- [root@test ~]# ls net/ipv4/netfilter |grep ko
- ipt_connlimit.ko
- ipt_ipp2p.ko
- ipt_layer7.ko
- ipt_time.ko
- [root@test ~]# cp net/ipv4/netfilter/*.ko /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/
- [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_connlimit.ko
- [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_time.ko
- [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
- [root@test ~]# insmod /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/ipt_layer7.ko
- #如果有出现插入模块出错的情况,请先插入ip_conntrack x——tables 这两个模块
- #插入模块正常,但使用出错时,是由于缺少所需的库,我们需要编译下iptables源码产生需要的库文件
- [root@test ~]# cd /usr/src/iptables/
- [root@test ~]# make
- #将产生的几个库文件拷贝至 /lib/iptables/ 下即可
- #安装layer7的协议包
- [root@test ~]# cd
- [root@test ~]# tar xvf l7-protocols-2009-05-10.tar.gz
- [root@test ~]# cd l7-protocols-2009-05-10
- [root@test ~]# make install
- 至此,你的内核已经可以使用这些新添加的模块功能了,ipp2p模块有时遇到错误不好解决,正在探索
chinaunix网友2010-10-20 10:53:37
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com