切换到宽版
  • 4219阅读
  • 5回复

Linux服务器对付PHP DDOS脚本对外攻击的办法 [复制链接]

上一主题 下一主题
离线yangen
 

只看楼主 倒序阅读 0楼 发表于: 2011-10-30
— 本帖被 yangen 设置为精华(2011-11-21) —
关键词: PHPDDOS
要说最近网络安全界被议论最多的是什么,绝对是PHP DDOS,这个PHP DDOS脚本从被一个老外开发出来后,辗转来到了中国,然后被中国的大小黑客给发扬光大了。。。专门用来祸害国内的站长。。。哎。。。如果是在战争时期,这些人我们只能称之为汉奸了。
为什么我会忽然写这个对付攻击的办法。。。实在是一言难尽,起源网不是刚搬了服务器嘛。。一些以前就和起源网分享服务器资源的老客户也随我搬迁到了芝加哥机房,因为第一次配置CENTOS的服务器,难免经验不足,客户同志们的网站,因为很多默认被设置为666权限,有写入执行问题,所以我为了省事就全部让他们设置成777,结果就这样出事了。。。有些网站的程序真的是漏洞百出,有个客户就这样被传了个PHP DDOS的脚本,被利用来对外发动DDOS攻击, 我也是在对服务器进行例行检查的过程中才发现的,服务器的对外流量跑满了!!!,我就想我服务器上都是小站点,平常整台服务器加起来一天的IP都不到1K的,怎么可能今天忽然跑满了,然后就将PHP改成SH-PHP模式,一个个进程去核对,终于让我发现的问题站点,进而对文件分析终于让我抓到了那只小木马。。。
对PHP DDOS脚本就不多分析了,这里我直接将文件删除了,然后设置了全新权限。同时为了防止有客户被传上木马对外攻击,我对服务器进行了部分调整,主要方法如下:
       因为服务器只设置了PHP环境,同时分析那只木马主要也是利用php shell发包,然后执行ddos攻击(代码没细看,可能是用UDP)。因此我主要对PHP的一些会被利用的函数进行处理,同时对LINUX系统的IPTABLES防火墙进行适当配置。备注:我用的是CENTOS,别的类型的LINUX系统可能在配置iptable时候有所差异,这个要自己调节了。
1、修改PHP.INI
在php.ini中的;disable_functions一行将其前面的;号去掉,然后按下面填写
disable_functions=symlink,shell_exec,exec,proc_close,proc_open,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,curl_exec,curl_multi_exec,show_source

另外如果你服务器没有进行采集的必要,还可以将allow_url_fopen = Off 设置成off,默认的是On的

2、编写个sh脚本,用来修改iptable的设置,禁止服务器的ouput对外发udp包(本机设置的域名解析服务器除外)
vi phpddos.sh
进入vi编辑器后,将下面命令黏贴进去

#!/bin/sh
NSIP=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'`
/sbin/iptables -A OUTPUT -p udp -j DROP
/sbin/iptables -I OUTPUT -p udp --dport 53 -d $NSIP -j ACCEPT
/etc/init.d/iptables save
service iptables restart

然后chmod +x phpddos.sh
最后./phpddos.sh
执行下这个sh脚本,大功告成。

PHP DDOS 的文件 good.rar (1 K) 下载次数:8 附送上我抓到的这个PHP DDOS木马后面的程序源码,供大家分析对策


离线yangen

只看该作者 1楼 发表于: 2011-12-04
Linux 通过Iptalbes禁止PHPDDOS发包
在网上又淘到一段IPTABLES的防火墙设置方案,大家也可以用这个,将下面代码每一行复制到SSH中执行一次。用这个防火墙规则,就无须再改动php.ini了。我测试成功,可以防止UDP类的PHP-DDOS木马对外攻击,黑客的攻击工具会显示对外发包攻击成功,但是实际上这些包都会被iptable防火墙给过滤掉,不会对外攻击了。

#iptables -A INPUT -p tcp -m tcp --sport 53 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
#iptables -A INPUT -p udp -m udp --sport 53 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -p tcp -m tcp --sport 1024:65535 -d 8.8.4.4 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -p udp -m udp --sport 1024:65535 -d 8.8.8.8 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -p udp -j REJECT
#/etc/rc.d/init.d/iptables save
# service iptables restart
#chkconfig iptables on

开放 对外 以及对内的 DNS端口 53
禁止其他全部出站的UDP 协议
开机启动iptables
另外要说明的是,上面的代码是因为我服务器使用的是谷歌的DNS来解析,我服务器端对外的访问(在服务器端上网,就需要,如果只是单纯的服务器,不进行yum安装也可以不用),因此我开放对8.8.4.4和8.8.8.8的访问,如果你不是设置为谷歌的DNS,那么这里要自行修改成你的DNS。使用的DNS是什么可以用下面方法查询
#cat /etc/resolv.conf |grep nameserver

离线yangen

只看该作者 2楼 发表于: 2011-12-04
题外话:1楼放的那个phpddos脚本的测试方法是good.php?host=要攻击的域名&port=80&time=6

port是端口,time是要攻击的时间。
我测试了下,确实非常牛逼,在我服务器未开启防火墙的情况下一下子就将带宽跑到15M了。。。我的服务器是独享10M。。。如果一直这样跑下去,被机房发现,肯定会被机房掐了
离线lovettww

只看该作者 3楼 发表于: 2012-05-30
学习。。。
离线wowo

只看该作者 4楼 发表于: 2012-06-12
然后就将PHP改成SH-PHP模式,一个个进程去核对  这一步怎么做的? 谢谢
离线yangen

只看该作者 5楼 发表于: 2012-06-23
wowo:然后就将PHP改成SH-PHP模式,一个个进程去核对  这一步怎么做的? 谢谢 (2012-06-12 14:43)

可以在SSH中用TOP命令去查阅各个进程的情况的
快速回复
限100 字节
 
上一个 下一个