使用p2p软件下载的客户端会建立了很多的tcp连接,导致网关负载太重,上网速度很慢。而iptables的connlimit模块,可以限制用户的tcp连接数,以下是给iptables加载模块的步骤和过程。
一、系统平台
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补丁的,所以就直接使用该包了。
# 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源码:
2、准备工作
把补丁和iptables源码都解压出来:
# 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、打补丁
# KERNEL_DIR=/usr/src/linux-2.6.9-42.7AX/ IPTABLES_DIR=/usr/src/asianux/SOURCES/iptables-1.3.5/ ./runme connlimit
提示如下:
4、引用旧配置文件
根据您使用的核心版本,修改Makefile文件:
2.6.9-42.7AXsmp
# cd /usr/src/linux-2.6.9-42.7AX/
# vi Makefile
把EXTRAVERSION = -42.7AXcustom修改为EXTRAVERSION = -42.7AXsmp。
使用当前系统的配置文件:
5、选择核心模块
运行make menuconfig,选择下面的参数编译为模块<M>:
如图:
6、修改源码
前面提到connlimit补丁是针对2.6.11以后的内核版本涉及的,若直接编译会失败,所以我们必须先修改一下ipt_connlimit.c的部分代码。
补丁下载:本地下载
打补丁:
# bzip2 -dc /root/iptable_update/ipt_connlimit_by_qk.patch.bz2 |patch -p1
patching file ipt_connlimit.c
7、编译核心
查看信息:
filename: net/ipv4/netfilter/ipt_connlimit.ko
license: GPL
depends: ip_tables,ip_conntrack
vermagic: 2.6.9-42.7AXsmp SMP gcc-3.4
拷贝模块:
# chmod u+x /lib/modules/2.6.9-42.7AXsmp/kernel/net/ipv4/netfilter/ipt_connlimit.ko
模块下载:(只适用于红旗DC Server 5.0 sp2)
三、编译iptables过程
使用1.3.5版本直接编译即可:
# rpmbuild -bb iptables.spec
最后生成的rpm包如下:
源码见标题二。
四、测试
安装上述iptables-1.3.5-1.2.1qk版本后,运行下面的命令进行测试:
# 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
查看:
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模块。
流量监控脚本 v1.3
流量监控脚本 v1.2
流量监控脚本 v1.1
在Linux路由网关下查看客户端IP的实际流量
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/112302.html