介绍
2018 年 2 月 27 日, Cloudflare 发布了一篇关于 memcached 放大攻击数量的严重增加的故事. Memcached 是一个流行的对象缓存系统,经常用于减少响应时间和部署期间组件的负载。
为了减轻攻击,最好的选择是将 Memcached 绑定到本地接口,禁用 UDP,并使用传统网络安全最佳实践保护您的服务器。
注意:由于这种放大攻击对网络稳定性的潜在影响,DigitalOcean 已于 2018 年 3 月 1 日禁用公共接口上的 UDP 和 TCP 流量到端口 11211。
对于额外的安全性,如果您需要在同一数据中心内的 Droplets 之间 Memcached 访问,将其绑定到您的 Droplet 的私人网络接口并使用防火墙规则来限制允许的源地址,将有助于防止未经授权的请求。
在 Ubuntu 和 Debian 服务器上保护 Memcached
对于运行在 Ubuntu 或 Debian 服务器上的 Memcached 服务,您可以通过编辑 /etc/memcached.conf
文件使用 nano
来调整服务参数,例如:
1sudo nano /etc/memcached.conf
默认情况下,Ubuntu 和 Debian 将 Memcached 绑定到本地接口 127.0.0.1
. 绑定到 127.0.0.1
的安装不容易受到来自网络的放大攻击。
1[label /etc/memcached.conf]
2. . .
3-l 127.0.0.1
4. . .
如果听取地址在未来被更改,以便更开放,这也是一个好主意,禁用UDP,这更有可能被这个特定的攻击利用。
1[label /etc/memcached.conf]
2. . .
3-U 0
完成后,保存并关闭文件。
重新启动您的 Memcached 服务以应用您的更改:
1sudo service memcached restart
请检查 Memcached 是否目前与本地接口绑定,并只为 TCP 收听,键入:
1sudo netstat -plunt
1[secondary_label Output]
2Active Internet connections (only servers)
3Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
4. . .
5tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached
6. . .
您应该看到memcached
与仅使用 TCP 的127.0.0.1
地址绑定。
在 CentOS 和 Fedora 服务器上保护 Memcached
对于在 CentOS 和 Fedora 服务器上运行的 Memcached 服务,您可以通过编辑 /etc/sysconfig/memcached' 文件以
vi' 来调整服务参数,例如:
1sudo vi /etc/sysconfig/memcached
内部,我们希望通过使用-l 127.0.0.1
选项将其绑定到本地网络接口,以限制同一机器上的客户端的流量。
我们还将设置-U 0
来禁用UDP倾听器. 作为协议,UDP对于放大攻击更有效,所以禁用它将限制某些攻击的强度,如果我们决定在以后更改绑定端口。
将这两个参数添加到OPTIONS
变量中:
1[label /etc/sysconfig/memcached]
2PORT="11211"
3USER="memcached"
4MAXCONN="1024"
5CACHESIZE="64"
6OPTIONS="-l 127.0.0.1 -U 0"
保存并关闭文件,当你完成。
若要应用这些更改,请重新启动 Memcached 服务:
1sudo service memcached restart
请检查 Memcached 是否目前与本地接口绑定,并只为 TCP 收听,键入:
1sudo netstat -plunt
1[secondary_label Output]
2Active Internet connections (only servers)
3Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
4. . .
5tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached
6. . .
您应该看到memcached
与仅使用 TCP 的127.0.0.1
地址绑定。
允许通过私人网络访问
上面的指示告訴 Memcached 只在本地接口上聆聽。這會通過不將 Memcached 接口暴露於外部方而防止擴張攻擊。
扩展访问的最安全的选择是将 Memcached 绑定到私人网络接口。
通过防火墙限制IP访问
在这样做之前,最好设置防火墙规则来限制可以连接到您的 Memcached 服务器的机器,您需要知道客户端服务器的私人 IP 地址,以配置防火墙规则。
如果您正在使用 UFW防火墙,您可以通过键入以下方式来限制访问您的 Memcached 实例:
1sudo ufw allow OpenSSH
2sudo ufw allow from client_servers_private_IP/32 to any port 11211
3sudo ufw enable
您可以通过阅读我们的基本指南(https://andsky.com/tech/tutorials/ufw-essentials-common-firewall-rules-and-commands)来了解更多有关UFW防火墙的信息。
如果您正在使用 Iptables,可以通过键入设置基本的防火墙:
1sudo iptables -A INPUT -i lo -j ACCEPT
2sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
3sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
4sudo iptables -P INPUT DROP
请确保使用您的分布提供的机制来保存您的 Iptables 防火墙规则. 您可以通过查看我们的 基本指南来了解更多关于 Iptables 的信息。
之后,您可以调整 Memcached 服务以连接到您的服务器的私人网络接口。
将 Memcached 绑定到私人网络接口
现在,您的防火墙已经安装,您可以调整 Memcached 配置以连接到您的服务器的私人网络接口,而不是127.0.0.1
。
对于 Ubuntu 或 Debian 服务器,请重新打开 /etc/memcached.conf
文件:
1sudo nano /etc/memcached.conf
在内部,找到-l 127.0.0.1
行,并更改地址以匹配您的服务器的私人网络接口:
1[label /etc/memcached.conf]
2. . .
3-l memcached_servers_private_IP
4. . .
保存并关闭文件,当你完成。
对于 CentOS 和 Fedora 服务器,请重新打开 /etc/sysconfig/memcached
文件:
1sudo vi /etc/sysconfig/memcached
在内部,更改OPTIONS
变量中的-l 127.0.0.1
参数以参考您的 Memcached 服务器的私人 IP:
1[label /etc/sysconfig/memcached]
2. . .
3OPTIONS="-l memcached_servers_private_IP -U 0"
保存并关闭文件,当你完成。
接下来,重新启动 Memcached 服务:
1sudo service memcached restart
用「netstat」检查你的新设置以确认更改:
1sudo netstat -plunt
1[secondary_label Output]
2Active Internet connections (only servers)
3Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
4. . .
5tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached
6. . .
测试您的外部客户端的连接,以确保您仍然可以访问服务. 还可以检查未经授权的客户端的访问,以确保您的防火墙规则有效。
结论
Memcached 放大攻击可能对网络健康和服务的稳定性产生严重影响,但是,通过遵循运行网络服务的最佳实践,可以有效地减轻攻击。