centos添加iptables connlimit模块

post by rocdk890 / 2012-1-14 1:21 Saturday linux技术
  其实这篇文章应该早在2年前就写出来的,因为今天买了个vps,上面的iptables的模块不全,才造成我写这篇文章的主要动力,好了,废话不多说了,来看教程吧.
  系统:centos 5.4 32位
  需要的软件包:iptables-1.3.8.tar.bz2 linux-2.6.18.tar.bz2 patch-o-matic-ng-20080214.tar.bz2 (这3个我都会提供给大家的)

大家从下图可以看到我的系统目前是不支持connlimit模块的
点击查看原图

1.准备工作
yum -y install gcc* make wget ncurses-devel ncurses bzip2
还有个重要的地方就是
如果你的系统安装iptables,那就先把iptables停一下,避免后面的问题
services iptables stop
然后把3个软件包解压到/usr/src目录下
tar jxf iptables-1.3.8.tar.bz2 -C /usr/src/
tar jxf patch-o-matic-ng-20080214.tar.bz2 -C /usr/src/
tar jxf linux-2.6.18.tar.bz2 -C /usr/src/
初始化内核
cd /usr/src/linux-2.6.18/
uname -r
2.6.18-164.el5
vi Makefile 改EXTRAVERSION =-164.el5
点击查看原图
设置patch-o-matic-ng-20080214需要用到的环境变量:
export KERNEL_DIR=/usr/src/linux-2.6.18
export KERNEL_SRC=/usr/src/linux-2.6.18
export IPTABLES_SRC=/usr/src/iptables-1.3.8/
export IPTABLES_DIR=/usr/src/iptables-1.3.8/
这里说下,如果你不设置这4个环境变量的,后面你给内核下补丁和添加模块是很烦的一件事情,为什么这么说呢,让你们看个例子:
KERNEL_DIR=/usr/src/linux-2.6.18 IPTABLES_DIR=/usr/src/iptables-1.3.8 ./runme time
是不是很麻烦啊,所以最好是添加上.

2.给内核下补丁和添加模块
cd /usr/src/patch-o-matic-ng-20080214/
./runme --download
./runme connlimit
可以看到connlimit模块已经添加到内核里,但还没有完.
点击查看原图

3.编辑内核配置文件,选中新增加的模块
cd ../linux-2.6.18/
make menuconfig
这步的操作有点多,我就不截图了.
在内核配置界面选中
Networking --->
Networking options --->
Network packet filtering (replaces ipchains) --->
IP: Netfilter Configuration --->
<M> Connections/IP limit match support

4.编译内核模块
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

最后编译内核模块
make M=net/ipv4/netfilter/

5.将编译好的ipt_connlimit.ko内核模块复制到当前内核模块目录下,并加载内核模块
cp net/ipv4/netfilter/ipt_connlimit.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/netfilter/
为内核模块添加可执行权限
chmod +x /lib/modules/2.6.18-164.el5/kernel/net/ipv4/netfilter/ipt_connlimit.ko
depmod -a
modprobe ipt_connlimit
运行lsmod | grep x_tables出现如下提示,说明内核模块加载成功
x_tables               17349  7 ipt_connlimit,ipt_REJECT,xt_state,ip_tables,ip6t_REJECT,xt_tcpudp,ip6_tables

6.测试ipt_connlimit模块
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT
service iptables save
service iptables start
vi /etc/sysconfig/iptables
从下图我们可以看到connlimit模块已经生效了.
点击查看原图
好了,就到这里吧,文中所使用的软件包请到https://blog.slogra.com/download里下载.账号和密码是pk和usertemp.
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-108.html

标签: centos iptables 模块 vps xen vps kernel 内核 connlimit 添加 编译 2.6内核

  1. 2013-06-26 15:08
    @suchpeng:是的,从5.6开始都已经包括了connlimit
  1. gravatar suchpeng
    2013-06-26 13:33
    我完全按您的操作文档来操作,直至最后,中间好像也没有出错。但是:

    [root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT
    iptables: Unknown error 4294967295

    我的环境为:CentOS 5.9 2.6.18-348.el5PAE  iptables 1.3.5

    注:我装好系统后,直接运行上面这条语句,没有报错,而且在/etc/sysconfig/iptabels里面也发现这条命令了。

    未打补丁之前运行:lsmod | grep x_tables  也可以发现ipt_connlimit
    难道5.9已经包括了connlimit?

    谢谢解惑!
  1. 2012-02-27 14:27
    @ShiZue:thanks!
  1. gravatar ShiZue
    2012-02-27 02:15
    Unbelievable how well-written and infroamitve this was.

评论: