在Ubuntu 16.04上安装Memcached和安全保护(用户名密码验证保护)

介绍

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

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

先决条件

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

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

从官方存储库安装Memcached

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

sudo apt-get update

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

sudo apt-get install memcached

我们还可以安装libmemcached-tools ,这是一个提供多种工具来处理Memcached服务器的库:

sudo apt-get install libmemcached-tools

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

保护Memcached配置设置

为了确保我们的Memcached实例正在监听本地接口127.0.0.1 ,我们将检查位于/etc/memcached.conf的配置文件中的默认设置。 当前版本的Ubuntu和Debian附带的Memcached将-l参数设置为本地接口,从而防止来自网络的拒绝服务攻击。 我们可以检查此设置以确保设置正确。

你可以用nano打开/etc/memcached.conf :

sudo nano /etc/memcached.conf

要检查接口设置,请在文件中找到以下行:

/etc/memcached.conf

-l 0.0.0.0(为不限制ip访问)

. . .
-l 127.0.0.1

如果您看到默认设置-l 127.0.0.1则不需要修改此行。 如果您修改此设置以使其更加开放,那么禁用UDP也是一个好主意,因为它更可能在拒绝服务攻击中被利用。 要禁用UDP(同时保持TCP不受影响),请将以下选项添加到此文件的底部:

/etc/memcached.conf

. . .
-U 0

完成后保存并关闭文件。

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

sudo systemctl restart memcached

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

sudo netstat -plunt

您应该看到以下输出:

OutputActive 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
. . .

这确认了memcached仅使用TCP绑定到127.0.0.1地址。

添加授权用户

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

配置SASL支持

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

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

memcstat --servers="127.0.0.1"

你应该看到如下的输出:

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

现在我们可以继续启用SASL。 首先,我们将-S参数添加到/etc/memcached.conf 。 再次打开文件:

sudo nano /etc/memcached.conf

在该文件的底部添加以下内容:

/etc/memcached.conf

. . .
-S

接下来,查找并取消注释-vv选项,该选项将向/var/log/memcached提供详细输出。 未注释的行应如下所示:

/etc/memcached.conf

. . .
-vv

保存并关闭文件。

重新启动Memcached服务:

sudo systemctl restart memcached

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

sudo journalctl -u memcached

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

Output. . .
Mar 02 22:03:58 memcached systemd-memcached-wrapper[2760]: Initialized SASL.
. . .

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

memcstat --servers="127.0.0.1"

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

echo $?

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

添加已验证的用户

现在我们可以下载sasl2-bin ,一个包含SASL用户数据库管理程序的软件包。 这将允许我们创建经过身份验证的用户:

sudo apt-get install sasl2-bin

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

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

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

/etc/sasl2/memcached.conf

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

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

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

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

最后,我们将通过SASL数据库为memcache用户提供所有权:

 

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

重新启动Memcached服务:

sudo systemctl restart memcached

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

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

你应该看到如下的输出:

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

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

 

注意:你会发现验证未成功,这里有个小坑,用户名请带上机器名(查看用户:sudo sasldblistusers2 -f /etc/sasl2/memcached-sasldb2 );用户名格式: 用户名+@机器名;如:sammy@iZ1dvdi0leapg3ggqp。

memcstat --server="127.0.0.1" --username=sammy@iZ1dvdi0leapg3ggqp --password=你的密码

Server: 127.0.0.1 (11211)

pid: 5855

uptime: 1175

time: 1560759002

....

验证成功!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值