在linux AS5上为Iptables添加connlimit模块

5440阅读 0评论2009-07-26 sjhf
分类:LINUX

 

内核版本检查

[root@mail ~]# uname -a

Linux mail.lin.net 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux

 

下载对应源码包,地址

[root@mail ~]# cd /usr/src/redhat/SRPMS/

[root@mail SRPMS]# ls

kernel-2.6.18-8.el5.src.rpm

 

解开rpm源码包

[root@mail SRPMS]# useradd mockbuild

[root@mail SRPMS]# rpm -vih kernel-2.6.18-8.el5.src.rpm

warning: kernel-2.6.18-8.el5.src.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

1:kernel ########################################### [100%]

[root@mail SRPMS]# cd ../SPECS/

[root@mail SPECS]# ls

kernel-2.6.spec

[root@mail SPECS]# rpmbuild -bp --target=$(uname -m) ./kernel-2.6.spec

Building target platforms: i686

Building for target i686

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.77617

------

+ sed -i -e 's/\(^export XEN_BUILDER.*$\)/\1.el5/' Makefile

+ sed -i -e 's/\(^export XEN_BUILDVERSION.*$\)/\1-8.el5/' Makefile

+ exit 0

[root@mail SPECS]# cd ../BUILD/kernel-2.6.18/

[root@mail kernel-2.6.18]# ls

Config.mk linux-2.6.18.i686 vanilla xen

 

将内核源代码复制到 /usr/src目录

[root@mail kernel-2.6.18]# cp -a linux-2.6.18.i686/ /usr/src/

You have mail in /var/spool/mail/root

[root@mail kernel-2.6.18]#

[root@mail kernel-2.6.18]# cd /usr/src/linux-2.6.18.i686/

[root@mail linux-2.6.18.i686]#

 

修改makefile头与OS上的内核相同

先用uname –r查询一下:

[root@mail linux-2.6.18.i686]# uname -r

2.6.18-8.el5

# vi Makefile

修改 EXTRAVERSION = -prep

该成EXTRAVERSION = -8.el5

 

准备各种软件

[root@mail src]# ls

ipp2p-0.99.15.tar.gz iptables-1.3.8.tar.bz2 patch-o-matic-ng-20080918.tar.bz2

 

解压软件包到/usr/src目录下

[root@mail src]# tar -jxvf patch-o-matic-ng-20080918.tar.bz2

[root@mail src]# tar -jxvf iptables-1.3.8.tar.bz2

[root@mail src]# tar -zxvf ipp2p-0.99.15.tar.gz

[root@mail src]# cd patch-o-matic-ng-20080918

[root@mail patch-o-matic-ng-20080918]#

 

设置环境变量

[root@mail patch-o-matic-ng-20080918]# export KERNEL_DIR=/usr/src/linux-2.6.18.i686/

[root@mail patch-o-matic-ng-20080918]# export IPTABLES_DIR=/usr/src/iptables-1.3.8/

[root@mail patch-o-matic-ng-20080918]# export KERNEL_SRC=/usr/src/linux-2.6.18.i686/

[root@mail patch-o-matic-ng-20080918]# export IPTABLES_SRC=/usr/src/iptables-1.3.8/

 

[root@mail patch-o-matic-ng-20080918]#

[root@mail patch-o-matic-ng-20080918]# ./runme --download

Failed to read temporary file /tmp/pom-runme-index: 1792 - aborting!

在这里出现错误,google一把说是不能访问。换了好几个IP都出现同样的问题。最后在网上找到了connlimit包,直接复制到/usr/src/ patch-o-matic-ng-20080918/patchlets目录下。

 

[root@mail patch-o-matic-ng-20080918] mv /usr/src/connlimit ./ patchlets

[root@mail patch-o-matic-ng-20080918]# ./runme connlimit

Excellent! Source trees are ready for compilation.

 

编辑内核选上新添加的模块

[root@seker linux-2.6.18.i686]# make menuconfig

  Networking  ---> 

    Networking options  --->

·  Network packet filtering (replaces ipchains)  --->

                IP: Netfilter Configuration  --->

Connections/IP limit match support

选中该模块后保存退出

 

编译内核模块
make modules_prepare
修改net/ipv4/netfilter/Makefile,只编译connlimit模块,首先备份net/ipv4/netfilter/Makefile文件
mv net/ipv4/netfilter/Makefile net/ipv4/netfilter/Makefile.bak
新建 net/ipv4/netfilter/Makefile文件,并添加如下内容
vi net/ipv4/netfilter/Makefile
obj-m := ipt_connlimit.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules

如果要添加其它模块,可以在makefile文件中添加,如时间模块,可加入obj-m := ipt_time.o,不过要先在内核中选择该模块,才能编译成功。

 

编译内核模块

[root@mail netfilter]# cd /usr/src/linux-2.6.18.i686

[root@mail linux-2.6.18.i686]# make M=net/ipv4/netfilter/

LD net/ipv4/netfilter/built-in.o

Building modules, stage 2.

MODPOST

CC net/ipv4/netfilter/ipt_connlimit.mod.o

LD [M] net/ipv4/netfilter/ipt_connlimit.ko

 

复制新编译的模块到老内核

[root@mail linux-2.6.18.i686]# cp net/ipv4/netfilter/ipt_connlimit.ko /lib/modules/2.6.18-8.el5/kernel/net/ipv4/netfilter/

[root@mail linux-2.6.18.i686]# chmod 755 /lib/modules/2.6.18-8.el5/kernel/net/ipv4/netfilter/*.ko

 

安装IPP2P

修改Makefile文件
[root@mail ipp2p-0.99.15]# vi Makefile

将以下三行改为:
KERNEL_SRC = /usr/src/linux-2.6.18.i686

IPTABLES_SRC = /usr/src/iptables-1.3.8

IPTABLES_VERSION = $(IPTVER) 替换成IPTABLES_VERSION = 1.3.8

[root@mail ipp2p-0.99.15]# make clean

[root@mail ipp2p-0.99.15]# make

[root@mail ipp2p-0.99.15]# make install

cp ipt_ipp2p.ko /lib/modules/2.6.18-8.el5/kernel/net/ipv4/netfilter/

cp libipt_ipp2p.so /lib/iptables/

depmod -a

 

安装新的IPTABLE

[root@mail iptables-1.3.8]# make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install

会有以下结果:

cp extensions/libip6t_physdev.so /lib/iptables/libip6t_physdev.so

cp extensions/libip6t_policy.so /lib/iptables/libip6t_policy.so

cp extensions/libip6t_standard.so /lib/iptables/libip6t_standard.so

cp extensions/libip6t_state.so /lib/iptables/libip6t_state.so

cp extensions/libip6t_tcp.so /lib/iptables/libip6t_tcp.so

cp extensions/libip6t_udp.so /lib/iptables/libip6t_udp.so

cp extensions/libip6t_CONNMARK.so /lib/iptables/libip6t_CONNMARK.so

cp extensions/libip6t_HL.so /lib/iptables/libip6t_HL.so

cp extensions/libip6t_LOG.so /lib/iptables/libip6t_LOG.so

cp extensions/libip6t_NFQUEUE.so /lib/iptables/libip6t_NFQUEUE.so

cp extensions/libip6t_MARK.so /lib/iptables/libip6t_MARK.so

cp extensions/libip6t_TCPMSS.so /lib/iptables/libip6t_TCPMSS.so

cp extensions/libip6t_ah.so /lib/iptables/libip6t_ah.so

cp extensions/libip6t_esp.so /lib/iptables/libip6t_esp.so

cp extensions/libip6t_frag.so /lib/iptables/libip6t_frag.so

cp extensions/libip6t_ipv6header.so /lib/iptables/libip6t_ipv6header.so

cp extensions/libip6t_hbh.so /lib/iptables/libip6t_hbh.so

cp extensions/libip6t_dst.so /lib/iptables/libip6t_dst.so

cp extensions/libip6t_REJECT.so /lib/iptables/libip6t_REJECT.so

cp extensions/libip6t_rt.so /lib/iptables/libip6t_rt.so

cp extensions/libip6t_sctp.so /lib/iptables/libip6t_sctp.so

rm libiptc/libip6tc.o libipq/libipq.o libiptc/libip4tc.o

 

加载相关模块

[root@mail iptables-1.3.8]# modprobe ipt_connlimit

[root@mail iptables-1.3.8]# modprobe ipt_ipp2p

 

查看加载的模块

[root@mail iptables-1.3.8]# lsmod | grep x_tables

x_tables 17349 8 ipt_ipp2p,ipt_connlimit,ipt_REJECT,xt_state,ip_tables,ip6t_REJECT,xt_tcpudp,ip6_tables

 

 

测试应用

模块 connlimit 作用:连接限制

--connlimit-above n 限制为多少个

--connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.

这个主要可以限制内网用户的网络使用,对服务器而言则可以限制每个ip发起的连接数:

[root@mail iptables-1.3.8]# iptables -A INPUT -p tcp --dport 3128 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j REJECT

模块ipp2p作用:封杀BT类P2P软件

iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP

上一篇: oracle spfileVSpfile
下一篇:sco openserver 挂载硬盘手记