linux服务器并webbench攻击解决方案:封锁攻击者ip
我要评论2013/03/29 12:01:23 来源:绿色资源网编辑:www.downcc.com 评论:0点击:377次
首先我来说一下这个被攻击的网站的大概部署状况.这个网站主要是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/bash\niptables -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/bash\niptables -I INPUT -s {$_SERVER['REMOTE_ADDR']} -j DROP;\necho \"{$_SERVER['REMOTE_ADDR']} - `date`\" | mail -s \"WebBench-www.downcc.com\" see7di@gmail.com\n",LOCK_EX);
Chmod($p,0755);
chown($p,'www');
Header('Location:http://127.0.0.1');
Die();
}
}
关键词:linux服务器
相关阅读
- 03-29Linux服务器反向代理软件varnish安装、配置和监控教程
- 10-11Xshell客户端连接Linux服务器中文显示乱码问题的解决办法
- 08-14Win 2003自带防火墙设置图解
- 06-12win 7系统如何禁止电脑进行系统恢复操作?
- 09-06TP-Link路由器设置图解
- 01-15linux服务器安全
- 06-12分级防御 针对Linux服务器攻击防范
- 04-25Linux服务器攻防技术介绍
- 04-25解决Linux服务器下误删除文件问题!
- 04-25linux服务器异常故障解决一例
阅读本文后您有什么感想? 已有 人给出评价!
用户评论
热门评论
最新评论
相关软件
热点图文
- 09-05407 Proxy Authentication Required错误的解决办法
- 04-05实用的Linux网络配置工具netconf
- 02-25linux下安装联想的LJ2200打印机驱动
- 05-04Linux(CentOS)服务器/VPS上安装DirectAdmin
- 07-17Linux VPS怎么绑定域名建站
- 09-08RedHat Linux 红旗9.0安装图解
- 05-04Linux系统上配置Nginx+Mongrel cluster
- 04-04Linux 防火墙配置基础篇
- 04-17Linux VPS CentOS 5 实例图解搭建网站(新手必看)
- 07-18Centos 硬盘挂载教程