Redis 安全

Redis 安全全攻略(2025 版)

核心原则默认不安全。Redis 设计为「高速内网缓存」,生产环境必须逐层加固


1. 威胁模型一览

威胁场景后果
未授权访问公网暴露 0.0.0.0:6379数据泄露、挖矿、RCE
弱密码 / 无密码requirepass 未设任意命令执行
主从复制劫持从库可写 + 公网写入恶意模块 → RCE
Lua 沙箱突破EVAL 滥用任意代码执行
配置不当protected-mode no绕过本地保护
SSL/TLS 缺失明文传输嗅探、篡改

2. 八大安全加固措施(必须全部开启

2.1 网络隔离(第一道防线

# redis.conf
bind 127.0.0.1        # 仅本地,或内网 IP
# bind 10.0.0.5

protected-mode yes    # Redis 6+ 默认开启

防火墙(仅放通信任 IP):

# ufw
ufw allow from 10.0.0.0/24 to any port 6379
ufw deny 6379

# iptables
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 6379 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP

云环境:VPC + 安全组,禁止公网访问


2.2 认证(第二道防线

# redis.conf
requirepass YourStrongP@ssw0rd2025

# Redis 6+ ACL(推荐替代 requirepass)
aclfile /etc/redis/users.acl

ACL 配置示例(users.acl

# 默认禁用所有
user default off

# 管理员
user admin on #P@ssw0rdAdmin ~* +@all

# 只读用户
user readonly on #Read0nly! ~* -@write -@dangerous

# 应用专用(仅操作 db1 的 key 前缀 app:)
user app on #AppSecret123 ~app:* &* +@read +@write -@admin -@dangerous resetchannels

ACL 命令

ACL SETUSER app on #AppSecret123 ~app:* +@read +@write
ACL SAVE

Redis 7+ 支持 ACL GENPASS 生成安全密码:

redis-cli ACL GENPASS 256   # 生成 64 位哈希

2.3 禁用危险命令(第三道防线

# redis.conf
rename-command CONFIG ""          # 完全禁用
rename-command FLUSHALL "FLUSHALL_XX"
rename-command FLUSHDB  "FLUSHDB_XX"
rename-command EVAL     ""
rename-command SCRIPT   ""

ACL 方式更精细

user app -@dangerous   # 禁止 CONFIG, KEYS, FLUSH*, etc.

2.4 启用 TLS 加密传输(第四道防线

# redis.conf (Redis 6+)
tls-port 6379
port 0                    # 关闭明文端口
tls-cert-file /etc/redis/redis.crt
tls-key-file /etc/redis/redis.key
tls-ca-cert-file /etc/redis/ca.crt

# 客户端强制 TLS
tls-auth-clients yes

生成自签名证书(测试):

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout redis.key -out redis.crt -subj "/CN=redis"

生产推荐:使用 Let’s Encrypt 或企业 CA。


2.5 主从复制安全

# 主节点
requirepass MasterPass123
masterauth MasterPass123

# 从节点
replica-read-only yes
masterauth MasterPass123

Redis 7+ 复制 TLS

tls-replication yes

2.6 禁用模块加载(防 RCE)

# redis.conf
loadmodule ""   # 禁止所有模块

# 或仅允许信任模块
# loadmodule /usr/lib/redis/modules/safe.so

恶意模块(如 exp.so)可直接 system.exec


2.7 日志与监控

loglevel notice
logfile /var/log/redis/redis.log

关键监控项

redis-cli INFO | grep -E "connected_clients|rejected|cmdstat_config"

推荐工具

  • Prometheus + redis_exporter
  • Zabbix / Datadog
  • Falco:检测 EVAL, CONFIG SET dir, MODULE LOAD

2.8 文件系统安全

chown redis:redis /var/lib/redis/ -R
chmod 700 /var/lib/redis/
chmod 600 /etc/redis/redis.conf

防止写壳

dir /var/lib/redis/
dbfilename dump.rdb
# 确保 dir 不可被 redis 用户外部写入

3. 安全配置模板(redis.conf)

# === 网络 ===
bind 127.0.0.1
protected-mode yes
port 6379
timeout 300

# === 认证 ===
requirepass {{STRONG_PASSWORD}}
aclfile /etc/redis/users.acl

# === 危险命令 ===
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command EVAL ""
rename-command SCRIPT ""

# === TLS ===
tls-port 6379
port 0
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt
tls-auth-clients yes

# === 复制 ===
masterauth {{STRONG_PASSWORD}}
replica-read-only yes
tls-replication yes

# === 持久化 ===
save 900 1
save 300 10
save 60 10000

# === 其他 ===
maxmemory 2gb
maxmemory-policy allkeys-lru

4. 安全扫描与验证

4.1 本地自检脚本

#!/bin/bash
echo "=== Redis 安全检查 ==="
redis-cli INFO server | grep "tcp_port"
redis-cli INFO stats | grep rejected
redis-cli ACL LIST
redis-cli CONFIG GET requirepass
redis-cli CONFIG GET bind
redis-cli CONFIG GET protected-mode

4.2 外部扫描

# nmap 检测暴露
nmap -p 6379 --script redis-info <IP>

# redis-cli 尝试未授权
redis-cli -h <IP> INFO

5. 应急响应:已暴露怎么办?

5.1 立即隔离

iptables -A INPUT -p tcp --dport 6379 -j DROP
systemctl stop redis

5.2 检查入侵痕迹

# 1. 检查 CONFIG 被改
redis-cli CONFIG GET dir
redis-cli CONFIG GET dbfilename

# 2. 检查异常 key
redis-cli --scan --pattern "*crontab*"
redis-cli --scan --pattern "*ssh*"

# 3. 检查日志
grep -i "config set" /var/log/redis/redis.log

5.3 常见后门特征

特征检查命令
写 crontabredis-cli KEYS "*crontab*"
写 SSH 公钥redis-cli GET user
恶意模块redis-cli MODULE LIST
异常 EVALredis-cli SLOWLOG GET 10

6. 最佳实践清单(Checklist)

项目检查
仅内网访问bind 127.0.0.1 或 VPC
强密码 + ACLrequirepass + users.acl
禁用危险命令rename-command CONFIG ""
启用 TLStls-port 6379, port 0
从库只读replica-read-only yes
文件权限700 /var/lib/redis
监控告警rejected_connections
定期轮转密码ACL SETUSER newpass

7. 工具推荐

工具用途
redis-cli –tls安全连接
redis-check-aof/rdb备份校验
RedLock分布式锁安全
Redis Sentinel + TLS高可用安全
Redis Enterprise企业级 RBAC + Audit

8. 小结

Redis 安全 = 网络隔离 + 认证 + 命令控制 + 加密传输

生产必做

  1. 绝不暴露 6379 到公网
  2. 必须启用 requirepass + ACL
  3. 必须禁用 CONFIG / EVAL
  4. 必须启用 TLS
  5. 必须监控 rejectedslowlog

需要 Docker / Kubernetes 安全配置Redis Enterprise RBAC、或 自动化安全加固 Ansible 脚本?随时告诉我!

文章已创建 2481

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部