[原]给iptables增加connlimit模块

   使用p2p软件下载的客户端会建立了很多的tcp连接,导致网关负载太重,上网速度很慢。而iptables的connlimit模块,可以限制用户的tcp连接数,以下是给iptables加载模块的步骤和过程。

一、系统平台

引用
操作系统:红旗 DC Server 5.0 for x86_64 sp2
iptables版本:1.3.5

系统自带的iptalbes版本为1.2.1,版本太低,加载connlimit补丁很麻烦。为保持较好的兼容性,我决定使用Asianux 3.0上的1.3.5版本。

二、核心模块编译过程
要为iptables增加connlimit模块,需要给内核及iptables都打补丁。
1、获取补丁
我是参考网上的资料,说只有patch-o-matic-ng-20060725.tar.bz2才拥有connlimit补丁的,所以就直接使用该包了。

# cd /root/iptables_update
# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20060725.tar.bz2

以下是Asianux 3.0使用的1.3.5版本的iptables源码:

[原]给iptables增加connlimit模块下载文件
点击这里下载文件

2、准备工作
把补丁和iptables源码都解压出来:

# rpm -ivh iptables-1.3.5-1.2.1qk.src.rpm
# cd /usr/src/asianux/SOURCES
# tar xjvf iptables-1.3.5.tar.bz2
# cd /root/iptables_update
# tar xjvf patch-o-matic-ng-20060725.tar.bz2

3、打补丁

# cd /root/iptable_update/patch-o-matic-ng-20060725
# KERNEL_DIR=/usr/src/linux-2.6.9-42.7AX/ IPTABLES_DIR=/usr/src/asianux/SOURCES/iptables-1.3.5/ ./runme connlimit

提示如下:
点击在新窗口中浏览此图片4、引用旧配置文件
根据您使用的核心版本,修改Makefile文件:

# uname -r
2.6.9-42.7AXsmp
# cd /usr/src/linux-2.6.9-42.7AX/
# vi Makefile

把EXTRAVERSION = -42.7AXcustom修改为EXTRAVERSION = -42.7AXsmp
使用当前系统的配置文件:

# cp /boot/config-2.6.9-42.7AXsmp ./.config

5、选择核心模块
运行make menuconfig,选择下面的参数编译为模块<M>:

引用
Device Drivers–>Networking support–>Networking options —>Network packet filtering(replaces ipchains)—>IP: Netfilter Configuration —>Connections/IP limit match support

如图:
点击在新窗口中浏览此图片6、修改源码
前面提到connlimit补丁是针对2.6.11以后的内核版本涉及的,若直接编译会失败,所以我们必须先修改一下ipt_connlimit.c的部分代码。
补丁下载:本地下载
打补丁:

# cd /usr/src/linux-2.6.9-42.7AX/net/ipv4/netfilter
# bzip2 -dc /root/iptable_update/ipt_connlimit_by_qk.patch.bz2 |patch -p1
patching file ipt_connlimit.c

7、编译核心

# make M='net/ipv4/netfilter/'

查看信息:

引用
# modinfo net/ipv4/netfilter/ipt_connlimit.ko
filename:       net/ipv4/netfilter/ipt_connlimit.ko
license:        GPL
depends:        ip_tables,ip_conntrack
vermagic:       2.6.9-42.7AXsmp SMP gcc-3.4

拷贝模块:

# cp net/ipv4/netfilter/ipt_connlimit.ko /lib/modules/2.6.9-42.7AXsmp/kernel/net/ipv4/netfilter/
# chmod u+x /lib/modules/2.6.9-42.7AXsmp/kernel/net/ipv4/netfilter/ipt_connlimit.ko

模块下载:(只适用于红旗DC Server 5.0 sp2)

[原]给iptables增加connlimit模块下载文件
点击这里下载文件

三、编译iptables过程
使用1.3.5版本直接编译即可:

# cd /usr/src/asianux/SPECS/
# rpmbuild -bb iptables.spec

最后生成的rpm包如下:

[原]给iptables增加connlimit模块下载文件
点击这里下载文件

源码见标题二。

四、测试
安装上述iptables-1.3.5-1.2.1qk版本后,运行下面的命令进行测试:

# depmod -a
# iptables -m connlimit -help
……(上面信息省略,最后是使用说明)
connlimit v1.3.5 options:
[!] –connlimit-above n         match if the number of existing tcp connections is (not) above n
–connlimit-mask n             group hosts using mask
# iptables -I INPUT -p tcp -m connlimit –connlimit-above 4 -j REJECT

查看:

引用
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
REJECT     tcp  —  anywhere             anywhere            #conn/32 > 4 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

可见connlimit模块已经加载成功,至此完成。

五、参考资料
http://www.cublog.cn/u/21917/showart.php?id=163921
http://www.sudu.cn/info/html/edu/linux/20080425/302134.html
http://hi.baidu.com/haigang/blog/item/fcf3a40f2c1414e9aa645734.html
一个connlimit模块的RPM包:
ftp://ftp.pslib.cz/pub/users/Milan.Kerslager/RHEL-4/stable/SRPMS/kernel-modules-connlimit-2.6.9_67.0.4.EL-0.20051006.ker.rhel4.src.rpm
使用上述rpm,安装后,可直接开始编译核心,并生成connlimit模块。

Oracle的SGA与系统vm.nr_hugepages不匹配导致的故障
流量监控脚本 v1.3
流量监控脚本 v1.2
流量监控脚本 v1.1
在Linux路由网关下查看客户端IP的实际流量

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/112302.html

(0)
上一篇 2021年8月27日 01:35
下一篇 2021年8月27日 01:36

相关推荐

发表回复

登录后才能评论