前几个月,发现不少用户的服务器出现CPU100%的情况,经检查后,大部分是php(dedecms居多)程序导致的,而且自己维护的几个网站也出现同样情况,并且收到过机房告知服务器外发攻击的通告,于是马上检查网站,并进行问题排查。

发现占用CPU的网站用的都是dede程序,检查文件后,发现plus文件夹下有几个异常文件,从文件修改时间上看与其他文件截然不同(出了缓存文件以及配置文件,大部分文件的修改时间都是一致的)。打开查看里面的源码,都存在’IP”post’等奇怪代码,本人对php不熟悉,不过对比官方源码,明显感觉代码的写法与格式不与官方不同。再通过文件对比,这些异常文件都是多出的,果断删除。重新开启网站,CPU正常,没有出现100%的情况。

为了防止再出现类似情况,可以通过禁用php的fsockopen 函数以及屏蔽服务器的UDP端口来防止被利用php-ddos外发udp攻击。屏蔽了服务器被利用外发udp攻击这个比较好办,最重要的是要堵住网站漏洞,因为就算攻击发不出,只要恶意代码被执行了,一样会占用大量CPU%,照样影响网站的运行。
下面介绍禁用php的fsockopen 函数以及屏蔽服务器的UDP端口的方法:
1.禁用函数
打开php.ini查找到 disable_functions ,添加需禁用的函数名,如下例:
passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,
ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,
stream_socket_server,fsocket,fsockopen
这样就可以禁用php的fsockopen 函数。
2.屏蔽UDP端口
将以下蓝色文本复制到记事本,另存为 banudp.bat 或任意名,双击运行即可。
REM 添加安全策略,名称
netsh ipsec static add policy name=我的安全策略
REM 添加 IP筛选器列表
netsh ipsec static add filterlist name=允许列表
netsh ipsec static add filterlist name=拒绝列表
REM 添加筛选器到IP筛选器列表(允许上网)
netsh ipsec static add filter filterlist=允许列表  srcaddr=me dstaddr=209.11.240.36 description=dns访问 protocol=udp mirrored=yes dstport=53
REM 添加筛选器到IP筛选器列表(不让别人访问)
netsh ipsec static add filter filterlist=拒绝列表 srcaddr=me dstaddr=any description=别人到我任何访问 protocol=udp mirrored=yes
REM 添加筛选器操作
netsh ipsec static add filteraction name=可以  action=permit
netsh ipsec static add filteraction name=不可以  action=block
REM 创建一个链接指定 IPSec 策略、筛选器列表和筛选器操作的规则(加入规则到我的安全策略)
netsh ipsec static add rule name=允许规则  policy=我的安全策略 filterlist=允许列表 filteraction=可以
netsh ipsec static add rule name=拒绝规则  policy=我的安全策略 filterlist=拒绝列表 filteraction=不可以
REM 激活我的安全策略
netsh ipsec static set policy name=我的安全策略 assign=y
以上方法都是针对windows主机的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注