一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何应对Fail2Ban日志量过大导致系统空间不足

时间:2026-06-23 09:14:47 编辑:袖梨 来源:一聚教程网

Fail2Ban 日志量过大并非主程序直接写日志,而是其防御动作(频繁封禁、匹配失败、SQLite写入)间接导致系统日志、自身数据库及被监控原始日志膨胀,挤占磁盘空间。

Fail2Ban 日志量过大本身不直接写大量日志,但它触发的防御动作(如频繁封禁、匹配失败记录、SQLite数据库写入)会间接放大系统日志和自身数据库体积,进而挤占磁盘空间。真正吃空间的不是 Fail2Ban 主程序,而是它依赖的三类输出:系统日志(/var/log/auth.log 等)、Fail2Ban 自身 SQLite 数据库(/var/lib/fail2ban/fail2ban.sqlite3)、以及被它监控的原始日志文件(如 /var/log/secure)因高频匹配而未及时轮转。

一、定位 Fail2Ban 相关空间占用源头
先确认是不是它在“偷偷占地方”:

  • 查看 Fail2Ban 数据库存储路径和大小:sudo du -sh /var/lib/fail2ban/fail2ban.sqlite3
  • 检查被监控日志是否异常膨胀:sudo ls -lh /var/log/auth.log* /var/log/secure* | head -10
  • 查看 systemd-journald 是否因 Fail2Ban 封禁行为产生密集日志:journalctl -u fail2ban --disk-usage
  • 运行 sudo lsof +D /var/log | grep -i "fail|auth|secure",确认是否有进程持续追加写入。

二、立即释放空间的实操清理
不用重启服务,就能快速腾出几百MB~几GB:

  • 清空 Fail2Ban 数据库(保留封禁状态需谨慎):
    sudo systemctl stop fail2ban
    sudo rm -f /var/lib/fail2ban/fail2ban.sqlite3
    sudo systemctl start fail2ban
    (重启后数据库重建,历史封禁记录清零,但当前 ban 列表仍有效)
  • 压缩并轮转被监控日志:
    sudo logrotate -f /etc/logrotate.d/rsyslog(强制执行系统日志轮转)
    sudo gzip /var/log/auth.log.1(若存在未压缩旧日志)
  • 清理 journal 中 Fail2Ban 的高频操作记录:
    sudo journalctl --vacuum-size=100M
    sudo journalctl -u fail2ban --since "2 days ago" --no-pager | wc -l(先评估量级)

三、防止再次爆盘的核心配置优化
关键不在“删”,而在“控”:

  • 把 Fail2Ban 数据库移到内存盘(避免磁盘IO+节省空间):
    编辑 /etc/fail2ban/fail2ban.conf,添加或修改:
    dbfile = /dev/shm/fail2ban.sqlite3
    dbpurgeage = 12h(只保留12小时内匹配记录)
    dbmaxmatches = 3(默认10,减半可显著降内存与磁盘压力)
  • 调整日志监控后端,降低 CPU 和 IO:
    /etc/fail2ban/jail.local 中指定:
    backend = pyinotify(比 polling 更轻量,比 systemd 更省资源)
  • 精简启用的 jail,禁用无关规则:
    sudo fail2ban-client status 查看活跃 jail
    jail.local 中关闭不用的项,例如:
    [postfix] enabled = false
    [dovecot] enabled = false

四、联动 Nginx 或应用层减少触发源
Fail2Ban 日志暴增往往源于上游攻击未被前置拦截:

  • 在 Nginx 的限流 location 中加 access_log off;,避免把 503 请求全记进 access.log
  • /login/wp-login.php 等高危路径,用 limit_req 提前拦截,减少到达 Fail2Ban 的请求量
  • 若用 Cloudflare 或 WAF,将已识别的恶意 IP 段加入 “IP Access Rules”,让攻击在边缘就被丢弃,根本不会落到服务器日志里

本质上,Fail2Ban 是防御链的最后一环。日志膨胀是症状,不是病因。治标靠清理+配置收紧,治本靠前置过滤+流量收敛。

热门栏目