client list命令可直接提取慢连接来源ip,关键需结合idle(空闲秒数)、addr(客户端ip)和cmd(最近命令)字段筛选:idle>600且非本地ip、cmd为get/exists等的连接极可能为缓存穿透攻击源。

直接查 CLIENT LIST 就能拿到源 IP,但必须结合 idle 和 cmd 字段过滤,否则会被海量正常连接淹没。
用 CLIENT LIST 提取可疑连接的 IP
缓存穿透攻击往往表现为大量短生命周期、重复查询无效 key 的连接。这些连接通常不会立刻断开,而是卡在某次命令后长期空闲——这正是 CLIENT LIST 中 idle 字段的用武之地。
-
idle值偏高(比如 > 600)且cmd是get或exists,说明该连接发完请求后就挂起,极可能是脚本批量请求后未关闭连接 -
addr字段格式为IP:PORT,提取前半段即可获得真实来源 IP;注意排除127.0.0.1和内网段(如192.168.x.x、10.x.x.x) - 单条命令快速筛选:
redis-cli CLIENT LIST | awk -F' ' '{for(i=1;i600 {gsub(/addr=|:.*/,"",addr); print addr}' | sort -u
确认该 IP 是否真在发起穿透请求
光有 IP 不够,得验证它是否真在刷不存在的 key。不能只看连接数,要看实际请求内容。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 用
redis-cli --raw monitor实时抓包,配合grep过滤目标 IP(需先用CLIENT LIST确认其端口,再用tcpdump或应用层日志关联) - 重点观察请求 pattern:是否高频出现
get user:-1、get goods:999999999这类明显越界或非法格式的 key - 如果业务层有 access log,比对同一 IP 在 1 分钟内是否集中触发大量
404或数据库SELECT ... WHERE id = ?返回空的结果
Redis 8.2.3 及以上版本可启用连接标签追踪
新版 Redis 支持给客户端连接打标签(CLIENT SETNAME),前提是应用代码主动设置。这对溯源比单纯靠 addr 更可靠。
- 应用启动时调用
CLIENT SETNAME app:order-service:v2.3,攻击流量一般不会设 name,留空或用默认值 -
CLIENT LIST输出中name字段为空或为redis-cli的连接,优先标记为可疑 - 若已知某批恶意请求来自特定 SDK 或 UA,可在接入层(如 Nginx)用
X-Real-IP+USER-AGENT组合写入CLIENT SETNAME,后续排查可直接过滤
真正难的不是找到 IP,而是区分它是真实用户误操作、前端 Bug 还是自动化攻击——这需要把 CLIENT LIST 数据和应用日志、DB 慢查日志、WAF 规则命中记录三者对齐,缺一不可。










