
Memcached 是一种内存 Cache 系统,通过将一些高频使用和最近经常访问的信息储存在内存中,可以明显地优化访问后端数据库的性能。但是因为Memcached经常会被盯上攻击,因此,这里搬主题就分享一下在VPS上对Memcached服务器进行安全配置全教程。
一、前期准备工作
借助于 Memcached 组件,可以大量减少访问数据库的请求数量。但是,如果不合理地配置 Memcached Server,有可能会使得系统受到大量的攻击。基于此,有必要创建安全稳定的 Memcached 服务器,加固 Memcached 配置。
准备工作:
1 台VPS服务器
操作系统:Linux CentOS 7.4
防火墙配置:配置系统开机启动 firewalld 服务
对于memcached的好处可以看如下文章
二、安装 Memcached
首先安装 Memcached 组件包,以root权限登陆VPS主机
yum install memcached
为了方便管理 Memcached Servers,我们还可以安装 Libmemcached,它提供了一系列 Memcached 管理工具:
yum install libmemcached
安装好 Memcached 基本环境以后,我们可以着手开始加固配置的工作。
二、加固 Memcached 配置
我们需要配置 Memcached 实例监听本地的 127.0.0.1 地址,修改配置文件 /etc/sysconfig/memcached
。为了保证避免大量攻击,也需要禁用 UDP Listener。
打开 /etc/sysconfig/memcached
:
vi /etc/sysconfig/memcached
将该配置文件修改成如下所示:
接下来重启服务使配置生效:
systemctl restart memcached
为了验证配置的正确性,比如 Memcached Servers 只绑定到了本地端口,而且只监听 TCP 连接,可以通过如下命令查看:
netstat -plunt
可以看到输出结果:
三、添加用户认证
给 Memcached 服务添加认证用户,可以使用 Simple Authentication 和 Security Layer (SASL)。
SASL 是一个用于将认证过程与应用解耦的协议。通过在 Memcached 配置文件中加入 SASL 配置项,可以使用户具备认证功能。
1、配置 SASL
首先我们可以通过 memstat 命令来验证 Memcached 实例的网络连通性,此后在配置 SASL 和用户认证完成时,我们都可以通过该命令来验证配置的可用性:
打开 /etc/sysconfig/memcached
配置文件,加入 -S 和-vv 配置项。-S 目的是打开 SASL 功能,-vv 作用是提供更详细的日志,在 Debug Memcached 时会得到较大方便。修改后配置为:
OPTIONS="-l 127.0.0.1 -U 0 -S -vv"
重启服务使配置生效:
systemctl restart memcached
通过查看 log 可以看到 SASL 是否启用:
journalctl -u memcached
可以看到:
2、添加一位认证用户
首先需要安装 Cyrus SASL 库,借助于 cyrus-sasl-devel 和 cyrus-sasl-plain 包我们可以实现认证机制:
yum install cyrus-sasl-devel cyrus-sasl-plain
接下来,我们来创建一个目录,编辑 SASL 的配置文件,如下所示:
将 mech_list 设置为 plain,目的是使 Memcached 使用自己的密码认证文件,并且验证一个明码文本。
接下来,我们使用用户认证的方式来创建一个 SASL 数据库。
使用 saslpasswd2 命令来生成一个用户登录准入入口。这里,我们选用 didi 作为 user,当然 user 的名称可以自由设置:
最后我们设置 SASL 数据库为 Memcached 用户和用户组:
重启服务后,使用上面提到过的 memstat 命令来验证认证机制是否生效:
如果认证成功,你将看到如下的显示:
这样,我们就成功将 Memcached 服务配置为支持 SASL 协议与用户认证功能。
四、通过私有网络访问 Memcached 服务
在上面的安装配置完成后,我们将 Memcached 服务绑定到本地的接口,这样就避免了大量的外部攻击。
实际使用中,我们还需要接受一些其他 Server 的访问。所以在下面我们将配置 Memcached 服务,将其绑定到特定的私有网络,接受一些外部服务器的访问。
1、通过 Firewall 限制 IP 权限
在应用配置前,最好为连接到 Memcached 服务的 Server 设置一些 firewall 规则。我们将通过 firewall-cmd
命令来修改 firewall 的默认配置,以达到放开对特定 IP 的访问权限。
添加一个 Memcached zone 到 firewalld policy 文件中:
放开11211端口的访问权限,同样是先定在 Memcached zone内部:
接下来,添加客户端私有 IP 地址,即设置哪些机器可以访问 Memcached 服务:
Reload firewall 服务使上述配置生效:
通过上述配置工作,可以做到你自己客户端的 IP 地址能够访问 Memcached 服务,其他的 IP 连接将会被默认的 public zone 阻止访问。
2、将 Memcached 服务绑定到私有网络
修改/etc/sysconfig/memcached
配置文件。
将 127.0.0.1 替换为我们 Memcached Server 的私有 IP:
重启服务后验证:
接下来,可以验证在防火墙配置的 Client IP 能否访问到 Memcached 服务,作为比对,也可以验证其他未开放权限的 IP 能否访问到 Memcached 服务。
五、总结
本文主要介绍在VPS上对Memcached服务器进行安全配置全教程,包括如何配置将本地或者私有网络绑定到 Memcached 服务,以及如何在 Memcached 服务中启用 SASL 认证机制。