随着 Redis 在企业应用中的广泛采用,确保其安全性和数据完整性变得至关重要。
无论是防止未经授权的访问、保护敏感数据在传输过程中的安全,还是遵循行业法规要求,都需要我们采取一系列措施来强化 Redis 配置。
一、Redis 安全配置最佳实践
1. 密码认证机制
Redis 支持两种认证方式:
| 认证方式 | 配置项 | 适用版本 | 安全性 | 备注 |
|---|---|---|---|---|
| 传统密码 | requirepass |
≥2.8 | 中 | 所有用户共享同一密码 |
| ACL(访问控制列表) | aclfile / 内联 ACL |
≥6.0 | 高 | 支持多用户、细粒度权限控制 |
推荐做法(Redis 6.0+):
conf
# redis.confaclfile /etc/redis/users.acl
users.acl 示例:
acl
user app on >mYs3cr3tP@ss +@read +@hash -FLUSHDB -CONFIG
user admin on >Adm!nPass ~* &* +@all
上述配置:
app用户仅可读取哈希类数据,禁止执行危险命令;
admin拥有全部权限。
2. 敏感命令禁用或重命名
高危命令如 FLUSHDB、FLUSHALL、CONFIG、DEBUG、SHUTDOWN 应被限制。
conf
# 禁用命令(返回 error)
rename-command FLUSHDB ""
rename-command CONFIG ""
# 或重命名为随机字符串(防自动化攻击)
rename-command KEYS "my_custom_keys_9f3x"
⚠️ 注意:
rename-command在 ACL 启用后效果有限,ACL 是更现代、更安全的替代方案。
3. 网络层防护
conf
# 仅监听内网 IP(禁止 0.0.0.0)
bind 192.168.1.100
# 启用保护模式(默认开启)
protected-mode yes
# 配合防火墙:仅允许可信 IP 访问 6379 端口
黄金法则:Redis 不应直接暴露在公网!
二、Redis SSL/TLS 加密传输详解
1. 启用 TLS/SSL 的必要性
由于 Redis 默认不加密通信,所有数据均以明文形式在网络上传输,这在跨 VPC 或公网环境中存在极大风险。自 Redis 6.0 起支持 TLS/SSL,为用户提供了一种有效的方式加密客户端和服务端之间的通信。
2. 配置步骤
服务端配置 (redis.conf)
conf
port 0 # 关闭非加密端口
tls-port 6380 # 开启 TLS 端口
tls-cert-file /etc/redis/redis.crt
tls-key-file /etc/redis/redis.key
tls-ca-cert-file /etc/redis/ca.crt
tls-protocols "TLSv1.2 TLSv1.3"
tls-ciphers DEFAULT:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA
tls-auth-clients yes # 双向验证(可选)
客户端连接方式
命令行 (redis-cli)
bash
redis-cli --tls \
--cert ./client.crt \
--key ./client.key \
--cacert ./ca.crt \
-p 6380 \
PING
应用代码 (Python 示例)
python
import redis
r = redis.Redis(
host='redis.example.com',
port=6380,
ssl=True,
ssl_certfile='client.crt',
ssl_keyfile='client.key',
ssl_ca_certs='ca.crt'
)
r.set('test', 'encrypted')
三、典型应用场景与架构建议
场景1:内网单机缓存
对于严格隔离的内网环境,可以考虑不启用 TLS,但仍需设置强密码并禁用危险命令。
场景2:跨 VPC/跨可用区
必须启用 TLS,并且建议使用双向验证以增加安全性。
场景3:多租户 SaaS 平台
为了防止不同租户间的数据泄露,强烈建议启用 TLS 并实施严格的 ACL 管理。
场景4:合规性系统(金融/医疗)
满足 PCI DSS、HIPAA 等法规要求,必须启用 TLS 并定期进行安全审计。
五、高频面试题
Q1: Redis 支持哪些类型的认证?
答 : Redis 支持两种主要的认证方式:传统的
requirepass全局密码和 Redis 6.0 引入的 ACL 系统,后者允许为不同的用户分配不同的权限级别。
Q2: 如何验证 Redis TLS 是否生效?
答 : 可以通过
redis-cli --tls测试连接;使用tcpdump检查网络流量是否已加密;或者借助openssl s_client查看证书链信息。