欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


常见打印机连接方式和线缆介绍
换一种颜色换一种心情,小编帮你换DOS操作界面字体颜色
说说SuperFetch对win7系统运行效率的影响
保护孩子视力,帮你删除XP系统自带游戏
如何删掉.svn文件夹
电脑卡死了如何处理?
Mac怎么共享wifi?
XP系统修复任务栏错误的方法
修复漏洞后XP系统蓝屏怎么办
苹果笔记本安装win7系统的方法
linux服务器并webbench攻击解决方案
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

 首先我来说一下这个被攻击的网站的大概部署状况.这个网站主要是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();

    }

}

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站