接口一直被人请求有什么办法解决 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生的内容
dai269619118
V2EX    程序员

接口一直被人请求有什么办法解决

  •  
  •   dai269619118 2017-02-23 15:43:18 +08:00 4014 次点击
    这是一个创建于 3169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每秒几百到几千的并发,占用好多资源

    刚开始以为直接用 nginx 限制下速度就可以了和 ip

    仔细一看请求的 ip 都是不一样的

    有什么办法处理这个问题?

    第 1 条附言    2017-02-24 17:44:12 +08:00
    服务器被人攻击了 1 天了
    心塞,应该是 cc 攻击
    刚做了 2 个月有点起色了 就人攻击了
    17 条回复    2017-02-25 23:06:56 +08:00
    scloud
        1
    scloud  
       2017-02-23 15:49:49 +08:00   1
    1.接口添加签名验证

    2.代码添加访问速率检测

    3.refer,cookie 等信息验证
    234747005
        2
    234747005  
       2017-02-23 15:52:57 +08:00   1
    if ($cookie_say != "hbnl$remote_addr"){
    add_header Set-Cookie "say=hbnl$remote_addr";
    rewrite .* "$scheme://$host$uri" redirect;
    }
    234747005
        3
    234747005  
       2017-02-23 15:53:17 +08:00   1
    if ($http_user_agent ~* "Netscape/*|Chrome/19/*|WordPress/*|BaiduSpider/*|Baiduspider/*|Gecko/20100101|Firefox/3") {
    return 403;
    }
    sampeng
        4
    sampeng  
       2017-02-23 15:56:52 +08:00   2
    楼上这个不可取。因为依然到达了程序层。

    得在 nginx 层加防护。好像 iptable 就能禁止一个 ip 多次访问。

    ip 再多不可能无上限,用脚本一算就知道有多少 ip 了。每个 ip 是不是只在请求这个接口,你应该有其他接口。如果一个 ip 只访问了 A 接口却没访问 B 接口。那你还不干掉他等着过年啊。

    但这可能会误杀,小区宽带都是相同 ip 。

    所以折中的方案是用个东西算这个 ip 是否有效请求。然后写一个黑名单, iptable 拦在外面。

    这个东西是业务程序里还是直接分析 nginx 日志。就看你个人了。。
    一般情况下分析 nginx 日志生成 ip 黑名单应该可以防护很大一坨恶意攻击。

    另外服务器内核配置快速释放端口这样的优化,可以缓解资源被占用的情况。。每秒几百上千有点夸张了。几千个端口开着。很吃 cpu 的。。直接限制在 1000 个。其他的排队等去吧。
    scloud
        5
    scloud  
       2017-02-23 16:02:44 +08:00   1
    4.nginx_lua 配合 redis ,直接在 nginx 层去处理。上面 1,2,3 可以快速处理非法无效请求。后续优化可以用 4.
    div id="r_4071178" class="cell">
    airqj
        6
    airqj  
       2017-02-23 16:26:04 +08:00
    airqj
        7
    airqj  
       2017-02-23 16:27:07 +08:00
    直接用 iptables 封掉请求次数太多的 IP
    这比在 web server 层效率高很多
    mhycy
        8
    mhycy  
       2017-02-23 16:40:25 +08:00
    搭车求问
    在此需求场景下镜像流量应该可以实现请求审计能力且不影响主干业务的性能
    不知现在有没有合适的开源解决方案?
    salmon5
        9
    salmon5  
       2017-02-23 16:53:26 +08:00   1
    iptables 限制?如果有正常的业务突发并发呢?真是码农思维。
    业务层做判断和限制。
    既然知道你的接口规范了,肯定是合法的业务接入。
    Felldeadbird
        10
    Felldeadbird  
       2017-02-23 16:53:48 +08:00   1
    先看你的接口属性啊。私有的话,上动态 token ,加验证。反正增加对方的成本。在访问这些私有请求接口错误次数的,动态写入黑名单。 然后交由 nginx 和 iptables 去处理黑名单。

    公开接口的话,限制单个 IP 请求次数咯。否则就是升级硬件。
    holyzhou
        11
    holyzhou  
       2017-02-23 16:59:54 +08:00   1
    @salmon5
    @scloud
    @sampeng
    从主机层面做这个 一点都不优雅 还要扯到 iptables , 这是比较典型的运维式的解决办法了 ,觉得就应该从业务层面做。
    donyee
        12
    donyee  
       2017-02-23 17:20:37 +08:00
    收费,不给就统计损失 报警...
    这个思路怎么样?
    em70
        13
    em70  
       2017-02-23 17:27:35 +08:00 via Android   1
    看下日志,先把异常 UA 的封了,然后接口签名加密,再写个脚本每半个小时自动打印下前 100 位的 IP 访问列表及访问数,如果超过正常值就自动防火墙黑名单
    fengxsong
        14
    fengxsong  
       2017-02-24 09:14:02 +08:00   1
    既然是用 jtw 方式请求接口的话。。在前端 nginx 上判断有无这个 cookie 直接 return 403 就好了。。 LS 的 ngx_lua 也是一个方案,动态屏蔽这些很容易实现。
    liyu4
        15
    liyu4  
       2017-02-24 10:24:51 +08:00 via iPhone
    ludan110
        16
    ludan110  
       2017-02-24 14:58:22 +08:00
    @holyzhou 如果是动态 ip 呢 一直在变
    realpg
        17
    realpg  
    PRO
       2017-02-25 23:06:56 +08:00   1
    最省事的办法前面顶个百度云减速, 360 网站不安全卫士之类的 CDN
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3189 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powere by solitude
    VERSION: 3.9.8.5 24ms UTC 11:42 PVG 19:42 LAX 04:42 JFK 07:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86