Redis - 安全
现代 Redis 安全
Section titled “现代 Redis 安全”保护 Redis 实例的安全至关重要,它可以防止数据未经授权的访问,并阻止恶意使用服务器资源。现代 Redis 安全不再仅仅依赖简单的密码,而是采用多层方法。
1. 认证:密码与 ACL
Section titled “1. 认证:密码与 ACL”第一道防线是要求客户端进行认证。虽然简单的密码是一个好的开始,但现代 Redis(6.0 及更高版本)提供了更强大的功能:访问控制列表(ACLs,Access Control Lists)。
基本密码认证(传统与默认用户)
Section titled “基本密码认证(传统与默认用户)”此方法使用单个密码控制对整个服务器的访问。它通过 requirepass 指令配置。建议在 redis.conf 文件中进行设置,因为出于安全考虑,动态使用 CONFIG SET 进行设置可能会被禁用。
# 在你的 redis.conf 文件中:requirepass "your-very-strong-and-secret-password"设置此项后,任何客户端在执行其他命令之前,都必须使用 AUTH 命令进行认证。
> AUTH your-very-strong-and-secret-passwordOK> SET user:1:session "some-data"OK如果没有认证,Redis 将返回错误:
> SET user:1:session "some-data"(error) NOAUTH Authentication required.现代方法:访问控制列表(ACLs)(Redis 6+)
Section titled “现代方法:访问控制列表(ACLs)(Redis 6+)”ACLs 是现代 Redis 安全的首选方法。它们允许你创建具有不同密码和精细权限的多个用户。你可以定义用户可以运行哪些命令以及可以访问哪些键的规则。
下面是一个创建名为 app-user 的受限用户的示例,该用户只能读写以 app: 为前缀的键,并可以在 logs 频道上使用 PUBLISH 命令。
# 创建一个新用户,设置密码和特定权限> ACL SETUSER app-user on >somepassword ~app:* +@read +@write +publish|logsOK
# 以新用户身份进行认证> AUTH app-user somepasswordOK
# 此命令被允许> SET app:user:1 "data"OK
# 此命令不被允许(错误的键模式)> SET other:user:1 "data"(error) NOPERM this user has no permissions on this key
# 此命令不被允许(权限不足)> FLUSHALL(error) NOPERM this user has no right to run the 'flushall' command2. 网络和操作系统级别的安全
Section titled “2. 网络和操作系统级别的安全”仅有认证是不够的。你还必须保护 Redis 运行的环境。
- 绑定到本地主机: 默认情况下,Redis(在保护模式下)仅监听本地主机接口(
127.0.0.1)。如果你的应用程序和 Redis 在同一台机器上,请保留此设置。如果 Redis 需要通过网络访问,请将其绑定到私有网络 IP,而不是公共 IP。在redis.conf中配置:bind 192.168.1.100。 - 保护模式: 这是默认启用的安全功能。如果
protected-mode开启,Redis 仅响应来自本地主机的客户端连接,除非配置了密码或明确绑定到其他 IP。 - 防火墙: 使用防火墙(如 Linux 上的
iptables或ufw)将对 Redis 端口(默认 6379)的访问限制为仅受信任的应用程序服务器。 - 禁用/重命名危险命令: 你可以通过在
redis.conf中将它们重命名为空字符串来禁用滥用可能有害的命令(如FLUSHALL、KEYS、CONFIG):rename-command FLUSHALL ""。 - 以非 root 用户运行: 创建一个拥有有限权限的专用
redis用户和组来运行 Redis 进程。这可以最大限度地减少服务器受损时可能造成的损害。
默认情况下,与 Redis 的通信未加密。如果你正在不安全的网络上传输敏感数据,应启用 TLS/SSL 来加密流量。这需要 Redis 6.0+ 和正确的证书配置。在 redis.conf 中:
# redis.conf TLS/SSL 配置示例port 0tls-port 6379tls-cert-file /path/to/redis.crttls-key-file /path/to/redis.keytls-ca-cert-file /path/to/ca.crt安全最佳实践:清单
Section titled “安全最佳实践:清单”- ✅ 使用 Redis 6.0+ 以获得 ACL 和 TLS 支持。
- ✅ 始终设置一个强大、复杂的密码(
requirepass)或配置 ACL 用户。 - ✅ 使用细粒度的 ACL 规则,而不是单个全局密码。
- ✅ 将 Redis 绑定到受信任的网络接口,绝不绑定到公共 IP。
- ✅ 保持
protected-mode启用。 - ✅ 使用防火墙限制对 Redis 端口的访问。
- ✅ 禁用或重命名危险命令。
- ✅ 以专用非 root 用户运行 Redis。
- ✅ 为通过不信任网络进行加密通信启用 TLS。