扬帆科技—专业的Linux服务器代维护 - connlimit
type: channel
link: http://www.linux120.com/article/tag/connlimit/
items: 用iptables的connlimit模块限制并发连接数

用iptables的connlimit模块限制并发连接数
type: item
date: 2014-06-03T08:14:58+08:00
description: iptables的--connlimit匹配项可以限制ip并发连接数。然而并没有以静态方式编译进内核，故我们使用此选项时会提示错误。 网上绝大部分的解决方案均是重新编译内核，其实有更简单的方法。 对于linux的模块，没有静态编译进内核的，其实大部分已经编译成动态模块，我们其实只要找出是哪个模块问题便解决了，而此匹配项对应的模块是ipt_connlimit,下面便是详细解决方法。# depmod -a此命令的作用便是找出所有可用的动态模块，这个命令是必须的，它不会有输出。 下一步是将模块插入内核 modprobe ipt_connlimit同样不会有输出，没提示出错便表示成功了。（注意：insmod也是将模块插入内核，但是它不会自动清理模块的依赖关系，若依赖模块没先插入，便直接报错，不推荐使用）这时我们可以使用connlimit匹配项了： iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT示例写得有些简单，我们可根据连接状态来匹配，甚至可以根据某一次DOS攻击，包的特征来匹配。这里，各位自由发挥了。这里再例出对connlimit两个参数的研究： --connlimit-above x 限定并发连接的最大数目 --connlimit-mask x 限定某个网络的最大并发连接数，x为32时，代表具体的主机，为默认值。x的值一般是代表A,B,C三类网络的8,16,24。至于支不支持变长子网，待研究。