• 欢迎访问举个栗子网站
  • 小说APP下载 xsz.tw 不带广告的小说站

如何在CentOS 7上安装和保护Memcached

软件 举个栗子 1年前 (2018-03-13) 413次浏览 0个评论 扫描二维码

介绍

Memcached这样的内存对象缓存系统可以通过临时将信息存储在内存中来优化后端数据库的性能,保留频繁或最近请求的记录。通过这种方式,它们可以减少对数据库的直接请求数量。

由于像Memcached这样的系统如果配置不当可能会导致拒绝服务攻击,因此保护Memcached服务器非常重要。在本指南中,我们将介绍如何通过将安装绑定到本地或专用网络接口并为 Memcached 实例创建授权用户来保护 Memcached 服务器。

先决条件

本教程假设您有一个使用非 root sudo用户和基本防火墙设置的服务器。如果不是这种情况,请设置并安装以下内容:

  • 一个 CentOS 7 服务器,在 CentOS 7 教程初始服务器安装后设置。
  • FirewallD,根据我们关于在 CentOS 7 上使用 FirewallD 的“安装并启用您的防火墙以在引导时启动”一节进行配置。

有了这些先决条件,您就可以安装并保护您的 Memcached 服务器。

从官方存储库安装 Memcached

如果您的服务器上尚未安装 Memcached,则可以从官方 CentOS 存储库进行安装。首先,确保您的本地包索引已更新:

 sudo yum update

接下来,安装官方软件包如下:

sudo yum install memcached

我们也可以安装libmemcached一个库,它提供了几个工具来处理 Memcached 服务器:

sudo yum install libmemcached

Memcached 现在应作为服务安装在您的服务器上,以及允许您测试其连接性的工具。我们现在可以继续保护其配置设置。

保护 Memcached 配置设置

为了确保我们的 Memcached 实例在本地接口上侦听127.0.0.1,我们将修改OPTIONS位于的配置文件中的变量/etc/sysconfig/memcached。我们还将禁用 UDP 侦听器。这两项措施都将保护我们的服务器免遭拒绝服务攻击。

您可以打开/etc/sysconfig/memcached使用vi

sudo vi /etc/sysconfig/memcached

找到OPTIONS变量,它最初看起来像这样:

的/ etc / SYSCONFIG /分布式缓存
. . .
OPTIONS=""

绑定到我们的本地网络接口将限制流量到同一台计算机上的客户端。我们将通过添加-l 127.0.0.1到我们的OPTIONS变量来做到这一点。这对某些环境来说可能过于严格,但它可以作为安全措施的一个很好的起点。

由于 UDP 协议对于拒绝服务攻击比 TCP 更有效,因此我们也可以禁用 UDP 侦听器。为此,我们将该-U 0参数添加到我们的OPTIONS变量中。完整的文件应该是这样的:

的/ etc / SYSCONFIG /分布式缓存

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

完成后保存并关闭文件。

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

sudo systemctl restart memcached

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

sudo netstat -plunt

您应该看到以下输出:

 Output 
 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 服务中,可以使用简单验证和安全层(SASL),这是一种从应用程序协议中解除身份验证过程的框架。我们将在我们的 Memcached 配置文件中启用 SASL,然后继续添加具有认证凭证的用户。

配置 SASL 支持

我们可以先用memstat命令测试 Memcached 实例的连通性。这将帮助我们确定在更改我们的配置文件后 SASL 和用户认证已启用。

要检查 Memcached 已启动并正在运行,请键入以下内容:

memstat --servers="127.0.0.1"

你应该看到如下的输出:

Output
Server: 127.0.0.1 (11211)
     pid: 3831
     uptime: 9
     time: 1520028517
     version: 1.4.25
     . . .

现在我们可以继续启用 SASL。首先,我们可以将-S参数添加到我们的OPTIONS变量中/etc/sysconfig/memcached,这将启用 SASL。再次打开文件:

sudo vi /etc/sysconfig/memcached

我们将同时添加-S-vv参数我们的OPTIONS变量。该-vv选项将提供详细的输出/var/log/memcached,这将有助于我们进行调试。OPTIONS按如下方式将这些选项添加到变量中:

的/ etc / SYSCONFIG /分布式缓存
. . .
OPTIONS="-l 127.0.0.1 -U 0 -S -vv" 

保存并关闭文件。

重新启动 Memcached 服务:

sudo systemctl restart memcached

接下来,我们可以查看日志以确保已启用 SASL 支持:

sudo journalctl -u memcached

您应该看到以下行,表示 SASL 支持已初始化:

Output
. . .
Mar 05 18:16:11 memcached-server memcached[3846]: Initialized SASL.
. . .

我们可以再次检查连接,但是因为 SASL 已经初始化,所以这个命令在没有认证的情况下会失败:

memstat --servers="127.0.0.1"

这个命令不应该产生输出。我们可以输入以下内容来检查它的状态:

echo $?

$?将始终返回退出的最后一个命令的退出代码。通常,除了0表示过程失败之外。在这种情况下,我们应该看到一个退出状态1,它告诉我们该memstat命令失败。

添加已验证的用户

现在我们可以下载两个包,这将允许我们使用 Cyrus SASL 库及其认证机制,包括支持PLAIN认证方案的插件。这些软件包cyrus-sasl-develcyrus-sasl-plain,将允许我们创建和验证我们的用户。输入以下命令安装软件包:

sudo yum install cyrus-sasl-devel cyrus-sasl-plain

接下来,我们将创建 Memcached 将检查其 SASL 配置设置的目录和文件:

sudo mkdir -p /etc/sasl2
sudo vi /etc/sasl2/memcached.conf

将以下内容添加到 SASL 配置文件中:

/etc/sasl2/memcached.conf
mech_list: plain
log_level: 5
sasldb_path: /etc/sasl2/memcached-sasldb2

除了指定我们的日志级别之外,我们将设置mech_listplain,它将告诉 Memcached 它应该使用自己的密码文件并验证明文密码。我们还将指定我们将在下一步创建的用户数据库文件的路径。完成后保存并关闭文件。

现在我们将用我们的用户凭证创建一个 SASL 数据库。我们将使用该saslpasswd2命令在我们的数据库中使用该-c选项为我们的用户创建一个新条目。我们的用户在这里是sammy,但您可以用您自己的用户替换此名称。使用该-f选项,我们将指定数据库的路径,这将成为我们设置的路径/etc/sasl2/memcached.conf

sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy

最后,我们想让memcached用户拥有 SASL 数据库的所有权:

sudo chown memcached:memcached /etc/sasl2/memcached-sasldb2

重新启动 Memcached 服务:

sudo systemctl restart memcached

memstat再次运行将确认我们的身份验证过程是否有效。这次我们将使用我们的身份验证凭据运行它:

memstat --servers="127.0.0.1" --username=sammy --password=your_password

你应该看到如下的输出:

Output
Server: 127.0.0.1 (11211)
     pid: 3831
     uptime: 9
     time: 1520028517
     version: 1.4.25
     . . .

我们的 Memcached 服务现在可以成功运行 SASL 支持和用户认证。

允许通过专用网络进行访问

我们已经介绍了如何配置 Memcached 以监听本地接口,这可以通过保护 Memcached 接口免受外部各方的干扰来防止拒绝服务攻击。但是,有些情况下您需要允许其他服务器访问。在这种情况下,您可以调整您的配置设置以将 Memcached 绑定到专用网络接口。

使用防火墙限制 IP 访问

在调整配置设置之前,设置防火墙规则以限制可连接到 Memcached 服务器的计算机是一个不错的主意。如果您遵循了先决条件并在您的服务器上安装了 FirewallD,并且打算从另一台主机连接到 Memcached,则无需调整防火墙规则。127.0.0.1由于OPTIONS我们之前定义的变量,您的独立 Memcached 实例应该在监听,因此应该不会担心传入流量。但是,如果您打算允许从其他主机访问 Memcached 服务器,则需要使用该firewall-cmd命令更改防火墙设置。

首先为您的firewalld策略添加专用的 Memcached 区域:

sudo firewall-cmd --permanent --new-zone=memcached

然后,指定您希望保持打开的端口。Memcached 11211默认使用端口:

sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp

接下来,指定应允许访问 Memcached 的私有 IP 地址。为此,您需要知道您的客户端服务器的私有 IP 地址

sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP

重新加载防火墙以确保新规则生效:

sudo firewall-cmd --reload

现在应根据专用 Memcached 区域中的规则处理来自客户端 IP 地址的数据包。所有其他连接将由默认public区域处理。

通过这些更改,我们可以继续对我们的 Memcached 服务进行必要的配置更改,将其绑定到我们的服务器的专用网络接口。

将 Memcached 绑定到专用网络接口

绑定到我们服务器的专用网络接口的第一步是修改OPTIONS我们之前设置的变量。

我们可以/etc/sysconfig/memcached通过键入以下内容重新打开

sudo vi /etc/sysconfig/memcached

在里面找到OPTIONS变量。我们现在可以修改-l 127.0.0.1以反映我们的 Memcached 服务器的私有 IP:

的/ etc / SYSCONFIG /分布式缓存
. . .
OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

完成后保存并关闭文件。

重新启动 Memcached 服务:

sudo systemctl restart memcached

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


sudo netstat -plunt
Output
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 服务器配置为绑定到本地或专用网络接口以及启用 SASL 身份验证来保护您的 Memcached 服务器。


举个栗子 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何在 CentOS 7 上安装和保护 Memcached
喜欢 (0)
举个栗子
关于作者:
建筑工地上施工员,闲暇时弄个博客打发时间,
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址