前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在CentOS 7上安装和加固Memcached

如何在CentOS 7上安装和加固Memcached

原创
作者头像
GeekZ
修改于 2018-07-23 09:13:02
修改于 2018-07-23 09:13:02
1.5K0
举报

介绍

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

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

准备

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

  • 一个CentOS 7服务器。
  • FirewallD。

没有CentOS服务器的用户可以使用腾讯云服务器或者腾讯云实验室CentOS服务器安装和使用Memcached。

从官方存储库安装Memcached

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

代码语言:txt
AI代码解释
复制
$ sudo yum update

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

代码语言:txt
AI代码解释
复制
$ sudo yum install memcached

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

代码语言:txt
AI代码解释
复制
$ sudo yum install libmemcached

Memcached现在已经安装在您的服务器上了。我们现在可以继续设置其保护配置。

保护Memcached配置

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

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

代码语言:txt
AI代码解释
复制
$ sudo vi /etc/sysconfig/memcached

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

代码语言:txt
AI代码解释
复制
/etc/sysconfig/memcached
. . .
OPTIONS=""

绑定到我们的本地网络接口将限制到同一台计算机上的客户端的流量。我们将通过添加-l 127.0.0.1到OPTIONS变量来完成此操作。

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

代码语言:txt
AI代码解释
复制
/etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"

完成后保存并关闭文件,重新启动Memcached服务以应用更改:

代码语言:txt
AI代码解释
复制
$ sudo systemctl restart memcached

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

代码语言:txt
AI代码解释
复制
$ sudo netstat -plunt

您应该看到以下输出:

代码语言:txt
AI代码解释
复制
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是否已启动并运行,请键入以下内容:

代码语言:txt
AI代码解释
复制
$ memstat --servers="127.0.0.1"

您应该看到如下输出:

代码语言:txt
AI代码解释
复制
Server: 127.0.0.1 (11211)
     pid: 3831
     uptime: 9
     time: 1520028517
     version: 1.4.25
     . . .

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

代码语言:txt
AI代码解释
复制
$ sudo vi /etc/sysconfig/memcached

我们将向OPTIONS变量添加-S和-vv参数。该-vv选项将向/var/log/memcached提供详细输出,这将有助于我们调试。将这些选项添加到OPTIONS变量中,如下所示:

代码语言:txt
AI代码解释
复制
/etc/sysconfig/memcached
. . .
OPTIONS="-l 127.0.0.1 -U 0 -S -vv" 

保存并关闭文件,接着重启Memcached服务:

代码语言:txt
AI代码解释
复制
$ sudo systemctl restart memcached

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

代码语言:txt
AI代码解释
复制
$ sudo journalctl -u memcached

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

代码语言:txt
AI代码解释
复制
. . .
Mar 05 18:16:11 memcached-server memcached[3846]: Initialized SASL.
. . .

我们可以再次检查连接,但由于SASL已初始化,因此该命令在没有身份验证的情况下会失败:

代码语言:txt
AI代码解释
复制
$ memstat --servers="127.0.0.1"

我们可以输入以下内容来检查其状态:

代码语言:txt
AI代码解释
复制
$ echo $?

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

添加经过身份验证的用户

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

代码语言:txt
AI代码解释
复制
$ sudo yum install cyrus-sasl-devel cyrus-sasl-plain

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

代码语言:txt
AI代码解释
复制
$ sudo mkdir -p /etc/sasl2
$ sudo vi /etc/sasl2/memcached.conf

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

代码语言:txt
AI代码解释
复制
/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:

代码语言:txt
AI代码解释
复制
$ sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy

最后,我们希望memcached通过SASL数据库授予用户所有权:

代码语言:txt
AI代码解释
复制
$ sudo chown memcached:memcached /etc/sasl2/memcached-sasldb2

重启Memcached服务:

代码语言:txt
AI代码解释
复制
$ sudo systemctl restart memcached

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

代码语言:txt
AI代码解释
复制
$ memstat --servers="127.0.0.1" --username=sammy --password=your_password

您应该看到如下输出:

代码语言:txt
AI代码解释
复制
Server: 127.0.0.1 (11211)
     pid: 3831
     uptime: 9
     time: 1520028517
     version: 1.4.25
     . . .

我们的Memcached服务现在已成功运行,具有SASL支持和用户身份验证。

允许通过专用网络访问

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

注意:我们将在本节介绍如何使用FirewallD配置防火墙设置。

使用防火墙限制IP访问

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

首先在您的firewalld策略中添加一个专用的Memcached区域:

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --permanent --new-zone=memcached

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

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp

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

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP

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

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --reload

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

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

将Memcached绑定到专用网络接口

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

我们可以输入以下命令再次打开/etc/sysconfig/memcached:

代码语言:txt
AI代码解释
复制
$ sudo vi /etc/sysconfig/memcached

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

代码语言:txt
AI代码解释
复制
/etc/sysconfig/memcached
. . .
OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

完成后保存并关闭文件。再次重新启动Memcached服务:

代码语言:txt
AI代码解释
复制
$ sudo systemctl restart memcached

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

代码语言:txt
AI代码解释
复制
$ sudo netstat -plunt
代码语言:txt
AI代码解释
复制
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服务器。

对于Memcached感兴趣,还可以使用腾讯云实验室基于Ubuntu部署Memcached服务上机动手操作。


参考文献:《How To Install and Secure Memcached on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Memcached DDoS反射攻击如何防御
在2018年2月27日,Cloudflare 和 Arbor Networks 公司于周二发出警告称,恶意攻击者正在滥用 Memcached 协议发起分布式拒绝服务(DDoS)放大攻击,全球范围内许多服务器(包括 Arbor Networks 公司)受到影响。下图为监测到Memcached攻击态势。
穿鞋跑得快
2018/07/26
2.7K0
Memcached DDoS反射攻击如何防御
如何在 CentOS 7 上安装 Memcached
Memcached 是一个免费并且开源的高性能内存键值数据库。它主要用于系统缓存,通过缓存数据库中的结果来提高应用的响应速度。
雪梦科技
2020/05/11
1.7K0
如何在 CentOS 7 上安装 Memcached
Linux 安装Memcached
安装Memcached 安装依赖 yum install -y libevent libevent-deve 安装MemCached yum install memcached 运行Memcached 服务形式 CentOS7 配置文件路径 vi /etc/sysconfig/memcached 配置为 PORT="11211" USER="memcached" MAXCONN="2048" CACHESIZE="256" OPTIONS="" 启动 systemctl restart memcached.
码客说
2019/10/22
7050
如何在 Ubuntu 20.04 上安装 Memcached
Memcached 是一个免费并且开源的高性能内存键值数据库。它主要用于系统缓存,通过缓存数据库中的结果来提高应用的响应速度。
雪梦科技
2020/07/15
1.7K0
如何在 Ubuntu 20.04 上安装 Memcached
CentOS 7 安装Memcached服务
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/53101731
shaonbean
2019/05/26
7120
如何在 CentOS 8 上安装 Memcached
Memcached 是一个免费并且开源的高性能内存键值数据库。它主要用于系统缓存,通过缓存数据库中的结果来提高应用的响应速度。
雪梦科技
2020/05/09
1.4K0
如何在 CentOS 8 上安装 Memcached
如何减轻memcached的放大攻击
在2018年2月27日,Cloudflare 和 Arbor Networks 公司于周二发出警告称,恶意攻击者正在滥用 Memcached 协议发起分布式拒绝服务(DDoS)放大攻击,全球范围内许多服务器(包括 Arbor Networks 公司)受到影响。下图为监测到Memcached攻击态势。
姚啊姚
2018/08/17
1.8K0
如何减轻memcached的放大攻击
Haproxy+keepalived+Nginx+Nginx&Tomcat+memcach集群
搭建并配置nginx节点,准备网页,启动服务,测试节点(两台nginx配置相同,在此列出一台的配置);
用户8608081
2021/05/12
7970
如何在Ubuntu 18.04上保护Redis的安装
Redis是一个使用内存技术,NoSQL,键值缓存及存储,也可以保存到磁盘。它专为受信任环境中的受信任客户端设计,自身没有强大安全功能。这里是Redis官方网站的引用:
GeekZ
2018/08/07
1.1K0
防止Memcached的DDOS攻击另外一个思路
3月3日,国家互联网应急中心通报了一条消息 关于利用memcached服务器实施反射DDoS攻击的情况通报 通告了 memcached 服务器漏洞被黑客利用的情况,笔者的一台服务器也存在漏洞,因此将漏洞封堵的方法与大家分享一下。
大江小浪
2018/07/24
8280
如何在 Ubuntu 18.04 上安装 Memcached
Memcached 是一个免费并且开源的高性能内存键值数据库。它主要用于系统缓存,通过缓存数据库中的结果来提高应用的响应速度。
雪梦科技
2020/05/11
7610
如何在 Ubuntu 18.04 上安装 Memcached
如何在Ubuntu 18.04和16.04 LTS上安装Memcached缓存系统
Memcached是一种分布式内存对象缓存系统,它以键值为基础将数据存储在内存中。 通过在内存中缓存对象,对于优化动态网站和提高速度非常有用。 本文将帮助您在Ubuntu 18.04、16.04和14.04系统上安装带有PHP Memcache PECL扩展的Memcached。
星哥玩云
2022/08/08
4190
如何在Ubuntu 18.04和16.04 LTS上安装Memcached缓存系统
如何在 CentOS 7上安装 Squid代理服务器
Squid 是一个功能全面的缓存代理服务器,它支持著名的网络协议像 HTTP,HTTPS,FTP 等等。将 Squid 放在网页服务器的前端,通过缓存重复请求,过滤网络流量等,可以极大地提高服务器的性能。
雪梦科技
2020/05/11
13.3K1
如何在 CentOS 7上安装 Squid代理服务器
WordPress启用memcached动态缓存以及报错解决
张戈博客目前用的是Nginx 的 fastcgi 缓存方案,属于纯净态缓存模式,所以前台登录态什么的基本都没了。如果要兼顾前台登录态,又想速度快,有没有解决方案? 之前在分享张戈博客优化方案时提到,要
张戈
2018/03/21
1.8K0
WordPress启用memcached动态缓存以及报错解决
Centos7.7系统下安装SQL Server 2019
SQL Server 2019 为所有数据工作负载带来了创新的安全性和合规性功能、业界领先的性能、任务关键型可用性和高级分析,现在还支持内置的大数据。
用户4988085
2021/07/20
5450
CentOS 7下搭建配置SVN服务器
subversion默认以/var/svn作为数据根目录,可以通过/etc/sysconfig/svnserve修改这个默认位置。
herve
2018/09/20
1.7K0
如何在CentOS上安装Mosquitto服务器
MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。
不会飞的蝴蝶
2018/08/08
13.4K5
如何在CentOS上安装Mosquitto服务器
如何在CentOS 7上使用FirewallD设置防火墙
Firewalld是一种防火墙管理解决方案,可用于许多Linux发行版,它们充当Linux内核提供的iptables包过滤系统的前端。在本教程中,我们将介绍如何为您的服务器设置防火墙,并向您展示使用firewall-cmd管理工具管理防火墙的基础知识。
挺问中原
2018/10/16
3K0
如何管理Linux防火墙
防火墙是分层安全方法的重要组成部分。以下是如何定期监控和测试防火墙配置以确保安全。
云云众生s
2024/08/20
2040
如何管理Linux防火墙
如何在 CentOS 8 上安装和配置 Redis
Redis 是一个开源的在内存存储键值对数据的存储程序。它可以被用作数据库,缓存,信息暂存,并且支持各种数据结构,例如:字符串,哈希值,列表,集合等等。 Redis 通过 Redis Sentinel 和 Redis 集群中多个 Redis 节点的自动分块处理,提供了高可用性。
雪梦科技
2020/05/09
2.3K0
如何在 CentOS 8 上安装和配置 Redis
相关推荐
Memcached DDoS反射攻击如何防御
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档