免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dreamice
打印 上一主题 下一主题

讨论一下:如何限制单个IP在指定时间内的连接数限制 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-03-18 16:40 |显示全部楼层
原帖由 dreamice 于 2009-3-18 16:03 发表
发个讨论题目吧:

如何有效的限制单个IP在指定时间内的连接数?或者说流量访问限制?
这个应该是基于conntrack来实现吧。

应该换个思路考虑:如何在某时间限制某数量的连接
根据 xt_connlimit.c 提供的功能,可以做到限制某连接多少个连接数
现在差的就是时间,但好在有 xt_time.c 可以做到
因此只要在特定时间做 connlimit,或者用把 time 和 connlimit 一起用即可


统计可以改写 connlimit,他能限制,就必然有统计,你只要做输出接口就行了

论坛徽章:
0
2 [报告]
发表于 2009-03-18 18:44 |显示全部楼层
原帖由 dreamice 于 2009-3-18 18:17 发表


看来改一下这个connlimit模块就可以定制自己的需求了
回去研究研究

前面我自己说 “根据 xt_connlimit.c 提供的功能,可以做到限制某连接多少个连接数”
说的这是什么话啊,应该是 “某 IP”

论坛徽章:
0
3 [报告]
发表于 2009-03-19 09:37 |显示全部楼层
原帖由 richardhesidu 于 2009-3-19 07:54 发表
说到流量限制,我觉得这样实现起来可能更简单。
你可以用connlimit限制最多并行连接为5个。当完成一个连接,把connlimit限制连接数--,等待一定时间(比如15分钟),再将connlimit限制连接数++。

问题就是如何判断“当完成一个连接”
由于自身并非终端 socket,所以很难断定这个 stream 的状态
netfilter 中 conntrack 对 TCP 的判断都有错误的情况,更何况 UDP 这种无连接协议呢?

论坛徽章:
0
4 [报告]
发表于 2009-03-19 11:15 |显示全部楼层
dreamice 有兴趣可以看一下 connlimit 的代码
它只分析 UDP 和 TCP 协议
对于 UDP 协议,他会判断 NEW 包后有没有 REPLY 包,如果有则视为连接建立
对于 TCP 协议,除了有 UDP 的判断方式以外,还针对 TCP 的部分 flag 进行了判断,比如 RST、FIN 等,强行使自己的连接计数 -1

论坛徽章:
0
5 [报告]
发表于 2009-03-19 12:30 |显示全部楼层
原帖由 dreamice 于 2009-3-19 12:20 发表


白金兄说得是xt_limit.c这个文件么?
感觉它还有个时间值,暂时没有研究透这个,不知道是否可以设定时间,来支持定时内的链接限制。

哦不是,我说的是 xt_connlimit 这个
limit 是用来匹配单位时间内的包速率的
connlimit 是用 hash 来限制某网段内每 IP 连接数的

论坛徽章:
0
6 [报告]
发表于 2009-03-19 14:21 |显示全部楼层
原帖由 dreamice 于 2009-3-19 14:00 发表
多谢白金兄指点

客气,头像里的 BB 的 PP 让我打两下,好想拍拍

论坛徽章:
0
7 [报告]
发表于 2009-03-19 21:21 |显示全部楼层
原帖由 gejiajie_01 于 2009-3-19 19:10 发表


但UPD可以控制他的发包数,比如一秒内sip发多少包

但是这好像和控制连接数无关,UDP 发出去了不代表连接就建立了

论坛徽章:
0
8 [报告]
发表于 2009-03-22 11:44 |显示全部楼层
原帖由 刘世伟 于 2009-3-22 09:03 发表
connlimit不行的, 只能控制tcp,
要用hashlimit , 對源ip做hash運算,然后落到不同的池子里, 池子滿了的就限制。
iptables有hashlimit,  connlimit模塊好像已經淘汰了

connlimit 是可以的,他对 UDP 包也进行了状态检测(2.6.23+)

论坛徽章:
0
9 [报告]
发表于 2009-03-23 09:36 |显示全部楼层
原帖由 dreamice 于 2009-3-23 09:09 发表


hashlimit,  connlimit这两者之间有什么差别?

一个是限制每连接包速率的
一个是限制每连接连接数的
二者有功能不同
hashlimit 可以看做是 limit 模块的“每 IP”升级版,而 connlimit 是单独另一个功能模块,只不过相对 2.4 内核来说,2.6 内核加入了对 UDP 的控制

论坛徽章:
0
10 [报告]
发表于 2009-03-23 15:32 |显示全部楼层
原帖由 dreamice 于 2009-3-23 10:16 发表


白金兄说得这个每连接连接数应该是每IP吧,呵呵。
看来,这两个东西加起来应该很有用啊

晕,我又开始语无伦次了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP