一、立即隔离与网络封禁
当确认Redis密码泄露后,首要任务是切断攻击者可能利用的入口。建议按以下顺序执行:
- 防火墙/IPtables规则封禁:在Redis服务器上执行
iptables -A INPUT -p tcp --dport 6379 -j DROP 临时阻断所有外部访问。若漏洞来源为特定IP,可先封禁该IP段。 - 安全组/ACL策略调整:在云平台控制台(如阿里云、腾讯云)修改Redis实例所在安全组的入方向规则,拒绝所有来源(0.0.0.0/0)对6379端口的访问。
- 修改监听地址与端口:临时将Redis配置中的
bind 127.0.0.1,仅允许本机访问;或更换端口号(如改为16379)以规避自动扫描。
二、重置密码并重启服务
网络隔离后,立即修改Redis密码:
- 通过redis-cli登录(若已开启无密码访问需先停止服务):
redis-cli 执行 CONFIG SET requirepass '新密码'。 - 更新配置文件
/etc/redis/redis.conf 中的 requirepass 字段,确保重启后生效。 - 执行
redis-cli SHUTDOWN 正常关闭Redis服务,再通过 systemctl start redis 重新启动。
注意:如果密码泄露前已存在未授权访问,建议同时修改所有关联应用(如WordPress、Node.js后台)中的数据库连接密码。
三、数据安全检查与恢复
检测是否存在数据被篡改或窃取:
- 运行
redis-cli -a '新密码' INFO keyspace 对比预先记录的key数量,检查是否有异常新增或删除。 - 使用
redis-cli --bigkeys 扫描是否存在大key(攻击者可能写入恶意数据)。 - 若有持久化文件(dump.rdb或aof),可通过
redis-check-rdb 或 redis-check-aof 工具验证完整性。
数据恢复建议:如确认被篡改,应使用最近的未被入侵前的备份(通过RDB或AOF文件)进行还原,并确认密码泄露时间点后的业务数据是否可回滚。
四、日志审计与溯源
记录并保存以下日志:
- Redis自身的日志文件(
logfile /var/log/redis/redis.log),查看异常连接记录。 - 服务器系统日志(
/var/log/auth.log 或 /var/log/secure),检查是否通过ssh爆破等方式获得服务器权限。 - 云平台API操作日志,排查是否有通过控制台修改安全组的记录。
溯源建议:结合攻击时间、源IP、执行的命令(可通过 MONITOR 提前开启审计,但应急时需注意性能影响),分析泄露源头并保留证据。
五、后续安全加固措施
防止同类事件再次发生:
- 配置rename-command禁用危险命令:在
redis.conf 中添加 rename-command FLUSHALL "" 或设置为自定义命令名,防止攻击者清空数据。 - 绑定IP与防火墙双重保护:
bind 127.0.0.1 内网IP,并仅允许应用服务器IP访问6379端口。 - 启用密码复杂度与定期轮换:密码长度不少于20位,包含大小写字母、数字及特殊字符,建议每90天更新一次。
- 使用TLS加密传输:支持Redis 6+的TLS功能,配置
tls-port 6380 和 tls-cert-file 等,防止中间人窃听密码。 - 开启AOF持久化并设置密码:定期备份并测试恢复流程。
应急处理完毕后,建议进行全链路安全渗透测试,确保无其他隐患。