Fail2Ban 日志量过大并非主程序直接写日志,而是其防御动作(频繁封禁、匹配失败、SQLite写入)间接导致系统日志、自身数据库及被监控原始日志膨胀,挤占磁盘空间。
Fail2Ban 日志量过大本身不直接写大量日志,但它触发的防御动作(如频繁封禁、匹配失败记录、SQLite数据库写入)会间接放大系统日志和自身数据库体积,进而挤占磁盘空间。真正吃空间的不是 Fail2Ban 主程序,而是它依赖的三类输出:系统日志(/var/log/auth.log 等)、Fail2Ban 自身 SQLite 数据库(/var/lib/fail2ban/fail2ban.sqlite3)、以及被它监控的原始日志文件(如 /var/log/secure)因高频匹配而未及时轮转。
一、定位 Fail2Ban 相关空间占用源头
先确认是不是它在“偷偷占地方”:
sudo du -sh /var/lib/fail2ban/fail2ban.sqlite3 sudo ls -lh /var/log/auth.log* /var/log/secure* | head -10 journalctl -u fail2ban --disk-usage sudo lsof +D /var/log | grep -i "fail|auth|secure",确认是否有进程持续追加写入。二、立即释放空间的实操清理
不用重启服务,就能快速腾出几百MB~几GB:
sudo systemctl stop fail2bansudo rm -f /var/lib/fail2ban/fail2ban.sqlite3sudo systemctl start fail2bansudo logrotate -f /etc/logrotate.d/rsyslog(强制执行系统日志轮转)sudo gzip /var/log/auth.log.1(若存在未压缩旧日志) sudo journalctl --vacuum-size=100Msudo journalctl -u fail2ban --since "2 days ago" --no-pager | wc -l(先评估量级)三、防止再次爆盘的核心配置优化
关键不在“删”,而在“控”:
/etc/fail2ban/fail2ban.conf,添加或修改:dbfile = /dev/shm/fail2ban.sqlite3dbpurgeage = 12h(只保留12小时内匹配记录)dbmaxmatches = 3(默认10,减半可显著降内存与磁盘压力) /etc/fail2ban/jail.local 中指定:backend = pyinotify(比 polling 更轻量,比 systemd 更省资源) sudo fail2ban-client status 查看活跃 jailjail.local 中关闭不用的项,例如:[postfix] enabled = false[dovecot] enabled = false 四、联动 Nginx 或应用层减少触发源
Fail2Ban 日志暴增往往源于上游攻击未被前置拦截:
access_log off;,避免把 503 请求全记进 access.log /login、/wp-login.php 等高危路径,用 limit_req 提前拦截,减少到达 Fail2Ban 的请求量 本质上,Fail2Ban 是防御链的最后一环。日志膨胀是症状,不是病因。治标靠清理+配置收紧,治本靠前置过滤+流量收敛。