V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  站长

服务器被攻击了,第一次,有点无所适从

  •  
  •   nnegier · 13 天前 · 5594 次点击

    服务器是阿里云买的一个 2 核 2G 的 ECS ,没有开通什么高防,因为收费和不知道其原理的原因(怕超量扣很多钱),所以我现在连什么情况都不知道,我估计是大量的接口请求导致的,因为 CPU 飙升 100%,之前都是 2%到 3%。

    我目前是关掉了域名解析,服务器重启,暂避锋芒,不关掉解析 CPU 掉不下来。然后现在正常了。

    我目前主要倒不是生气,倒有点觉得技不如人,可能是没有对我造成太大的损失,那产品就没几个用户,真不知道攻击者想啥,但大概率攻击者是用户之一。我想请问有什么书籍可以让我对 Web 防护有一些策略吗,我趁此机会好好学习一下。另外感谢那位哥只攻击了我一个域名。

    另外我还想问问,这种请求攻击是不是就是无解?我目前想到的是短时间禁掉高频访问的 ip ,就是 tcp/ip 流量进来我就给那个 ip 给 close 了,这个有用吗?说实话这种攻击我感觉挺无力的,除了攻击者不想搞事了,还有一种办法就是进局子了,不然没完没了。

    至于具体的情况,是不是我说的请求攻击,我会先问一下阿里云那面,也希望攻击者歇歇,不然真得报警了。最后,求书,求点策略,我是搞 java 的,但这里好像并不用限定这个开发语言。

    第 1 条附言  ·  12 天前
    嗯,谢谢大家的回复啊,可以推荐一本书吗? Web 攻防实战的。另外我为什么确定是攻击呢,我关掉域名解析,CPU 就下来了,另外其实重启也没有效果,我正常的应用服务 jar 都还没启动呢,cpu 还是满了,所以我不知道从哪一层去防止这样的攻击。
    第 2 条附言  ·  12 天前
    另外我怎样去及时的去检测到这个服务器出问题呢( cpu100%)?
    47 条回复    2024-04-28 17:56:07 +08:00
    ab
        1
    ab  
       13 天前 via iPhone   ❤️ 3
    cloudflare 先顶一顶,再慢慢了解防御的事
    StinkyTofus
        2
    StinkyTofus  
       13 天前   ❤️ 4
    又不是 DDOS 攻击,简单的 API 请求就能把你的 CPU 打满, 而不是带宽被打满,说明你的代码写的有问题,还是好好优化一下吧。
    nnegier
        3
    nnegier  
    OP
       13 天前
    @ab 是 APP
    nnegier
        4
    nnegier  
    OP
       13 天前
    @StinkyTofus DDOS 也是请求吧。代码的话就是简单的 Spring 全家桶,那硬要说问题,就是机器配置不高,带宽也不大
    nnegier
        5
    nnegier  
    OP
       13 天前
    @StinkyTofus 你的意思是 DDOS 不会打满 CPU 吗?我带宽不知道怎么看实时流量,所以没有留意到,不知道带宽有没有满,至于具体是 TCP 握手攻击,还是大量完整的请求,只有等我问问阿里云看看了
    StinkyTofus
        6
    StinkyTofus  
       13 天前
    @nnegier #4 按照你的描述, 这个应该是 CC 攻击,DDOS 是直接发数据包把你的网络承载能力打垮,到不了协议层, 云服务商会把你的 IP 扔到黑洞里。
    ON9
        7
    ON9  
       13 天前 via Android
    @ab cf 的盾要把域名放到 cf 里解析吧?那 5 秒盾+超慢的 dns 解析简直灾难
    proxytoworld
        8
    proxytoworld  
       13 天前
    DDOS 不算啥高深的攻击,纯粹是大力出奇迹
    proxytoworld
        9
    proxytoworld  
       13 天前
    @StinkyTofus DDOS 包括 CC 攻击
    datocp
        10
    datocp  
       13 天前 via Android
    这种东西无解?
    当年在这里免费开梯子,然后被不知道哪条狗 ddos 了。。。唯一一次。

    记得当年做百度推广,部分关键词高达 30 块,1 天 3000 块不到的预算,怎么让竞争对手下线,那就是点它家关键词。
    既然阿里有这种服务,难不成监守自盗。。。cc 这种 hashlimit 针对 ip 的并发限制,应该也是难。
    JensenQian
        11
    JensenQian  
       13 天前
    没什么用
    就是简单的上带防御的服务器和 cdn ,比方说 ovh+cf ,设置好规则,然后硬抗
    才 2 核 2G 不是很容易死吗,一般为了抗都是买独立服务器的
    x86
        12
    x86  
       12 天前
    如果是 ddos ,你关闭域名解析也没用,源站 ip 已经暴露
    linyongxin
        13
    linyongxin  
       12 天前
    最重要的是隐藏好源站 IP ,套上 CloudFlare ,如果无交互网站直接全站静态化放在 CloudFlare pages
    june4
        14
    june4  
       12 天前
    看你的问题不是什么大攻击,很可能写一个 nftables 配置全自动把每天访问超次数的 ip 全加黑名单就解决了
    coderzhangsan
        15
    coderzhangsan  
       12 天前
    没几个用户 就这机器配置 也值得 DDOS 攻击吗 先设置下 ip 黑名单拦截试下效果
    wuhao
        16
    wuhao  
       12 天前
    相信我,不过是什么采集器之类的东西,没人 ddos 你
    david98
        17
    david98  
       12 天前
    如果是带宽打满了 你封 IP 什么的都没有用,因为正常的请求也进不来,在云供应商那因为超限就给丢了。
    CDN 如果买了高防服务还好,如果没有买,很多产品合同会说明,遇到攻击会回源,让你的服务器自己扛。
    如果确认是攻击,报警也是可以的,但能不能很好受理就是另外一回事了。
    xinzi
        18
    xinzi  
       12 天前
    雷池 waf
    foam
        19
    foam  
       12 天前 via Android
    @datocp 大概率是被收录到免费代理列表了,大家伙们更新一下免费代理池,就用上了你的代理,大概率不是恶意 ddos
    jiuhuicinv
        20
    jiuhuicinv  
       12 天前
    关机
    lasuar
        21
    lasuar  
       12 天前
    重要业务那只能上高防,小业务就是多域名,cf 是低层本方案。
    dode
        22
    dode  
       12 天前
    要求登录
    zbatman
        23
    zbatman  
       12 天前 via Android
    带宽有多少啊,印象中阿里云带宽很贵,2h2g 这种低配的,带宽也就 10M ,跑满也不至于 cpu 占满吧
    Nosub
        24
    Nosub  
       12 天前 via Android
    建议看看这个,其实阿里云有完整的分析流程,攻击你服务器没有价值哦,https://nosub.net/posts/p/100
    xinge666
        25
    xinge666  
       12 天前 via iPhone
    99 元那个 2C2G 吗,那个 CPU 和硬盘的性能巨差,基本上稍微压力大点就 99%,编译安装个软件都要半天
    Nosub
        26
    Nosub  
       12 天前 via iPhone
    @xinge666 此言差矣,同款服务器,我服务器跑了 Java ,postgresql ,redis ,rabbitMQ ,NGINX ,很稳定啊。
    stobacco
        27
    stobacco  
       12 天前
    看对方是 cc 攻击还是 ddos 攻击,如果是 cc 的话,设置一下请求策略,比如一个 ip 一分钟最大请求次数等等。

    如果是 ddos 的话,只能硬抗或者拔网线,防御方法就是尽量不要泄露服务器真实 ip ,比如不要将域名解析直接指向服务器 ip ,而是套一层 cdn 等方式,当然还是有方式可以溯源到你的服务器真实 ip ,这里有一篇文章,可以看一下: https://www.51cto.com/article/624770.html
    darkengine
        28
    darkengine  
       12 天前
    SSH 还能连上吗,进去看什么进程占的 CPU
    nnegier
        29
    nnegier  
    OP
       12 天前 via Android
    @stobacco APP 接口域名可以套 cdn 吗?静态网页等资源我是有套 cdn 的
    nnegier
        30
    nnegier  
    OP
       12 天前 via Android
    @darkengine 等我买个 1 个月的服务器再好好研究这个,那个服务器有重要服务,目前是直接先解决问题,重启断故障域名解析解决
    darkengine
        31
    darkengine  
       12 天前
    还有比较基础的就是 Redis, MySQL 的端口如果开放了极容易被挂挖矿脚本,CPU 100%就很正常了
    totoro52
        32
    totoro52  
       12 天前
    你不会域名直接解析到服务器上吧? 单纯的 CC 可以套 CF 或者一些国内免费的 DNS 去隐藏服务器的真实 IP ,而且基本都带 CC 防护
    xinge666
        33
    xinge666  
       12 天前 via iPhone
    @Nosub #26 奇怪了,我 apt upgrade 都很慢。可能限制性能的太严重了
    bug123
        34
    bug123  
       12 天前
    又不是 ddos ,不用套 cloudflare ,nginx 限制单个 ip 频率就行了
    Hopetree
        35
    Hopetree  
       12 天前
    我之前网站有的页面被单个 IP 有规律的频繁请求,频率高但是不是并发请求(但是其实对我没有任何影响),后面我写了个脚本,去查 Nginx 日志,把这种在一定时间内高频率请求的都丢黑名单里。其实 Nginx 自身也可以配置请求禁用,但是我感觉没自己写的灵活
    SillyGod
        36
    SillyGod  
       12 天前
    关掉解析就没事了,显然不可能是真正的攻击,因为对方甚至都没打你 IP 。
    大抵就是项目的 BUG ,如果真是谁发现了你的站随便 CC 几下玩玩,那开个 WAF 防 CC 就完了(高频把请求 IP 拉黑)
    stobacco
        37
    stobacco  
       12 天前
    @nnegier #29 当然可以,在 cdn 设置里面设置规则,所有全不缓存就行了
    WoneFrank
        38
    WoneFrank  
       12 天前 via iPhone
    先定位问题在哪,你的 web 服务如果是单 jar 包起的,那么如果没起 jar 包没开 web 服务 cpu 还是 100%,或者高占用,就说明是别的进程占了,不是 web 的问题,需要一步步看。

    你如果提供服务,可以注册接口放在 cloudflare 后面,正常业务和其他接口就不用套了,log 细一点,如果有人登陆后打接口,你从 log 可以看到 cookie 之类的就能定位是谁了
    robinchina
        39
    robinchina  
       12 天前
    封 IP ,可能是爬虫····
    biglee0304
        40
    biglee0304  
       12 天前 via iPhone
    接 cdn ,cdn 上配置一些现成的限流、封禁规则,做好带宽上限设置,免得睡一觉起来天价账单
    v2bili
        41
    v2bili  
       12 天前
    自从很久之前 drupal 漏洞被黑,我就是 docker 部署,隔离 mysql db 。只用自己开发的 app server 。
    ab
        42
    ab  
       12 天前
    @ON9
    5 秒盾那也不得已,楼主已经停服了.
    dns 慢这个其实是个迷思,解析请求的也是本地节点的缓存。
    niubee1
        43
    niubee1  
       11 天前
    1. 首先你得定位攻击的类型,是 SYN Flood ,HTTP Flood ,还是慢速攻击。从你的描述上来看,CPU 异常升高的话,应该是 SYN Flood 。
    2. 确定抵御的方案,知道攻击类型的话,针对攻击的特征,需要确定防御的策略。因为 SYN 攻击是针对 SYN 的,所以先:sysctl -a | grep syn 看看本机的设置
    其中 tcp_max_syn_backlog 是 SYN 队列的长度,tcp_syncookies 是一个开关,是否打开 SYN Cookie 功能,该功能可以防止部分 SYN 攻击。tcp_synack_retries 和 tcp_syn_retries 定义 SYN 的重试次数。那么先 加大 SYN 队列长度,然后减少重试次数(减少重试次数有副作用,就是在网络不稳定的地区访问,正常访问失败几率会升高),另外就是要加上访问频率限制,比如超过每秒一次的 IP 就 ban 掉 30 秒。

    还有一种方式就是挂 cloudflare ,CF 的机器肯定都是有做好上面我描述的抗 DOS 的设置了,另外一个好处是,有更多的 IP 来参与分流,可以提高你的冗余度。

    另,阿里云的云监控里可以设置对主机的状态监控,CPU ,内存,磁盘,可以设置阈值,超过了就给你发短信
    M5tuA
        44
    M5tuA  
       11 天前
    歪个楼,今天 ssh 哥是休息了吗
    smalltechnology
        45
    smalltechnology  
       11 天前
    所以先挂 cf 吧~
    nnegier
        46
    nnegier  
    OP
       10 天前 via Android
    @stobacco #37 用腾讯 cdn 套 App 域名接口,不知道为何没成功,显示是超时,也就是服务器无响应,设置了无缓存,cname 验证成功状态。
    ooooyeahbabe
        47
    ooooyeahbabe  
       4 天前
    开 WAF
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   941 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:29 · PVG 07:29 · LAX 16:29 · JFK 19:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.