监控告警处理器占用异常,排查发现缓存实例没有密码且监听全部地址,公网可以直接连上,机器上还多了一条定时任务。
这类报错背后常见的原因有几处,逐个排除就行。默认配置无密码且绑定全部网卡;安全组放行了缓存端口;危险命令没有禁用,可以被直接写入。
先确认监听地址和密码
redis-cli config get bind && redis-cli config get requirepass
随后改为只监听内网并设密码
grep -nE '^(bind|requirepass)' /etc/redis.conf
再往下排查被写入的定时任务
for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u $u; done
封禁公网访问端口
iptables -I INPUT -p tcp --dport 6379 -j DROP
那几天正好在做别的变更,先把时间线对齐才敢动手。
排查用的命令都是临时敲的,没有写成脚本,事后才整理。
恢复的判定其实很直接。公网无法连接缓存端口,只有内网和密码可以访问,异常定时任务清理干净。
容易忽略的是,被入侵过要按失陷处理,密钥和配置都可能被改;清掉定时任务不等于干净,先做快照再决定是否重建。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。