iptables 端口连接数的限制,多少合适!

2025-06-28 07:10:13
推荐回答(1个)
回答1:

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:先在http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/处下载patch-o- matic-ng补丁,

注意最新并且含有connlimit的补丁包好像是patch-o-matic-ng-20060725.tar.bz2,
之后的补丁包中都没有connlimit补丁;

2:然后下载iptables源代码
http://ftp.netfilter.org/pub/ipt
... .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,

www.ixdba.net

#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

如成功则补丁打成功了。