我有这个针对 apache 日志的 fail2ban 监狱(目前有一些小值,所以我可以试验):
enabled = true
maxretry = 3
bantime = 10
findtime = 5
action = 429-ban
我使用ab
(并发:10,请求:10000)对其进行压力测试,我的自定义过滤器几乎立即捕获“高”流量并禁止 IP。
问题是 10 秒后,禁令到期,如果我继续运行ab
,fail2ban 日志现在充满:
Ignore 192.168.XX.XX, expired bantime
Ignore 192.168.XX.XX, expired bantime
Ignore 192.168.XX.XX, expired bantime
从那时起,很长一段时间内,没有出现任何禁令。同时fail2ban日志显示处理,即使我停止ab
。如果我等待足够长的时间并确认 fail2ban 日志活动停止,那么重新启动压力测试会有效地禁止 IP。
我的问题是:
- 这
expired bantime
到底是什么意思? - 即使压力测试
ab
很久以前就停止了,fail2ban 似乎仍会继续处理内容。是否有可能在fail2ban上存在某种我可以减少的缓冲区,这可能也可以解决我的第一个问题?
这意味着如果禁令发生,由于您的配置,禁令将立即过期,因此 unban 将在禁令后立即调用,这将使禁令过程变得不必要。
禁令结束使用公式计算:
发生这种情况是因为与您的配置相关的大量消息禁令结束可能比现在小,所以 fail2ban 过滤器忽略了这一点,只是搜索更多消息。
另一种可能性可能是您的禁止操作并没有真正起作用,因此被禁止的“入侵者”(或者更确切地说是模拟压力测试器)仍然能够产生消息,所以这确实会溢出日志。
或者 fail2ban 根本无法比您生成消息更快地滚动日志。
好吧,这确实表明您的配置中有些地方不正确:正则表达式速度慢、操作错误等,甚至消息太多。
请查看fail2ban wiki ::描述某些优化的最佳实践。
并不真地。但是,如果您要切换程序,则可能会减少寄生虫日志流量: