找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12|回复: 0

[维护日志] 📝 Fail2ban 持久化黑名单异常排查复盘(2025-12-02)

[复制链接]
  • 打卡等级:本地老炮

9337

威望

7448

金钱

1万

贡献

管理员

自由的灵魂

积分
107434
主题
5630
回帖
26661
注册时间
2003-4-10
最后登录
2026-10-2
发表于 2025-12-3 00:35:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×


🔴 问题现象
  • 仪表盘显示持久化黑名单 302,751(后增至 320,427)
  • 但日志 persistent.log / realtime.log 数小时无更新
  • fail2ban-persistent.json 时间戳正常(说明数据生成未停)
  • 关键错误日志:ERROR: 当前用户无权访问 ipset(请以 root 身份运行)出现在 20:30、21:00、21:30(每 30 分钟一次)



🧭 排查路径与关键认知迭代

阶段假设验证方式结论
1️⃣ 初判日志未写入 = 脚本未运行查看 JSON 时间戳❌ 脚本在运行,只是日志静默
2️⃣ 权限怀疑cron 任务非 root 执行sudo crontab -l✅ 任务确实在 root cron 中
3️⃣ 调度器怀疑宝塔 or systemd 重复调度检查宝塔 + systemctl list-timers❌ 仅 root cron 在工作
4️⃣ 脚本逻辑怀疑generate-persistent.sh 自己读 ipset检查脚本内容❌ 实际是 export-ips.sh 报错
5️⃣ 环境怀疑cron 的 PATH 缺失导致 ipset 命令找不到which ipset + 模拟 cron 环境✅ 根本原因确认


🎯 根本原因(Root Cause)
💡 Cron 的默认 PATH 不包含 /sbin,而 ipset 位于 /sbin/ipset
→ 脚本中 ipset list 命令找不到可执行文件 → 返回非零退出码
→ 触发脚本中的“权限错误”提示(误报,实际是命令未找到)
  1. # cron 默认 PATH(典型值)
  2. PATH=/usr/bin:/bin

  3. # ipset 实际位置
  4. /sbin/ipset   ← 不在 PATH 中!
复制代码



✅ 解决方案在脚本开头显式设置完整 PATH:
  1. #!/bin/bash
  2. PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  3. # ... rest of script
复制代码

修复后,ipset 命令可被找到,权限检查通过,流程正常。



🛠️ 经验总结(避坑指南)
教训正确做法
不要用“权限错误”笼统提示命令失败区分:command not found vs permission denied
Cron 环境 ≠ 交互式 Shell所有脚本必须显式设置 PATH、HOME 等环境变量
日志来源要清晰避免 cron 重定向 + 脚本日志双写,统一日志出口
先确认调度源,再改逻辑用 crontab -l、systemctl list-timers、pstree 精准定位
模拟 cron 环境测试用 env -i PATH=... script.sh 验证



🔧 推荐加固措施(可选)
  • 脚本开头加 PATH(已做)
  • 用 command -v ipset 预检命令存在性
  • 日志中加入 [USER] 和 [ENVATH=...] 调试信息
  • 使用 flock 防止 cron 任务堆积



🌟 最终状态
  • ✅ 实时防护:60,183 IP
  • ✅ 持久化黑名单:320,427 IP
  • ✅ 更新时间:00:32(与当前时间一致)
  • ✅ 无权限错误日志
系统稳定运行,问题闭环。

📌 一句话心得:

“在自动化脚本中,永远不要假设环境变量和你终端里一样。”

保存此笔记,下次遇到类似“权限错误”,先查 PATH!💪



不懂就搜!点此搜点拨论坛。如果本坛没有,请尝试点此问AI,或跟帖提问。
发帖前注意看置顶帖。
不定期借助AI对点拨论坛陈年老帖进行挖坟回复,打扰勿怪!
泛泛的提问只能得到泛泛的回答
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|点拨论坛 |网站地图

GMT+8, 2026-10-2 05:21 , Processed in 0.437341 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表