介绍
Memcached 等内存对象缓存系统可以通过暂时存储信息到内存中来优化后端数据库性能,并保留经常或最近请求的记录,从而减少对数据库的直接请求数量。
由于像 Memcached 这样的系统如果配置不当,可能会导致服务拒绝攻击,因此保护您的 Memcached 服务器很重要. 在本指南中,我们将介绍如何通过将您的安装连接到本地或私人网络接口并为您的 Memcached 实例创建授权的用户来保护您的 Memcached 服务器。
前提条件
本教程假设您有一个服务器设置了非 root sudo 用户和一个基本的防火墙。
- 一个 Ubuntu 16.04 服务器,根据我们的 初始服务器设置与 Ubuntu 16.04 教程设置。
有了这些先决条件,您将准备好安装和保护您的 Memcached 服务器。
步骤 1 – 从官方存储库中安装 Memcached
如果您尚未在您的服务器上安装 Memcached,您可以从官方 Ubuntu 存储库中安装它。
1sudo apt-get update
接下来,安装官方包如下:
1sudo apt-get install memcached
我们还可以安装libmemcached-tools
,一个提供与您的Memcached服务器合作的几个工具的库:
1sudo apt-get install libmemcached-tools
Memcached 现在应该作为服务在您的服务器上安装,以及允许您测试其连接的工具。
步骤 2 – 保护 Memcached 配置设置
为了确保我们的 Memcached 实例在本地界面上收听 127.0.0.1
,我们将检查位于 /etc/memcached.conf
的配置文件中的默认设置。
您可以通过nano
打开/etc/memcached.conf
:
1sudo nano /etc/memcached.conf
要检查界面设置,请在文件中找到以下行:
1[label /etc/memcached.conf]
2. . .
3-l 127.0.0.1
如果您看到「-l 127.0.0.1」的默认设置,则无需更改此行。如果您更改此设置以使其更开放,那么也应该禁用UDP,因为它更有可能被用于拒绝服务攻击。
1[label /etc/memcached.conf]
2. . .
3-U 0
保存并关闭文件,当你完成。
重新启动您的 Memcached 服务以应用您的更改:
1sudo systemctl restart memcached
请检查 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
地址绑定。
步骤 3 – 添加授权用户
若要将身份验证用户添加到您的 Memcached 服务中,您可以使用简单身份验证和安全层(SASL)框架,该框架将身份验证程序从应用程序协议中拆除。
配置 SASL 支持
首先,我们可以使用memcstat
命令测试Memcached实例的连接性,这将有助于我们在我们对配置文件进行更改后确定SASL和用户身份验证是否已启用。
要检查 Memcached 是否已启动和运行,请键入以下内容:
1memcstat --servers="127.0.0.1"
你应该看到的输出如下:
1[secondary_label Output]
2Server: 127.0.0.1 (11211)
3 pid: 3831
4 uptime: 9
5 time: 1520028517
6 version: 1.4.25
7 . . .
现在我们可以继续启用 SASL. 首先,我们会将 -S
参数添加到 /etc/memcached.conf
。
1sudo nano /etc/memcached.conf
在文件的底部,添加以下内容:
1[label /etc/memcached.conf]
2. . .
3-S
接下来,找出并放弃评论的 -vv
选项,该选项将为 `/var/log/memcached’ 提供语音输出。
1[label /etc/memcached.conf]
2. . .
3-vv
保存并关闭文件。
重新启动 Memcached 服务:
1sudo systemctl restart memcached
接下来,我们可以查看日志,以确保已启用SASL支持:
1sudo journalctl -u memcached
您应该看到以下行,表示已启动了 SASL 支持:
1[secondary_label Output]
2. . .
3Mar 02 22:03:58 memcached systemd-memcached-wrapper[2760]: Initialized SASL.
4. . .
我们可以再次检查连接性,但由于SASL已初始化,此命令不需要身份验证:
1memcstat --servers="127.0.0.1"
这个命令不应该产生输出,我们可以输入以下内容来检查其状态:
1echo $?
通常,除了0
之外,任何东西都表示过程失败,在这种情况下,我们应该看到一个1
的退出状态,这告诉我们memcstat
命令失败。
添加身份验证用户
现在我们可以下载 sasl2-bin
,一个包含 SASL 用户数据库的管理程序的包,这将使我们能够创建我们的身份验证用户:
1sudo apt-get install sasl2-bin
接下来,我们将创建该目录和文件,Memcached将检查其SASL配置设置:
1sudo mkdir -p /etc/sasl2
2sudo nano /etc/sasl2/memcached.conf
将以下内容添加到 SASL 配置文件中:
1[label /etc/sasl2/memcached.conf]
2mech_list: plain
3log_level: 5
4sasldb_path: /etc/sasl2/memcached-sasldb2
除了指定我们的日志级别外,我们还将mech_list
设置为plain
,这告诉Memcached它应该使用自己的密码文件并验证一个简单的密码。
现在我们将使用我们的用户凭证创建一个 SASL 数据库。我们将使用saslpasswd2
命令为我们的数据库中使用-c
选项创建一个新的用户条目。我们的用户将在这里是 sammy ,但您可以用自己的用户代替这个名字。使用-f
选项,我们将指定到我们的数据库的路径,这将是我们在/etc/sasl2/memcached.conf
中设置的路径:
1sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
最后,我们将赋予memcache
用户对SASL数据库的所有权:
1sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
重新启动 Memcached 服务:
1sudo systemctl restart memcached
运行memcstat
将再次确认我们的身份验证过程是否奏效,这次我们将使用我们的身份验证凭证运行:
1memcstat --servers="127.0.0.1" --username=sammy --password=your_password
你应该看到的输出如下:
1[secondary_label Output]
2Server: 127.0.0.1 (11211)
3 pid: 3831
4 uptime: 9
5 time: 1520028517
6 version: 1.4.25
7 . . .
我们的 Memcached 服务现在与 SASL 支持和用户身份验证成功运行。
步骤 4 – 允许通过私人网络访问(可选)
我们已经介绍了如何将 Memcached 配置为在本地接口上聆听,这可以通过保护 Memcached 接口免受外部接触来防止拒绝服务攻击。
<$>[注] 注: 我们将在本节中介绍如何使用UFW设置防火墙,但还可以使用DigitalOcean Cloud防火墙来创建这些设置。有关设置DigitalOcean Cloud防火墙的更多信息,请参阅我们的 DigitalOcean Cloud防火墙的介绍。
通过防火墙限制IP访问
在调整配置设置之前,最好设置防火墙规则,以限制可以连接到您的 Memcached 服务器的机器。
如果您正在使用 UFW 防火墙,您可以通过键入以下方式来限制访问您的 Memcached 实例:
1sudo ufw allow from client_servers_private_IP/32 to any port 11211
您可以通过阅读我们的 ufw 基本指南来了解更多关于 UFW 防火墙的信息。
有了这些更改,您可以调整 Memcached 服务以连接到您的服务器的私人网络接口。
将 Memcached 绑定到私人网络接口
现在,您的防火墙已经安装,您可以调整 Memcached 配置以连接到您的服务器的私人网络接口,而不是127.0.0.1
。
我们可以通过键入以下方式重新打开 /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. . .
保存并关闭文件,当你完成。
接下来,重新启动 Memcached 服务:
1sudo systemctl restart memcached
用「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. . .
测试您的外部客户端的连接,以确保您仍然可以访问服务. 还可以检查未经授权的客户端的访问,以确保您的防火墙规则有效。
结论
在本教程中,我们涵盖了如何通过配置它以连接到您的本地或私人网络接口,并启用SASL身份验证来保护您的Memcached服务器。
要了解更多关于 Memcached 的信息,请参阅 项目文档。 有关如何使用 Memcached 的更多信息,请参阅我们在 Ubuntu 14.04 上如何安装和使用 Memcache 的教程(https://andsky.com/tech/tutorials/how-to-install-and-use-memcache-on-ubuntu-14-04)。