关于connlimit使用的问题。
通过安装补丁,connlimit模块已经好用,使用如下规则保护WEB,防止太多连接,
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 2 -j DROP
但问题是,一个正常WEB页面包含很多图片和脚本,因此访问这些页面时,必然要产生很多并发连接,这样,上述规则导致访问这些WEB页面时速度很慢,能过增加above数值,比如above 32,这样访问就完全正常了,但是调整32或较高数值时,这时的connlimit好象意义已经不大了,因此特向各位大侠请教:
如何在设置为above 2时,依然能以正常速度访问web页面?我想应该有办法的。
谢谢各位。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
>>这样访问就完全正常了,但是调整32或较高数值时,这时的connlimit好象意义已经不大了,因此特向各位大侠请教:
怎么会没有意义呢.太小的话,并且是通过内网访问你,岂不是许多人都上不去?
>>如何在设置为above 2时,依然能以正常速度访问web页面?我想应该有办法的。
没有,HTTP协议的原理告诉我们必须设置大点
本来想用connlimit限制每IP并发连接WEB在2个以内,设置成32是可以,但已经达不到限制的目的了,而且connlimit还浪费资源,这不是还不如不用connlimit呢?
>> HTTP协议的原理告诉我们必须设置大点
的确,四层和七层是不一样的,虽然 HTTP 没用了断开了,但 conntrack 里仍有记录存在
>>而且connlimit还浪费资源,这不是还不如不用connlimit呢?
的确connlimit是比较费资源的,特别是在smp上
>> 的确 connlimit 是比较费资源的,特别是在 smp 上
为什么说的确是用在 smp 上呢?
我看了 connlimit 的源代码,用的是 hash,只能看懂这些,能否讲解一下与 smp 的关系呢?
因为为了保证多个CPU的互斥访问,必须要锁定记录结构
struct ipt_connlimit_data {
spinlock_t lock;
struct list_head iphash[256];
};
spin_lock_bh(&data->lock);
假如多个CPU同时访问它的话,只能有一个CPU能够继续执行,其它的必须等待,这就浪费资源了