用iptables的connlimit模块限制并发连接数
作者:linux120 发布时间:June 3, 2014 分类:服务器配置
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。至于支不支持变长子网,待研究。