Memcached DDoS反射攻击如何防御

简介

在2018年2月27日,Cloudflare 和 Arbor Networks 公司于周二发出警告称,恶意攻击者正在滥用 Memcached 协议发起分布式拒绝服务(DDoS)放大攻击,全球范围内许多服务器(包括 Arbor Networks 公司)受到影响。下图为监测到Memcached攻击态势。

美国东部时间28日下午,GitHub透露其可能遭受了有史最强的DDoS攻击,专家称攻击者采用了放大攻击的新方法Memcached反射攻击,可能会在未来发生更大规模的分布式拒绝服务(DDoS)攻击。对GitHub平台的第一次峰值流量攻击达到了1.35Tbps,随后又出现了另外一次400Gbps的峰值,这可能也将成为目前记录在案的最强DDoS攻击,此前这一数据为1.1Tbps。据CNCERT3月3日消息,监测发现Memcached反射攻击在北京时间3月1日凌晨2点30分左右峰值流量高达1.94Tbps。

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。放大攻击针对使用UDP在公共网络上公开的Memcached部署。

为了缓解攻击,最好的选择是将Memcached绑定到本地接口,禁用UDP,并使用传统的网络安全方案保护您的服务器。在本教程中,我们将介绍如何执行此操作,以及如何将服务公开给外部客户端。

在Ubuntu和Debian服务器上保护Memcached

对于在Ubuntu或Debian服务器上运行的Memcached服务,您可以通过编辑/etc/memcached.conf文件调整服务参数,例如:

sudo nano /etc/memcached.conf

默认情况下,Ubuntu和Debian将Memcached绑定到本地127.0.0.1端口。受限制的安装127.0.0.1不容易受到来自网络的放大攻击。

. . .
-l 127.0.0.1
. . .

那么禁用UDP也是一个好主意,这更有可能被这种特殊攻击利用。要禁用UDP,请将以下内容添加到底部或文件中:

. . .
-U 0

完成后,保存并关闭文件。

重新启动Memcached服务以应用更改:

sudo service memcached restart

通过输入以下内容验证Memcached当前是否绑定到本地接口并仅侦听TCP:

sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

您应该看到仅使用TCP memcached绑定到127.0.0.1

在CentOS和Fedora服务器上保护Memcached

对于在CentOS和Fedora服务器上运行的Memcached服务,您可以通过编辑/etc/sysconfig/memcached文件来调整服务参数,例如:

sudo vi /etc/sysconfig/memcached

我们希望绑定到本地网络接口,使用-l 127.0.0.1选项限制到同一台计算机上的客户端的流量。我们还将设置-U0禁用UDP协议。

OPTIONS变量中添加这两个参数:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"

完成后保存并关闭文件。

要应用更改,请重新启动Memcached服务:

sudo service memcached restart

通过输入以下内容验证Memcached当前是否绑定到本地接口并仅侦听TCP:

sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

您应该看到仅使用TCP memcached绑定到127.0.0.1

允许通过专用网络访问

上面的步骤告诉Memcached只能侦听本地接口。这可以通过不将Memcached接口暴露给外部各方来防止放大攻击。如果您需要允许从其他服务器访问,则必须调整配置。将Memcached绑定到专用网络端口。

使用防火墙限制IP访问

在执行此操作之前,最好设置防火墙规则可以连接到Memcached服务器的计算机。您需要知道您客户端的IP地址以方便配置防火墙规则。

如果您使用的是UFW防火墙,则可以通过输入以下内容来限制对Memcached实例的访问:

sudo ufw allow OpenSSH
sudo ufw allow from client_servers_private_IP/32 to any port 11211
sudo ufw enable

如果您使用的是Iptables,则可以通过输入以下内容来建立基本防火墙:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

然后,您可以调整Memcached服务绑定到服务器的专用网络接口。

将Memcached绑定到专用网络接口

现在您的防火墙已就位,您可以调整Memcached配置以绑定到服务器的专用网络接口,而不是127.0.0.1

对于UbuntuDebian服务器,请再次打开/etc/memcached.conf文件:

sudo nano /etc/memcached.conf

在里面,找到该-l 127.0.0.1行并更改地址以匹配您服务器的专用网络接口:

. . .
-l memcached_servers_private_IP
. . .

完成后保存并关闭文件。

对于CentOSFedora服务器,请再次打开/etc/sysconfig/memcached文件:

sudo vi /etc/sysconfig/memcached

在里面,更改变量-l 127.0.0.1中的OPTIONS参数以引用Memcached服务器的私有IP:

. . .
OPTIONS="-l memcached_servers_private_IP -U 0"

完成后保存并关闭文件。

接下来,再次重新启动Memcached服务:

sudo service memcached restart

检查新设置netstat以确认更改:

sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 memcached_servers_private_IP:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

建议您最好还是检查来自未授权客户端的访问权限,以确保防火墙规则有效。

结论

Memcached放大攻击会严重影响网络运行状况和服务的稳定性。但是,通过运行服务器的安全设置,可以有效地减轻攻击。应用本教程中的更改后,最好继续监控您的服务,以确保维护正常的功能和连接。

应对逐步升级的DDoS攻击风险,我们还是建议配置腾讯云超大容量高防产品,隐藏源站IP。用高防IP充足的带宽资源应对可能的大流量攻击行为,并根据业务特点制定个性化的防护策略,被DDoS攻击时才能保证业务可用性,从容处理。在面对高等级DDoS威胁时,及时升级防护配置,必要时请求DDoS防护厂商的专家服务。


参考文献: 《放大倍数超5万倍的Memcached DDoS反射攻击,怎么破?》 《How To Secure Memcached by Reducing Exposure》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

Spring官网下载dist.zip的几种方法

Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包,但是完全没想...

20570
来自专栏圆方圆学院精选

【董天一】如何在IPFS里面上传一张图片

        下载地址:https://dist.ipfs.io/#go-ipfs

20110
来自专栏杨建荣的学习笔记

服务器进程异常的原因分析(r6笔记第74天)

现在系统监控的工作处于过渡期,即对于Oracle的还是保留了gridcontrol的监控和报警,同时也保留了zabbix的报警,在发生问题的时候想看看哪个能监控...

41840
来自专栏林德熙的博客

win10 使用 SMB v1

原因是 SMB1 是不安全的,所以微软在 win10 系统就不给使用,如果需要使用,需要使用管理员打开 Powershell 输入下面代码

2.4K10
来自专栏安恒信息

FireHost发布2013年第二季度排名前四的攻击方法

本周二,云托管公司FireHost公布了2013年第二季度排名前四的攻击方法,分别是跨站脚本攻击(XSS)、目录遍历、SQL注入、跨站请求伪造(CSRF)。 F...

28390
来自专栏程序源代码

分享一套SSM开发框架(含源代码)

SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛。

5.6K30
来自专栏Linyb极客之路

微服务架构:spring cloud简介

1.什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的We...

44080
来自专栏针针小站

【Share】Dell Precision 5510 Mojave Clover分享

首先先感谢 @darkhandz @黑果小兵 @Scottsanett 等大佬的分享

1.3K20
来自专栏散尽浮华

Gitlab备份和恢复操作记录

前面已经介绍了Gitlab环境部署记录,这里简单说下Gitlab的备份和恢复操作记录: 1)Gitlab的备份目录路径设置 [root@code-server ...

33280
来自专栏FreeBuf

现代版荆轲刺秦王:Struts2 REST插件漏洞分析

战国末期,大秦实力强盛,大有横扫六合之势,在灭了韩、赵两国后,下一个目标就是燕国。

11620

扫码关注云+社区

领取腾讯云代金券