8.7. 保护 Memcached 服务

Memcached 是一个开源、高性能分布式内存对象缓存系统。它可以通过降低数据库负载来提高动态 Web 应用程序的性能。

Memcached 是一个内存键值存储,用于任意数据(如字符串和对象)的小块,来自于数据库调用、API 调用或页面渲染的结果。Memcached 允许将内存从未充分利用的区域分配给需要更多内存的应用程序。

2018 年,发现了向公共互联网公开的 Memcached 服务器漏洞 DDoS 扩展攻击。这些攻击利用了使用 UDP 协议进行传输的 Memcached 通信。这个攻击非常有效,因为其具有非常高的放大比率,具有几百字节大小的请求会产生带有几兆字节甚至几百兆字节的响应。

在大多数情况下,memcached 服务不需要向公共互联网公开。如果公开,其本身可能会带有安全问题。远程攻击者可能会泄漏或修改存储在 Memcached 中的信息。

按照相关内容强化使用 Memcached 服务的系统,免受可能的 DDoS 攻击。

8.7.1. 针对 DDoS 强化 Memcached

要降低安全风险,请根据您的配置执行以下步骤。

流程

  • 在 LAN 中配置防火墙。如果您的 Memcached 服务器应只在本地网络访问,请不要将外部流量路由到 memcached 服务使用的端口。例如,从允许的端口列表中删除默认端口 11211

    # firewall-cmd --remove-port=11211/udp
    # firewall-cmd --runtime-to-permanent
  • 如果您在与应用程序相同的机器上使用单一 Memcached 服务器,请设置 memcached 来仅侦听 localhost 流量。修改 /etc/sysconfig/memcached 文件中的 OPTIONS 值:

    OPTIONS="-l 127.0.0.1,::1"
  • 启用简单验证和安全层(SASL)身份验证:

    1. 修改或添加 /etc/sasl2/memcached.conf 文件:

      sasldb_path: /path.to/memcached.sasldb
    2. 在 SASL 数据库中添加帐户:

      # saslpasswd2 -a memcached -c cacheuser -f /path.to/memcached.sasldb
    3. 确保 memcached 用户和组可以访问数据库:

      # chown memcached:memcached /path.to/memcached.sasldb
    4. 通过在 /etc/sysconfig/memcached 文件中的 OPTIONS 参数中添加 -S 值在 Memcached 中启用 SASL 支持:

      OPTIONS="-S"
    5. 重启 Memcached 服务器以应用更改:

      # systemctl restart memcached
    6. 将 SASL 数据库中创建的用户名和密码添加到应用程序的 Memcached 客户端配置中。
  • 使用 TLS 加密 Memcached 客户端和服务器间的通信:

    1. 通过在 /etc/sysconfig/memcached 文件中的 OPTIONS 参数中添加 -Z 值来启用 Memcached 客户端和服务器间的加密通信:

      OPTIONS="-Z"
    2. 使用 -o ssl_chain_cert 选项,以 PEM 格式添加证书链文件路径。
    3. 使用 -o ssl_key 选项添加私钥文件路径。