分类: LINUX
2009-07-26 17:37:27
内核版本检查
[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 --->
选中该模块后保存退出
编译内核模块
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