您当前的位置: 首页 > 网络技术  > 服务器教程 浏览
linux服务器并webbench攻击解决方案
发布时间:2015-12-10    点击率:次    来源:www.sytcke.com    作者:电脑技术学习网

 首先我来说一下这个被攻击的网站的大概部署状况.这个网站主要是nginx+mysql+php,有两台服务器分别放了web和数据库,web只对外开启了80端口操作系统是centos,而数据库服务器则在内网,攻击者的手段其实很简单,用webbench网站压力测试工具发送大量的请求到服务器,之前的时候发送每一个请求之后数据库就会相应,然后读取内容最终显示,造成数据库和web之间大量的交换数据,甚至导致mysql达到连接数上限,请求被拒绝,而且攻击者时间挺多的,他不停地换浮动ip,因此直接用防火墙封锁ip没意义.

刚开始我的做法是,用php取得攻击者的agent头,判断是不是webbench来访,如果是就die掉,不在请求数据库,确实挺有效,数据库不会再超出限制了,但是对方频繁的发送请求过来,导致网络带宽被严重消耗,看来得想想其他办法,最终想到了一个解决方法且实际测试发现可行,因此分享给大家,其实我的做法原理很简单:用php取得用户agent头判断是否是webbench来源,如果是的话就在服务器上写一个shell文件,这个文件的内容就是封锁IP的规则,

然后再用chmod函数修改一下这个文件让其可执行,再用cron服务读取这个文件执行,把ip封锁掉,整个过程全部自动化完成不需要人为干预,另外在封锁的时候给我发一封email通知我有个倒霉蛋被干掉了,这样就行了.

具体实现代码如下:

IF(isSet($_SERVER[HTTP_USER_AGENT]) And Trim($_SERVER[HTTP_USER_AGENT])!=) {

    $_SERVER[HTTP_USER_AGENT]=StrToLower($_SERVER[HTTP_USER_AGENT]);

    IF(StriStr($_SERVER[HTTP_USER_AGENT],webbench)!==False) {

        $p=/home/www/webbench.sh;

        $_SERVER[REMOTE_ADDR]=isSet($_SERVER[REMOTE_ADDR]) ? $_SERVER[REMOTE_ADDR] : unknow;

        <span style="color: #ff0000;">File_Put_Contents($p,"#!/bin/bashniptables -I INPUT -s {$_SERVER[REMOTE_ADDR]} -j DROP;n",LOCK_EX);

</span>     Chmod($p,0755);

        chown($p,www);

        <span style="color: #ff0000;">Function sMail($to,$tit,$msg) {

            IF(Filter_var($to,FILTER_VALIDATE_EMAIL)==){

                throw new Exception(邮箱地址错误!);

            }

            $tit==?UTF-8?B?.Base64_Encode($tit).?=;

            $msg = str_replace("n.","n..",$msg);      //Windows如果在一行开头发现一个句号则会被删掉,要避免此问题将单个句号替换成两个句号

            Return Mail($to,$tit,$msg,From:No-reply@adm.bossadm.com.tw."n".Content-Type:text/html;charset=utf-8);

        }

        sMail(see7di@gmail.com,【WebBench又开始了t】!,date(Y-m-d H:i:s,time())." {$_SERVER[REMOTE_ADDR]}");</span>

        Header(Location:http://127.0.0.1);

        Die();

    }

}

后来我又做了一次调整,把发email的部份写入了shell文件内,不再用php发email,因為那会灌爆你的信箱,把上边的代码修改成:

IF(isSet($_SERVER[HTTP_USER_AGENT]) And Trim($_SERVER[HTTP_USER_AGENT])!=) {

    $_SERVER[HTTP_USER_AGENT]=StrToLower($_SERVER[HTTP_USER_AGENT]);

    IF(StriStr($_SERVER[HTTP_USER_AGENT],webbench)!==False) {

        $p=/home/www/webbench.sh;

        $_SERVER[REMOTE_ADDR]=isSet($_SERVER[REMOTE_ADDR]) ? $_SERVER[REMOTE_ADDR] : unknow;

        File_Put_Contents($p,"#!/bin/bashniptables -I INPUT -s {$_SERVER[REMOTE_ADDR]} -j DROP;necho "{$_SERVER[REMOTE_ADDR]} - `date`" | mail -s "WebBench-www.downcc.com" see7di@gmail.comn",LOCK_EX);

        Chmod($p,0755);

        chown($p,www);

        Header(Location:http://127.0.0.1);

        Die();

    }

}

来源 电脑技术网 www.sytcke.com
发表留言
发表留言请先登录!
免责声明:本站发布的信息和评论纯属网民个人行为,并不代表本站立场,如发现有违法信息或侵权行为,请直接与本站管理员联系,我们将在收到您的信息后24小时内作出处理!