linux限制端口连接数,iptables的connlimit功能(限制端口连接数)

本文介绍如何使用iptables在Linux系统上限制特定端口的IP连接次数。通过补丁安装connlimit模块,实现对连接数的有效控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:

作者: 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

如成功则补丁打成功了。

阅读(1341) | 评论(0) | 转发(0) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值