介绍

Memcached 是一种内存 cache 系统,通过将一些高频使用和最近经常访问的信息储存在内存中,可以明显地优化访问后端数据库的性能。

直观上来看,借助于 Memcached 组件,可以大量减少访问数据库的请求数量。但是,如果不合理地配置 Memcached Server,有可能会使得系统受到大量的攻击。基于此,有必要创建安全稳定的 Memcached 服务器,加固 Memcached 配置。

本文将为您提供一种将 Memcached 实例绑定到本地或者私有网络的方法,来提升 Memcached Server 的稳定性。相应地,访问 Memcached Server 也需要创建授权用户。

先决条件

准备工作:

1 台滴滴云 DC2 服务器

操作系统:Linux CentOS7.4

规格:2CPU 4GB内存 40GB SSD系统盘

防火墙配置:配置系统开机启动 firewalld 服务

安装 Memcached

首先安装 Memcached 组件包:

sudo yum install memcached

为了方便管理 Memcached Servers,我们还可以安装 Libmemcached,它提供了一系列 Memcached 管理工具:

sudo yum install libmemcached

安装好 Memcached 基本环境以后,我们可以着手开始加固配置的工作。

加固 Memcached 配置

我们需要配置 Memcached 实例监听本地的 127.0.0.1 地址,修改配置文件 /etc/sysconfig/memcached 。为了保证避免大量攻击,也需要禁用 UDP Listener。

打开 /etc/sysconfig/memcached

sudo vi /etc/sysconfig/memcached

将该配置文件修改成如下所示:

/etc/sysconfig/memcachedPORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"

接下来重启服务使配置生效:

sudo systemctl restart memcached

为了验证配置的正确性,比如 Memcached Servers 只绑定到了本地端口,而且只监听 TCP 连接,可以通过如下命令查看:

sudo netstat -plunt

可以看到输出结果:

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      121465/memcached

添加用户认证

给 Memcached 服务添加认证用户,可以使用 Simple Authentication 和 Security Layer (SASL)。

SASL 是一个用于将认证过程与应用解耦的协议。通过在 Memcached 配置文件中加入 SASL 配置项,可以使用户具备认证功能。

配置 SASL

首先我们可以通过 memstat 命令来验证 Memcached 实例的网络连通性,此后在配置 SASL 和用户认证完成时,我们都可以通过该命令来验证配置的可用性:

sudo memstat --servers="127.0.0.1"`Server: 127.0.0.1 (11211)
pid: 121465
uptime: 1120
time: 1546180153
version: 1.4.15
libevent: 2.0.21-stable
pointer_size: 64
rusage_user: 0.035928
rusage_system: 0.051700
curr_connections: 1
total_connections: 2
connection_structures: 2
......省略部分显示

打开 /etc/sysconfig/memcached 配置文件,加入 -S 和-vv 配置项。-S 目的是打开 SASL 功能,-vv 作用是提供更详细的日志,在 Debug Memcached 时会得到较大方便。修改后配置为:

OPTIONS="-l 127.0.0.1 -U 0 -S -vv"

重启服务使配置生效:

sudo systemctl restart memcached

通过查看 log 可以看到 SASL 是否启用:

sudo journalctl -u memcached

可以看到:

12月 30 22:10:35 10-255-20-131 systemd[1]: Started Memcached.
12月 30 22:10:35 10-255-20-131 systemd[1]: Starting Memcached...
12月 30 22:36:36 10-255-20-131 systemd[1]: Stopping Memcached...
12月 30 22:36:36 10-255-20-131 systemd[1]: Started Memcached.
12月 30 22:36:36 10-255-20-131 systemd[1]: Starting Memcached...
12月 30 22:36:36 10-255-20-131 memcached[122283]: Initialized SASL.

添加一位认证用户

首先需要安装 Cyrus SASL 库,借助于 cyrus-sasl-devel 和 cyrus-sasl-plain 包我们可以实现认证机制:

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

接下来,我们来创建一个目录,编辑 SASL 的配置文件,如下所示:

sudo mkdir -p /etc/sasl2
sudo vi /etc/sasl2/memcached.confmech_list: plain
log_level: 5
sasldb_path: /etc/sasl2/memcached-sasldb2

将 mech_list 设置为 plain,目的是使 Memcached 使用自己的密码认证文件,并且验证一个明码文本。

接下来,我们使用用户认证的方式来创建一个 SASL 数据库。

使用 saslpasswd2 命令来生成一个用户登录准入入口。这里,我们选用 didi 作为 user,当然 user 的名称可以自由设置:

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

最后我们设置 SASL 数据库为 Memcached 用户和用户组:

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

重启服务后,使用上面提到过的 memstat 命令来验证认证机制是否生效:

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

如果认证成功,你将看到如下的显示:

Server: 127.0.0.1 (11211)
pid: 122283
uptime: 2785
time: 1546183379
version: 1.4.15
libevent: 2.0.21-stable
pointer_size: 64
rusage_user: 0.107040
rusage_system: 0.113777
......省略部分显示

这样,我们就成功将 Memcached 服务配置为支持 SASL 协议与用户认证功能。

通过私有网络访问 Memcached 服务

在上面的安装配置完成后,我们将 Memcached 服务绑定到本地的接口,这样就避免了大量的外部攻击。

实际使用中,我们还需要接受一些其他 Server 的访问。所以在下面我们将配置 Memcached 服务,将其绑定到特定的私有网络,接受一些外部服务器的访问。

通过 Firewall 限制 IP 权限

在应用配置前,最好为连接到 Memcached 服务的 Server 设置一些 firewall 规则。我们将通过 firewall-cmd 命令来修改 firewall 的默认配置,以达到放开对特定 IP 的访问权限。

添加一个 Memcached zone 到 firewalld policy 文件中:

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

放开11211端口的访问权限,同样是先定在 Memcached zone内部:

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

接下来,添加客户端私有 IP 地址,即设置哪些机器可以访问 Memcached 服务:

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

Reload firewall 服务使上述配置生效:

sudo firewall-cmd --reload

通过上述配置工作,可以做到你自己客户端的 IP 地址能够访问 Memcached 服务,其他的 IP 连接将会被默认的 public zone 阻止访问。

将 Memcached 服务绑定到私有网络

修改/etc/sysconfig/memcached 配置文件。

将 127.0.0.1 替换为我们 Memcached Server 的私有 IP:

OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

重启服务后验证:

sudo netstat -pluntActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program nametcp        0      0 10.255.20.131:11211     0.0.0.0:*               LISTEN      124612/memcached

接下来,可以验证在防火墙配置的 Client IP 能否访问到 Memcached 服务,作为比对,也可以验证其他未开放权限的 IP 能否访问到 Memcached 服务。

总结

本文主要包括如何配置将本地或者私有网络绑定到 Memcached 服务,以及如何在 Memcached 服务中启用 SASL 认证机制。

有兴趣了解更多技术细节,请关注滴滴云博客。

基于滴滴云搭建安全稳定的 Memcached 服务器相关推荐

  1. 基于滴滴云搭建微信小程序

    微信小程序自 2017 年推出以来,以其轻量级级特性,为传统移动互联网格局带来了极大的震动.相对于传统 APP,小程序无需下载,即扫即用,用完即走,极大的节省了手机的空间,提高了用户使用的便利性. 本 ...

  2. 基于滴滴云搭建 Ceph 开发环境

    相关依赖包安装 安装依赖包 yum install libtool gcc gcc-c++ libuuid-devel keyutils-libs-devel libblkid-devel redha ...

  3. 基于滴滴云搭建 Lustre 分布式文件系统

    1. Lustre简介 Lustre 是一个具有高可用.高性能.可扩展的分布式文件系统.主要由 Manage Server.Meta Data Server 和 Data Server 组成.详细介绍 ...

  4. 基于滴滴云搭建 Lustre

    1. Lustre简介 Lustre 是一个具有高可用.高性能.可扩展的分布式文件系统.主要由 Manage Server.Meta Data Server 和 Data Server 组成.详细介绍 ...

  5. 基于滴滴云服务器搭建 Consul 集群

    前言 Consul 是什么 Consul 是用 Go 开发的分布式服务协调管理的工具,它提供了服务发现,健康检查,Key/Value 存储等功能,并且支持跨数据中心的功能. Consul 基本概念 A ...

  6. 基于阿里云搭建的适合初创企业的轻量级架构--架构总结

    ----基于阿里云搭建的适合初创企业的轻量级架构 前言 在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变.快速部署.持续集成并可以适应多种情况的架构便显得尤为重 ...

  7. 如何基于阿里云搭建适合初创企业的轻量级架构?

    ----基于阿里云搭建的适合初创企业的轻量级架构 前言 在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变.快速部署.持续集成并可以适应多种情况的架构便显得尤为重 ...

  8. 如何将项目发布到阿里云_尚硅谷基于阿里云搭建数据仓库(实时)项目视频发布...

    11月,尚大发布了基于阿里云搭建数据仓库离线项目视频,不少爱学习的小伙伴表示,对实时项目视频翘首以盼,听了大海哥的课,腰不酸了,腿不疼了,一口气从头听到尾还不过瘾,沉迷于学习无法自拔-- 说曹操,大海 ...

  9. 挑战一个人搭建一套完整直播系统5:基于阿里云搭建外网直播系统

    本节将来介绍如何基于阿里云搭建一个真正的外网直播系统,其实平台的搭建在前面已经做了介绍,这里的区别是在云平台上重新搭建系统,这里采用了阿里云服务器ECS来实现(可以免费使用薅羊毛),选择的系统为ubu ...

最新文章

  1. R语言ggplot2可视化删除所有分面图(facet_wrap可视化的facet结果)的标签实战(Remove facet_wrap labels)
  2. 大家都说 Java 反射效率低,为什么呢?
  3. 中国开封菊花花会照片1
  4. C++ 编译,运行过程 详解。
  5. SaaS产品设计,从0到1案例实操
  6. PAT1056 组合数的和 (15 分)
  7. 知道python网课答案_Python程序设计答案
  8. 03. Java NIO Channel 通道
  9. LA 3695 Distant Galaxy
  10. linux用户名和密码6,Linux系统中(CentOS 7)的用户和权限管理
  11. 计算机电源故障维修方法,常见电源故障维修技巧
  12. 时间定位表达式-用于时间的加、减调整
  13. HTML+CSS 模仿Windows 7 桌面效果
  14. 面试官: MySQL 数据库的优化,你知道有哪些?
  15. UCOIII时间片轮转调度
  16. 一次搞懂清晰度、对比度以及锐化的区别
  17. 高中数学如何考120以上高中数学如何快速提高
  18. 从广域网云化看SD-WAN
  19. java统计每个单词单词出现的次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...
  20. 故宫元宵节首开夜场,票务系统HTTPS加密护航 1

热门文章

  1. python随机生成邮箱、自我介绍、地址、时间等
  2. 【强化学习论文合集】十二.2018国际人工智能联合会议论文(IJCAI2018)
  3. C++ + ubuntu 调用boost 的一个问题
  4. Air101-LCD扩展板按键测试程序
  5. HTML5期末大作业:基于HTML+CSS+JavaScript校园文化企业网站模板【学生网页设计作业源码】
  6. 【刷题】BZOJ 2069 [POI2004]ZAW
  7. 工具教程第三十一讲:电报的使用(二)
  8. u盘有图标计算机显示没有,电脑没插u盘却显示u盘图标是怎么回事?
  9. 2022年茶艺师(中级)考试模拟100题模拟考试平台操作
  10. 2017 计算机 暑期学校,科学网-2018,17年数学统计学计量经济暑期学校汇总-张慧铭的博文...