Redis 暴力破解遭受攻击解决方案:如何使用防火墙等安全措施保护 Redis

最近,许多 Redis 服务器受到了暴力破解的攻击。这种攻击会尝试使用常见的密码和用户名来登录 Redis,从而窃取敏感数据或者执行不被授权的命令。如果您的 Redis 实例不安全,您可能会面临数据丢失和安全风险。本文将探讨如何使用防火墙等安全措施来保护 Redis。

防火墙

防火墙是一种安全措施,可以过滤网络流量,以防止未经授权的访问。几乎所有云提供商都提供了内置的防火墙功能。其中一些包括:

  • AWS: AWS 有一种名为“安全组”的内置防火墙,它可以过滤入站和出站的 TCP 和 UDP 流量。
  • GCP: GCP 提供了名为“防火墙规则”的内置防火墙功能,它可以允许或拒绝来自特定 IP 地址或 IP 范围的流量。
  • Azure: Azure 包括名为“网络安全组”的内置防火墙功能,它可以允许或拒绝入站和出站流量。

对于 Redis 实例,您可以使用这些内置防火墙功能中的任何一个,以防止未经授权的访问。例如,如果您使用 AWS,您可以创建一个新的安全组,并允许来自您信任的 IP 地址的流量。如果有人尝试从其他 IP 访问您的 Redis 实例,流量就会被拒绝。

认证

Redis 有一个名为“密码”的特性,允许您设置一个密码,以防止未经授权的访问。要启用密码认证,您可以在 Redis 配置文件中添加以下行:

----------- ------------

将“yourpassword”替换为您要使用的实际密码。然后,您可以使用 AUTH 命令向 Redis 提供密码,以获得访问权限。

如果您使用 Redis 的客户端库来访问 Redis,您可以将密码传递给构造函数或连接函数。例如,在 Node.js 的 ioredis 客户端库中,您可以使用以下行设置 Redis 连接密码:

----- ----- - -------------------
----- ----- - --- -------
  ----- ----------------------
  ----- -----
  --------- ---------------
---

密钥限制

Redis 提供了名为“密钥空间通知”的特性,可以监视 Redis 实例中的键空间变化。您可以使用该特性来监视特定的 key,以便及时发现可能的入侵。要启用此功能,请在 Redis 配置文件中找到以下行:

---------------------- --

将第二个双引号替换为“K$”。这将启用密钥空间通知功能,并允许监视所有针对键条目的操作。例如,如果有人尝试在没有密码的情况下设置“foo”键,您将收到一个通知。

另外,您可以使用 REDIS 5.0 或更高版本提供的 ACL 功能来限制 Redis 用户对特定键的访问权限。这样,即使攻击者获得了 Redis 的密码,也无法对任意键进行操作。

监控和日志记录

最后,您应该始终监控您的 Redis 实例,并记录所有的操作。这将帮助您追踪任何潜在的安全问题,以及快速识别任何恶意活动。您可以使用名为“命令审计”的 Redis 功能来记录所有命令,它可以将命令发送到 Redis 日志文件或外部日志收集器。

在监控方面,您可以使用名为“Redis-Security-Analyzer”的开源工具检查 Redis 实例的安全性,并快速识别潜在的安全漏洞。该工具可轻松集成到 CI/CD 环境中,以及对于自托管 Redis 的用户,也可以在定期的基础上以 Docker 容器的形式运行。

结论

Redis 是一种强大的键值存储解决方案,但是如果不采取必要的安全措施,就会暴露给攻击。在保护 Redis 实例方面,您应该使用防火墙,设置密码,限制密钥空间,并记录您的操作。通过采取这些措施,您可以更好地保护 Redis 实例,并避免成为攻击者的下一个目标。

示例代码

----- ----- - -------------------
----- ----- - --- -------
  ----- ----------------------
  ----- -----
  --------- ---------------
---

----------------- --- -- ------------------ ------ -- ------

-----
  ----------- ------
  -------- -- -----------------
  ------------------
  ---------------------
  ----------- -- --------------

在此示例代码中,我们使用了 ioredis 客户端库来连接 Redis 实例,设置了一个密码,并且执行了一个简单的“set”和“get”操作。我们还注册了一个 Redis 错误处理程序,以便快速识别任何连接问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672f366feedcc8a97c8d55b8