Redis如何保障Linux系统安全
小樊
38
2025-11-30 17:50:59
Redis在Linux上的安全加固清单
一 基础防护与网络边界
- 保持软件更新:及时升级 Redis 与 Linux 补丁,修复已知漏洞。
- 监听与访问控制:在 /etc/redis/redis.conf 中仅监听本地或受控网段,例如 bind 127.0.0.1;必要时配合防火墙仅放行白名单网段与端口。
- 防火墙策略:使用 UFW/iptables 限制来源 IP 与端口,例如仅允许内网网段访问 6379/tcp。
- 避免暴露公网:Redis 设计用于可信环境,默认不应直接暴露在公网;跨机房/公网通信需叠加加密通道或代理。
- 修改默认端口:将 6379 改为非常见端口,降低自动化扫描命中率。
- 最小权限运行:创建 redis 系统用户,禁止以 root 启动 Redis 服务。
二 身份与命令安全
- 强口令认证:在配置中设置 requirepass <强密码>;主从复制从库需配置 masterauth 与主库一致。
- 精细化授权:Redis 6.0+ 启用 ACL,按用户/命令/键前缀精细授权,避免使用单一高权限账户。
- 禁用或重命名高危命令:通过 rename-command 禁用或重命名 CONFIG、FLUSHDB、FLUSHALL、SHUTDOWN、KEYS 等,降低被滥用风险。
- 保护模式:开启 protected-mode yes,当未设置 bind 和密码时阻止外部访问。
- Lua 脚本安全:避免执行来自不可信来源的 Lua;历史上部分版本存在 EVAL 沙箱逃逸风险,升级版本并严格输入校验。
三 加密传输与端口安全
- 加密传输:跨公网或不可信网络时,启用 SSL/TLS 加密通信,配置 ssl-cert-file 与 ssl-key-file;客户端使用 –ssl 连接。
- 端口与协议:仅开放必要端口(默认 6379/tcp),禁用不必要的协议与接口。
- 通道加固:无法原生 TLS 时,可使用 spiped 等 SSL 代理或 SSH 隧道 建立加密通道。
四 持久化、备份与监控审计
- 持久化策略:根据业务选择 RDB/AOF 或两者结合,并定期校验备份可用性;备份文件与密钥分开存放并设置严格权限。
- 日志与监控:启用日志与 syslog,记录关键操作;使用 redis-cli --monitor 实时观测,结合系统监控与告警。
- 审计与合规:使用 auditd 对 Redis 关键文件与命令进行审计追踪,定期复盘异常。
- 高可用与故障隔离:部署 Redis Sentinel 实现故障切换与可用性提升,减少单点风险。
五 快速配置示例
- 仅本地监听与保护模式
- 编辑 /etc/redis/redis.conf:
- bind 127.0.0.1
- protected-mode yes
- 强口令与高危命令重命名
- requirepass YourStrongPassword
- rename-command CONFIG “”
- rename-command FLUSHDB “”
- rename-command FLUSHALL “”
- 防火墙仅放行内网
- UFW:ufw allow from 192.168.1.0/24 to any port 6379/tcp
- iptables:
- iptables -A INPUT -p tcp --dport 6379 -s 192.168.1.0/24 -j ACCEPT
- iptables -A INPUT -p tcp --dport 6379 -j DROP
- 启用 TLS(示例)
- 生成证书:
- openssl req -x509 -newkey rsa:4096 -keyout /etc/redis/ssl/redis.key -out /etc/redis/ssl/redis.crt -days 365 -nodes
- 配置:
- ssl on
- ssl_cert_file /etc/redis/ssl/redis.crt
- ssl_key_file /etc/redis/ssl/redis.key
- 客户端:redis-cli --ssl --ssl-cert-file /path/redis.crt --ssl-key-file /path/redis.key
- 以非 root 用户启动
- 创建用户:useradd -s /usr/sbin/nologin -M redis
- 以 redis 用户启动服务(按系统服务管理方式配置)