V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ranzige
V2EX  ›  Linux

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

  •  
  •   ranzige · 2016-01-06 08:44:41 +08:00 · 6426 次点击
    这是一个创建于 3237 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    33 条回复    2016-01-09 08:36:16 +08:00
    supman
        1
    supman  
       2016-01-06 08:57:24 +08:00 via iPad
    iptables
    zencoding
        2
    zencoding  
       2016-01-06 08:58:37 +08:00
    iptables
    des
        3
    des  
       2016-01-06 09:00:28 +08:00
    奇了怪了, 首页显示有两个回复, 进来只有一个回复, 不登陆看不到回复
    testisitok
        4
    testisitok  
       2016-01-06 09:04:47 +08:00 via Android
    阿里云 OSS 吗?
    那东西是坑,提意见说防 DD , CC ,他说没有
    潜台词是,要是被攻击,你出钱就是了
    BOYPT
        5
    BOYPT  
       2016-01-06 09:05:27 +08:00
    首先你要确定你怎么区分一个用户。
    ranzige
        6
    ranzige  
    OP
       2016-01-06 09:30:01 +08:00
    @BOYPT 我现在想通过 IP
    @testisitok 不是被攻击,是恶意下载 ,不停拉流量 都是钱啊
    @supman 防火墙上控制吗
    imxieke
        7
    imxieke  
       2016-01-06 09:37:30 +08:00 via Android
    已经从 discuz 转至 phpwind 附件托管在七牛 图片在 upyun 申请的赞助 5T 流量 不过我记得 后台可以设置禁止上传与下载附件吧。
    dong3580
        8
    dong3580  
       2016-01-06 09:43:26 +08:00
    是不是附件下载不需要校验登录?
    拉到某些离线下载工具上,就会收到这样不断请求的 IP.
    ranzige
        9
    ranzige  
    OP
       2016-01-06 09:44:34 +08:00
    @dong3580 需要校验,但是怀疑有人恶意下载
    ooxxcc
        10
    ooxxcc  
       2016-01-06 09:46:14 +08:00
    下载附件需要积分不就好了
    Delbert
        11
    Delbert  
       2016-01-06 09:47:03 +08:00 via Android
    @des 应该是你把某人加到黑名单,所以才少了一条回复吧?
    datocp
        12
    datocp  
       2016-01-06 09:52:21 +08:00 via Android
    datocp
        13
    datocp  
       2016-01-06 09:53:02 +08:00 via Android
    ranzige
        14
    ranzige  
    OP
       2016-01-06 09:54:25 +08:00
    @ooxxcc 是需要积分的,后台看到此用户没有下载多少附件,日志中却有很多
    des
        15
    des  
       2016-01-06 09:55:18 +08:00
    @Delbert 不是啊, 你没发现二楼不见了吗?
    Delbert
        16
    Delbert  
       2016-01-06 09:57:03 +08:00 via Android
    @des 是唉,好神奇
    KyoHiroki
        17
    KyoHiroki  
       2016-01-06 09:57:56 +08:00
    @des 相同的回复会被折叠
    UBER
        18
    UBER  
       2016-01-06 10:02:53 +08:00
    https://github.com/ywgx/bin/blob/d78bd4554368f22940fac1cd6e712fb70309e185/safed.sh


    楼主 看看这个脚本怎么处理的,可以临时解决你的问题
    liuhaotian
        19
    liuhaotian  
       2016-01-06 10:09:23 +08:00 via iPhone
    @imxieke upyun 怎么申请赞助的啊
    cst4you
        20
    cst4you  
       2016-01-06 10:40:15 +08:00
    @imxieke wocao 5T 怎么申请的
    ayouwei
        21
    ayouwei  
       2016-01-06 11:13:19 +08:00
    大部分 web server 都有 rate limit 功能呀, 把下载服务拆分出来单独配策略。 其实针对 url pattern 也行,只是不够清爽
    crowds
        22
    crowds  
       2016-01-06 13:47:52 +08:00 via Android
    限速不就好了 单个 ip 限速 50k 一天也下不了多少
    aec4d
        23
    aec4d  
       2016-01-06 14:16:35 +08:00
    如果你会写代码修改逻辑 下载附件存储到了阿里云 OSS(OSS 可以生成临时访问 URL)
    那么你可以尝试使用 OSS 的临时文件访问功能 比如将下载链接访问做统计 该链接不是直接的下载链接 而是一个 302 跳转 如果用户访问链接次数小于最大次数那么返回一个 60 秒或者 30 秒的临时访问的 URL 就可以了
    我了解过阿里云、七牛、又拍 它们都没有直接的限定一个文件被某 IP 下载几次的方法 甚至连生成一次性访问 URL 的方法都没有
    gamexg
        24
    gamexg  
       2016-01-06 14:32:47 +08:00
    @aec4d 七牛 生成的连接可以自己设置有效期。
    aec4d
        25
    aec4d  
       2016-01-06 14:42:27 +08:00
    @gamexg 各厂都有这功能,然而有效期并不能很好的防止资源被恶意访问 我设置了有效期很可能是我希望资源不被反反复复下载造成流量浪费
    比如一个文件设置 30 秒有效期 我可以通过程序让在 30 秒内就创建几十几百个下载访问(假如一个文件是 1G 大小会造成多大的流量浪费)
    各个云服务提供商并没有提供对每个 URL 的访问流量控制(比如这个 URL 最多只能消耗 1G 流量)
    chuhemiao
        26
    chuhemiao  
       2016-01-06 15:46:13 +08:00
    22+1
    ryd994
        27
    ryd994  
       2016-01-06 17:22:05 +08:00 via Android
    文件服务器上限速限频率啊
    ToughGuy
        28
    ToughGuy  
       2016-01-06 17:43:51 +08:00
    1. 感觉限制每个用户的下载速度和并发连接数会更简单有效一些, webserver 都有现成的模块
    2. 拒绝掉 HTTP HEADER 包含 Accept-Ranges 头的请求即可 (Apache, NGINX 网上有现成方法)
    3. awstats (WEB 可以用 jawstats. 有点老了,不过还可以凑合着用)
    wudanyang
        29
    wudanyang  
       2016-01-07 10:20:12 +08:00
    阿里云不是有个按月付费吗
    ranzige
        30
    ranzige  
    OP
       2016-01-07 11:25:04 +08:00
    @wudanyang 不想让用户把网站全下完
    wudanyang
        31
    wudanyang  
       2016-01-07 18:45:16 +08:00
    @ranzige 没有下载限制,比方说只有等级达到多少才能下载,只有做成什么任务才能下载.
    ranzige
        32
    ranzige  
    OP
       2016-01-08 08:36:17 +08:00
    @wudanyang 有,但是怀疑有用户找到了 discuz 漏洞,可以跳过
    ranzige
        33
    ranzige  
    OP
       2016-01-09 08:36:16 +08:00
    反馈一下,现在使用 mod_bw 来控制流量。使用 goaccess 来监控流量(分析日志)。针对单 IP 的控制还是没有找到。防迅雷也没有找到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1182 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:51 · PVG 07:51 · LAX 15:51 · JFK 18:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.