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

服务器被黑好蛋疼 ...记录下 随便求助

  •  
  •   LT ·
    huyinghuan · 2016-07-18 01:40:39 +08:00 · 7303 次点击
    这是一个创建于 3055 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    首先服务器不是我 运营的是个游戏网站,可能被竞争对手的弄了。。。然后我是服务器菜鸟一顿乱折腾,到现在也还没折腾好。

    7 月 15 日 傍晚

    从阿里云日志来看 流量异常是 7 月 15 号开始, 网站被 dos ,服务器根目录出现大量未知缓冲文件。 这是有个昵称 360 白帽子 说网站有漏洞需要修复,上报了乌云没有通过审核(因为朋友没有去提交厂商认证?) 然后直接找的朋友,并且提供了 补丁文件,随后漏洞修复。 然后用 360 服务器杀毒杀了几个木马。 还是没办法访问。 用 iftop 发现流量异常。朋友找我,让我看看,,可是我半点相关安全经验也没有,只能硬着头皮上.

    7 月 16 日 凌晨

    由于晚上和女朋友在一起(秀波恩爱) 没有在电脑旁,晚上 11 点回去以后才开始检查。

    iftop 发现

    
    AY13120620245xxx	   => 10.141.xx.xx                 0b   2.xMb  
                              <=                          0b   3x.xMb
    

    删掉修改了下数据, 反正就是上行流量 30 多兆,下行流量 2M 多。 朋友说过先提了工单给阿里云,要查 10.141 这个 ip ,阿里云回复说是本地 ip 非阿里云内网 。 既然这样我就去

    ifconfig
    

    看到了两个网卡 一个 eth0,还有个 eth1 。 eth0 的显示的本机地址是 10.xxx 我打开路由

    route -n
    

    看看是不是被路由网关在前面被黑过程中有篡改。结果发现了 10.xx 几个路由关联的是 eth0 。我不认识,直接删了,(还好有个好习惯预先截图 route -n 的结果)

    然后关闭了 eth0 网卡

    ifconfig eth0 down
    

    接着 iftop , 流量不见了。 悲剧的事情来了,朋友说登陆不上 vps 了。没办法重新启用网卡,还有恢复路由表。 我就猜这些应该是阿里云监控相关的 ip ,我想到自己手上也有几个阿里云服务器,就登陆上去瞅了瞅,嗯也有类似的路由表和网卡。 把这个途径排除。

    nginx access-log

    接着查 nginx 访问日志。 这么高的流量 肯定有外网流量作祟。

    然后果然查到 来自于 106.187.97.172/info.php 的 http-referer . 前面来源是各种 ip ,访问的是同一 url, 然后 url 后面待了些参数类似 说网站被黑之类的拼音。

    然后百度了下 原来这是 DDOS 攻击 的一种 叫啥子 cc 攻击。 木有办法。修改了 nginx 配置

    if ($http_referer ~* ^http:\/\/106\.187\.97\.172.+) {
         return 403;
    }
    

    重启,嗯,都是 403 了。 iftop 来自 10.xx 的流量下降到了 16M 左右。 网站还是不能访问。 现在的流量还是到了服务器,要流量不到服务器还得前面加个防火墙,时间到 凌晨 3 点多。扛不住睡觉

    7 月 17 号

    早上爬起来继续找原因。整理的下服务器上的 nginx 配置。原来朋友自己管理 nginx ,里面配置很多网站,但是把配置文件全部写了到了 nginx.conf 里。一团乱糟糟。强迫症,用 include ,分离到了其他文件夹,也是顺便查是否其他网站也有问题。 结果并没什么卵用。

    关掉 php-fpm. 现在把 php 基本服务关掉,总不可能还有流量吧? 结果还真有,不过不多了只有几十 kb , 而且是每隔 10 多秒的样子出现一次。。嘿嘿 我以为我找到真凶了。。同时开 top 和 iftop ,看看流量出现的时候,那个程序被唤醒了。。。结果是坑爹的 阿里云监控。。。卒。。。

    折腾到吃午饭 毫无头绪。 下午补觉。到了晚上,重开 php-fpm 服务 去找到朋友要相关阿里云后台登陆信息。结果在吸屁股。。囧。等了好一会。 我跟他说是 cc 攻击 他一起挂过 安全宝 后面因为有一部分域名解析出了问题,就没用了, 现在去开开,因为 安全宝 号称 防 DDOS 攻击和 cc 攻击, 然而 他用的是免费的 并没什么卵用。然后安全宝上面没有价格,需要和客服聊报价,就懒得去弄。

    登陆阿里云后台后 ,发现了 有个叫云骑的防火墙 免费的,果断开了 http referer 阻断。结果 数据显示评价 5 分钟 有 15000 次来自于那个 ip 的访问。 这时候 流量下降到了 2M ,但是服务器还是不能访问, nginx 显示状态码 499 。不懂, 求助。

    ╮(╯▽╰)╭ 想到流量还是到了服务器这样子还是不行,还是得从外面阻隔流量。搜索 cc 攻击防护,看到个 360 的广告, 下面是广告时间(开玩笑),有个 360 网站安全。也说是免费的。 既然安全宝 没啥卵用,死马当活马医, DNS 解析切到了 360. 然后 果然 ,阿里云的防火墙流量下来了,下降到 5 分钟大概 300 多次的样子。 nginx 日志还是显示有流量过来,也就是 没有全阻断,也算不错了 。但是 iftop 的流量没降。 访问网站也是 502.

    然后准备到这里来求助。 问题来了

    挖掘机技术哪家强?

    好吧,,我想问的是, 有没有办法看到 php-fpm 服务 执行了哪些文件入口? 阿里云后台显示 数据库连接有 50 多个,以前网站正常的时候 只有 7 个左右。 现在需要找到哪些 php 文件开启了数据库连接,一个个排除应该就可以解决问题了。。。也许吧。。

    后续

    另外我是写前端的。。。 php 真心不懂。。求大神教。。 后续更新进展

    请允许我 @ 两个人来顶吗。。。 @xuedudu @wvv8oo

    39 条回复    2016-07-18 18:23:11 +08:00
    LT
        1
    LT  
    OP
       2016-07-18 02:01:40 +08:00
    突然想到 php 是门解释型语言,只要 php-fpm 服务一开,就有流量这是不科学的呀。 nginx 我都关掉了。。。难道是 php-fpm 被动了手脚?
    ZGLHHH
        2
    ZGLHHH  
       2016-07-18 02:04:17 +08:00
    nginx 搭配 php-fpm 实质是 nginx 通过 FastCGI 反向代理 php-fpm
    --------------------------

    location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock; #反代地址设置
    fastcgi_index index.php; #设置 nginx 首页文件
    include fastcgi.conf;
    }

    --------------------------
    caola
        3
    caola  
       2016-07-18 02:20:46 +08:00
    说实在的防 CC ,可以弄个脚本监控网络的连接数,
    哪个 IP 连接数超过设定值,直接防火墙封掉 IP ,也可根据 http-referer 或 user-agent 特点来封 IP ,
    当然用上 CDN ,对解决这问题还是比较有用的,

    nginx 499 状态码,表示客户端发起请求后,不等待服务器返回数据,就主动断开了。
    3dwelcome
        4
    3dwelcome  
       2016-07-18 02:24:49 +08:00 via Android
    你换个 http 端口看看能不能访问呢?也有可能服务器数据被破坏了。

    如果只是流量攻击、可以找个高手写个端口代理转发、识别出那些非正常访问的 ip 、总能屏蔽完的。
    LT
        5
    LT  
    OP
       2016-07-18 02:33:48 +08:00
    @caola 是不是直接 封 499 状态码的 ip 来的直接 宁杀错不放过。 我去 google 下相关脚本试试 感谢
    LT
        6
    LT  
    OP
       2016-07-18 02:34:20 +08:00
    @3dwelcome 我试试换个端口
    msg7086
        7
    msg7086  
       2016-07-18 02:57:01 +08:00
    如果是单个来源 IP 的攻击的话,直接喂防火墙就好了。
    再高级点,看下 nginx 的 limit_req 插件,遇到频繁访问的直接肛了。
    只要不是流量攻击,什么都好说。
    Silicon
        8
    Silicon  
       2016-07-18 03:59:40 +08:00
    数据应该已经被拖了吧…… DoS 掩饰攻击流量,后门留存,这套路玩的 6 啊

    印象中 MySQL 有一条指令可以查看目前进行的查询:
    ```
    show processlist;

    +--------+--------+-----------+--------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +--------+--------+-----------+--------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
    | 708163 | root | localhost | NULL | Query | 0 | NULL | show processlist |
    | 708174 | test | localhost | test | Query | 2 | Copying to tmp table | select dist.name, dist.filename, count(*)
    from orders_header h
    inner join orders_detail d on h.ord |
    +--------+--------+-----------+--------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    ```
    dxwwym
        9
    dxwwym  
       2016-07-18 08:00:39 +08:00 via iPhone
    你朋友的网站好有价值
    ershisi
        10
    ershisi  
       2016-07-18 08:40:16 +08:00
    这种事情应该先抓包不是?
    asp
        11
    asp  
       2016-07-18 08:55:11 +08:00
    乌云都没通过审核,那你这厂商肯定也大不到那去,好奇是什么洞?发网址出来看看呗
    winsyka
        12
    winsyka  
       2016-07-18 11:02:03 +08:00
    php ddos
    LT
        13
    LT  
    OP
       2016-07-18 11:10:56 +08:00
    @asp 网站 现在一打开就挂
    LT
        14
    LT  
    OP
       2016-07-18 11:11:22 +08:00
    @dxwwym 游戏网址日均 pv 30w-50w 左右
    LT
        15
    LT  
    OP
       2016-07-18 11:11:43 +08:00
    @asp jx3pve.com 现在我已经把它停掉了
    LT
        16
    LT  
    OP
       2016-07-18 11:12:28 +08:00
    @ershisi 抓过包了 很多 ip , status 499. 上了 阿里云的 web 防火墙 还是不行。
    LT
        17
    LT  
    OP
       2016-07-18 11:14:45 +08:00
    @Silicon 我试试 感谢
    LT
        18
    LT  
    OP
       2016-07-18 11:16:36 +08:00
    然后 ps aux 不知道这么多 进程是否正常

    www 26502 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26503 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26504 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26505 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26506 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26507 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26508 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26509 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26510 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26511 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26512 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26513 0.0 0.1 393684 5284 ? S 10:59 0:00 php-fpm: pool www
    www 26514 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26515 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26516 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26517 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26519 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26521 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26522 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26523 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26525 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26527 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26528 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26529 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26531 0.0 0.1 393684 5288 ? S 10:59 0:00 php-fpm: pool www
    www 26533 0.0 0.1 393684 5292 ? S 10:59 0:00 php-fpm: pool www
    www 26535 0.0 0.1 393684 5292 ? S 10:59 0:00 php-fpm: pool www
    www 26537 0.0 0.1 393684 5292 ? S 10:59 0:00 php-fpm: pool www
    www 26539 0.0 0.1 393684 5292 ? S 10:59 0:00 php-fpm: pool www
    www 26540 0.0 0.1 393684 5292 ? S 10:59 0:00 php-fpm: pool www
    www 26541 0.0 0.1 393684 5292 ? S 10:59 0:00 php-fpm: pool www
    LT
        19
    LT  
    OP
       2016-07-18 11:18:45 +08:00
    这是一部分 错误日志, 当把网站打开的时候 就狂刷
    r from upstream, client: 180.253.54.101, server: www.jx3pve.com, request: "GET http://www.jx3pve.com/ HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-cgi.sock", host: "www.jx3pve.com", referrer: "http://www.jx3pve.com/"
    2016/07/18 10:57:23 [error] 26013#0: *8028 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 180.253.54.101, server: www.jx3pve.com, request: "GET http://www.jx3pve.com/ HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-cgi.sock", host: "www.jx3pve.com", referrer: "http://www.jx3pve.com/"
    2016/07/18 10:57:24 [error] 26013#0: *8060 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 180.253.54.101, server: www.jx3pve.com, request: "GET http://www.jx3pve.com/ HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-cgi.sock", host: "www.jx3pve.com", referrer: "http://www.jx3pve.com/"
    2016/07/18 10:57:24 [error] 26013#0: *8081 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 180.253.54.101, server: www.jx3pve.com, request: "GET http://www.jx3pve.com/ HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-cgi.sock", host: "www.jx3pve.com", referrer: "http://www.jx3pve.com/"
    2016/07/18 10:57:24 [error] 26016#0: *8097 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 180.253.54.101, server: www.jx3pve.com, request: "GET http://www.jx3pve.com/ HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-cgi.sock", host: "www.jx3pve.com", referrer: "http://www.jx3pve.com/"
    suckli
        20
    suckli  
       2016-07-18 11:19:18 +08:00
    试试 iptable?
    LT
        21
    LT  
    OP
       2016-07-18 11:22:00 +08:00
    @suckli 好多 ip 。。
    LT
        22
    LT  
    OP
       2016-07-18 11:30:47 +08:00
    错误日志里面有很多条这个

    connect() to unix:/dev/shm/php-cgi.sock failed(12: Cannot allocate memory)....

    这个是内存泄露的意思么
    realpg
        23
    realpg  
       2016-07-18 11:32:07 +08:00
    首先你要完全了解你服务器上正在运行的 PHP 程序,读过所有的代码,哪里不抗压心里有数
    然后跟着流量走,哪里压爆改哪里

    finally, 问问你老板要专业远程运维部……
    zoues
        24
    zoues  
       2016-07-18 11:42:07 +08:00
    看看日志 链接太多会撑爆内存 所以要改 nginx 配置参数,上次有个老毛子用 xmlrpc 搞我的机器.. 笑死了
    Silicon
        25
    Silicon  
       2016-07-18 11:46:32 +08:00
    @LT 错误原因似乎是 PHP 没反应……看看 PHP 在干什么
    7654
        26
    7654  
       2016-07-18 11:54:07 +08:00
    所以说这是个做挂的网站?
    LT
        27
    LT  
    OP
       2016-07-18 12:06:52 +08:00
    @realpg 朋友上班业务搞的网站。。哪来的专业运维。。。 另外一个写前端 js 的懂个毛线 php (笑 cry )
    LT
        28
    LT  
    OP
       2016-07-18 12:07:26 +08:00
    @7654 不是,游戏攻略,资讯类的。。
    iyaozhen
        29
    iyaozhen  
       2016-07-18 12:13:20 +08:00 via Android
    ifconfig eth0 down

    6666666
    dxwwym
        30
    dxwwym  
       2016-07-18 12:13:55 +08:00 via iPhone
    很多福建 adsl 专门被用来干这个,别问我是怎么知道的!
    LT
        31
    LT  
    OP
       2016-07-18 13:53:05 +08:00
    添加一些 ip 到防火墙后, iptables 的规则里面没有相应 ip, iptables -L 的结果是:
    DROP all -- bzq-79-178-9-254.red.bezeqint.net anywhere
    DROP all -- cable-24-135-138-230.dynamic.sbb.rs anywhere
    DROP all -- 105-226-148-3.east.dsl.telkomsa.net anywhere
    DROP all -- host-41.238.20.42.tedata.net anywhere
    DROP all -- 188.228.36.184.dynamic.altibox.net anywhere
    DROP all -- 91.204.60.100.cn.zp.ua anywhere

    这些都是动态 vps 吧?
    lijinma
        32
    lijinma  
       2016-07-18 14:04:42 +08:00
    吸屁股是什么意思?
    DT27
        33
    DT27  
       2016-07-18 14:11:19 +08:00
    要我就网站备份出来直接重装系统重新配置。。。
    lianxiaoyi
        34
    lianxiaoyi  
       2016-07-18 14:20:13 +08:00
    居然可以这么屌......服务器挂了还能安心去睡觉.......
    qinxi
        35
    qinxi  
       2016-07-18 14:23:18 +08:00
    @lijinma 这算是问对人了.打守望先锋 (逃
    donglemon
        36
    donglemon  
       2016-07-18 14:55:34 +08:00
    游戏网站流量还蛮大的,一般都会用 CDN 啦,运维这是就不用自己发愁了~
    目前自助接入的平台还很多,如果既想要加速有想要高防的话,私人或中小网站可以考虑的网宿云的 cloudWss
    http://www.wangsucloud.com/
    rootit
        37
    rootit  
       2016-07-18 15:41:03 +08:00
    使用脚本 + nginx 就可以,我的一个 google 代理被被别人代理,我直接写了个脚本封了 楼主可参考我的配置:
    nginx.conf 添加
    .......
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_conn_status 566;
    .......

    vhost 添加:
    limit_conn addr 2; ##限制每个 IP 同时只能有两个连接
    include extra/deny.conf;

    脚本:
    write_ip=""
    will_deny_ip=$(awk '/566/{print $1}' /app/logs/access_g.log|egrep -v ${write_ip}|grep -v grep)
    deny_conf="/application/nginx/conf/extra/deny.conf"
    for ip in $will_deny_ip
    do
    if [ `grep -v "^${ip}$" ${deny_conf}|wc -l` == "0" ];then
    # if [ `/etc/init.d/iptables status|grep ${ip}|wc -l` == "0" ];then
    # iptables -I INPUT -s ${ip} -j DROP
    echo "deny $ip;" >>${deny_conf}
    fi
    done

    /application/nginx/sbin/nginx -s reload


    脚本中也提供使用 iptables 来限制的步骤,但是 vps 的 iptables 的表的存放地址很小,上千 ip 就存不下了。如果楼主的 vps 可以,建议使用 iptables
    Cyrils
        38
    Cyrils  
       2016-07-18 17:47:10 +08:00
    发下那个人给你们发的补丁吧
    asp
        39
    asp  
       2016-07-18 18:23:11 +08:00
    对啊,先看看补丁总可以吧。 @LT
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5428 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:29 · PVG 15:29 · LAX 23:29 · JFK 02:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.