如何限制用户访问服务器的总流量?

2016-01-06 08:44:41 +08:00
 ranzige

公司用的一个 discuz 论坛 x3.2 ( centos ),不知道是否是 discuz 有漏洞,这几天发现有人不停地下载附件,当天日志显示此 IP 用了 100G (阿里云,按带宽付费)。我们已经把这个 IP 封了,但是无奈 ADSL 重新拨号后 IP 就会不同,所以封单个 IP 治标不治本。
因此,我想请问各位高手以下问题:
1 、能不能限制每个 IP 每天只能从服务器下载 1G 的文件,超过后不再下载。(注意,这里不是限制每个用户下载速度,而是总流量)
2 、怎样禁止多线程下载(防迅雷之类)?
3 、日志是从阿里云下载,顺便求一个好用的日志分析工具

6301 次点击
所在节点    Linux
33 条回复
ayouwei
2016-01-06 11:13:19 +08:00
大部分 web server 都有 rate limit 功能呀, 把下载服务拆分出来单独配策略。 其实针对 url pattern 也行,只是不够清爽
crowds
2016-01-06 13:47:52 +08:00
限速不就好了 单个 ip 限速 50k 一天也下不了多少
aec4d
2016-01-06 14:16:35 +08:00
如果你会写代码修改逻辑 下载附件存储到了阿里云 OSS(OSS 可以生成临时访问 URL)
那么你可以尝试使用 OSS 的临时文件访问功能 比如将下载链接访问做统计 该链接不是直接的下载链接 而是一个 302 跳转 如果用户访问链接次数小于最大次数那么返回一个 60 秒或者 30 秒的临时访问的 URL 就可以了
我了解过阿里云、七牛、又拍 它们都没有直接的限定一个文件被某 IP 下载几次的方法 甚至连生成一次性访问 URL 的方法都没有
gamexg
2016-01-06 14:32:47 +08:00
@aec4d 七牛 生成的连接可以自己设置有效期。
aec4d
2016-01-06 14:42:27 +08:00
@gamexg 各厂都有这功能,然而有效期并不能很好的防止资源被恶意访问 我设置了有效期很可能是我希望资源不被反反复复下载造成流量浪费
比如一个文件设置 30 秒有效期 我可以通过程序让在 30 秒内就创建几十几百个下载访问(假如一个文件是 1G 大小会造成多大的流量浪费)
各个云服务提供商并没有提供对每个 URL 的访问流量控制(比如这个 URL 最多只能消耗 1G 流量)
chuhemiao
2016-01-06 15:46:13 +08:00
22+1
ryd994
2016-01-06 17:22:05 +08:00
文件服务器上限速限频率啊
ToughGuy
2016-01-06 17:43:51 +08:00
1. 感觉限制每个用户的下载速度和并发连接数会更简单有效一些, webserver 都有现成的模块
2. 拒绝掉 HTTP HEADER 包含 Accept-Ranges 头的请求即可 (Apache, NGINX 网上有现成方法)
3. awstats (WEB 可以用 jawstats. 有点老了,不过还可以凑合着用)
wudanyang
2016-01-07 10:20:12 +08:00
阿里云不是有个按月付费吗
ranzige
2016-01-07 11:25:04 +08:00
@wudanyang 不想让用户把网站全下完
wudanyang
2016-01-07 18:45:16 +08:00
@ranzige 没有下载限制,比方说只有等级达到多少才能下载,只有做成什么任务才能下载.
ranzige
2016-01-08 08:36:17 +08:00
@wudanyang 有,但是怀疑有用户找到了 discuz 漏洞,可以跳过
ranzige
2016-01-09 08:36:16 +08:00
反馈一下,现在使用 mod_bw 来控制流量。使用 goaccess 来监控流量(分析日志)。针对单 IP 的控制还是没有找到。防迅雷也没有找到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/248664

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX