网站Memcached被DDOS攻击导致CPU及带宽占用问题的解决方案

网站Memcached被DDOS攻击导致CPU及带宽占用问题的解决方案插图

最近这几天虾皮路发现网站访问比较慢,很卡,登陆SSH后发现网站服务器的CPU占用高达90%多,经常100%,并且带宽直接被占满。第一印象就是网站被攻击了,结果折腾了一整天才解决。虾皮路顺便记录一下,再分享一下本次网站Memcached被DDOS攻击导致CPU及带宽占用问题的解决方案。

一、网站问题症状表现

网站服务器CPU长时间占用95%以上,带宽长时间占满。网站打开较为卡顿,重启后还是一样症状。排除目前有哪些文件被下载导致的问题外,那就只能判断为网站被攻击了。

为什么网站会被攻击?

说实话这种问题我也答不上来。虾皮路又不喜欢对外招摇,也不与人结仇,专心做自己的站而已,为什么会被攻击呢?同行攻击?更不可能了,虾皮路又不是什么大站及盈利站点,还能威胁到哪些站了?最终虾皮路就认为应该是国外黑客的恶意漏扫中招的。

二、问题排查

在前面纠结怎么会被攻击这些不切实际的想法探讨后,虾皮路还是专心排查问题实际一点。

首先查看网站是否被CC攻击,毕竟带宽占用也高,CPU占用也高。于是登陆SSH,用命令查看。

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

下面的命令主要是查看有没有很多TCP链接,一般CC攻击都会有非常多的链接,但是使用命令后发现链接的IP比较少

网站Memcached被DDOS攻击导致CPU及带宽占用问题的解决方案插图1

然后安装带宽监测工具

yum install iftop -y

安装完成后运行如下命令查看目前的进程及带宽占用情况

iftop -i eth0 -P

然后可以看到一些IP的占用带宽情况

网站Memcached被DDOS攻击导致CPU及带宽占用问题的解决方案插图2

一般到这一步,如果是被CC攻击的话就会发现很多IP占用大量带宽,这个时候只要用防火墙封锁相应的IP就行了。但是现在的情况很奇怪,带宽占用很大,查询发现相应的IP占用带宽很小。

刚开始虾皮路也不清楚,各种查找解决办法,重启也不行。更新程序也不行。接下来又查询哪些进程占用了CPU。

top

这样就可以清洗的查看哪些进程占用了大量的CPU

网站Memcached被DDOS攻击导致CPU及带宽占用问题的解决方案插图3

经查询,发现进程lsphp进程占用了大量的CPU。

这就奇怪了,lsphp实际上就是php。因为虾皮路的环境程序是OpenLiteSpeed,里面的php就是lsphp,占用了进程,那说明和php有关。问题又没有多少访客,只有几个蜘蛛,应该不会php占用CPU到100%啊。

网上给出的方法是五花八门,虾皮路只能一个一个试,在禁用相应的WordPress插件时候发现问题所在,在禁用了LiteSpeed Cache插件后,CPU占用和带宽占用神奇的停止了。于是乎,虾皮路再启用LiteSpeed Cache插件,分别测试里面的相应的选项是否造成影响。

最后在开关对象缓存的选项中发现罪魁祸首就是Memcached,因为Memcached的默认端口是11211,那么接下来就对症下药。

三、处理方法

1、什么是Memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

2、什么是Memcached DDoS攻击?

memcached 分布式拒绝服务(DDoS)攻击是一种网络攻击,攻击者试图通过互联网流量使目标受害者超载。攻击者欺骗了对易受攻击的UDP memcached *服务器的请求,然后服务器会利用互联网流量淹没目标受害者,这可能会压倒受害者的资源。当目标的互联网基础设施过载时,无法处理新请求,常规流量无法访问互联网资源,导致拒绝服务。

3、Memcached攻击如何工作?

Memcached攻击的操作类似于所有DDoS放大攻击,例如NTP放大和DNS放大。攻击的工作原理是向易受攻击的服务器发送欺骗性请求,然后使用比初始请求更多的数据进行响应,从而放大流量。

Memcached放大可以被认为是在一个恶意的少年打电话给餐馆并说“我将拥有一切,请给我回电话并告诉我我的整个订单”的背景下。当餐厅要求回拨号码时,给出的号码是目标受害者的电话号码。然后,目标接收来自餐馆的电话,其中包含许多他们未请求的信息。

这种放大攻击方法是可行的,因为Memcached服务器可以选择使用UDP协议进行操作。UDP是一种网络协议,允许在不首先获得所谓的握手的情况下发送数据,这是双方同意通信的网络过程。使用UDP是因为从不询问目标主机是否愿意接收数据,允许在未经他们事先同意的情况下将大量数据发送到目标。

Memcached攻击分4个步骤发生:

攻击者在暴露的Memcached服务器上植入大量有效载荷*。接下来,攻击者利用目标受害者的IP地址欺骗HTTP GET请求。接收请求的易受攻击的Memcached服务器(通过响应尝试提供帮助)会向目标发送大量响应。目标服务器或其周围的基础结构无法处理从Memcached服务器发送的大量数据,从而导致合法请求的过载和拒绝服务。

知道攻击原理后,怪不得虾皮路的站点带宽占用极大,原来被人拿来当肉鸡了。

解决办法如下:

1、升级Memcached版本。

之前虾皮路的Memcached版本比较低,Memcached官方已经发布新版本默认禁用UDP 11211端口,修复了此漏洞问题,建议您升级到最新的1.5.6版本

2、防火墙禁止公网入方向11211端口

#只允许本机使用11211
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 127.0.0.1 --dport 11211 -j ACCEPT

#禁止公网入方向11211端口
iptables -I INPUT -p tcp --dport 11211 -j DROP
iptables -I INPUT -p udp --dport 11211 -j DROP

#保存配置,重启iptables
service iptables save
service iptables restart

将防火墙进行端口屏蔽后,问题解决。

当然,如果你觉得是个隐患,直接用Redis对象缓存也可以。当然也要做好Redis对象缓存的安全处理哦。

耗费了一天的功夫,对于虾皮路来说,确实没有遇到过这类的攻击。也算是吃一堑长一智吧。

 收藏 (0) 更新不易,打赏吧

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《网站Memcached被DDOS攻击导致CPU及带宽占用问题的解决方案》
文章链接:https://www.xiapilu.com/web/web-tutorial/memcached-ddos-lsphp.html
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活