如何通过减少暴露来保护 Memcached

介绍

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

对于 UbuntuDebian 服务器,请重新打开 /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. . .

保存并关闭文件,当你完成。

对于 CentOSFedora 服务器,请重新打开 /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 放大攻击可能对网络健康和服务的稳定性产生严重影响,但是,通过遵循运行网络服务的最佳实践,可以有效地减轻攻击。

Published At
Categories with 技术
Tagged with
comments powered by Disqus