Chinaunix首页 | 论坛 | 博客
  • 博客访问: 419321
  • 博文数量: 121
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-16 16:28
文章分类

全部博文(121)

文章存档

2021年(3)

2018年(1)

2017年(5)

2016年(9)

2015年(23)

2014年(80)

我的朋友

分类: LINUX

2014-02-27 20:19:51

转自:
作者: Oracle+Linux专业技术门户
网友提出了一个这样问题,LINUX 如何限制某 端口的IP连接次数,记得前面写过文章,是通过apache模块的方式限制ip的最大连接数,可是如果要限制的端口很多,显然apache模块这个办法就不行了,于是提出了用iptables来限制,给出了一个iptables规则:
iptables -I INPUT -p tcp --dport 目标端口  -m connlimit --connlimit-above 10 -j REJECT
这个规则在没有载入任何iptables模块时,是不能用的,会报类似错误:
[root@localhost ~]# iptables -I INPUT -p tcp --dport 8000 -m connlimit --connlimit-above 4 -j REJECT
iptables: Unknown error 4294967295
这个错误表示,系统内核没有connlimit模块支持!因此,就需要将connlimit加入内核支持,也就是需要给内核打补丁,重新编译iptables和系统内核!
下面是详细操作过程
1:先在处下载patch-o- matic-ng补丁,
     注意最新并且含有connlimit的补丁包好像是patch-o-matic-ng-20060725.tar.bz2,
之后的补丁包中都没有connlimit补丁;
2:然后下载iptables源代码
... .5-20060823.tar.bz2,
3:最后下载kernel源代码ftp://ftp.kernel.org/pub/linux/kernel/v2.6/,    
编译2.4.x内核一般没有问题,2.6.11以下的似乎也没有什么问题,不过2.6.12开始打补丁时,会提示...的错误。
在打完补丁后使用connlimit模块时会报一个奇怪的错误
“connlimit match: invalid size 0!=16 iptables: Invalid argument”,
而且在编译内核模块时有一些警告"signed//unsigned comparision warnings",
不知道是什么原因,只好换一个低版本内核linux-2.6.15.tar.bz2。
由于redhat as4的内核默认没有 connlimit模块,所以要编译内核,在网上好像有不编译内核给iptables添加模块的办法,但我没成功,只好老老实实编译内核。
  
4:操作开始:
#cp patch-o-matic-ng-20060725.tar.bz2 iptables-1.3.5-20060823.tar.bz2 linux-2.6.15.tar.bz2 /usr/src/
    #bunzip2 -d *.bz2
    #tar xvf *.tar
    #ln -s iptables-1.3.5-20060823 iptables
    #ln -s linux-2.6.15 linux
    #cd /usr/src/linux










    #make mrproper
    #make clean
    #cd /usr/src/patch-o-matic-ng-20060725
    #./runme connlimit
直接打补丁会报错,
需要修改/usr/src/patch-o-matic-ng- 20060725/patchlets/connlimit/linux-2.6.11/net/ipv4/netfilter/Makefile.ladd
文件,将
obj-$(CONFIG_IP_NF_MATCH_STATE) += ipt_state.o
改为
obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o
   
#./runme connlimit
    #cd /usr/src/linux
    #make menuconfig
   
注意:内核参数一定要将Networking-->Networking options --->Network packet filtering(replaces ipchains)--->IP: Netfilter Configuration --->Connections/IP limit match support 选为模块或编译进内核;如果你找不到这一项,那么刚才打补丁没有成功;如果你对多如牛毛的内核选项很烦,你可以用make oldconfig,



   
#make bzImage
    #make modules
    #make modules_install
    #make install
   
编译完成后,可以开始编译iptables
    #cd /usr/src/iptables
    #make KERNEL_DIR=/usr/src/linux   
  #make install KERNEL_DIR=/usr/src/linux
  #make install-devel
5:重启后,试一试命令
iptables -m connlimit -help
iptables -I INPUT -p tcp -m connlimit --connlimit-above 4 -j REJECT
iptables -L
如成功则补丁打成功了。
阅读(1956) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~