用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。至于支不支持变长子网,待研究。

mysqlcheck自动优化数据表

作者:linux120 发布时间:June 1, 2014 分类:服务器配置

运行一段时间以后mysql数据表会产生很多碎片,需要优化,可以手工执行以下命令:
mysqlcheck -Aos -u USER -pPASS

也可以每天早上4点自动执行优化:
0 4 * * * mysqlcheck -Aos -u USER -pPASS > /dev/null 2>&1

innodb是不支持碎片整理的,所以我们绕过他:
for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; do mysql -e "optimize table $i"; done