我有一个fail2ban配置如下:
这非常有效,我想保持这种方式,以便有效用户有机会在超时后重试登录。现在,我想实现一个规则,如果相同的 IP 被检测为攻击并被阻止,解除阻止 5 次,永久阻止该 IP 并且永远不会再次解除阻止。这可以单独使用fail2ban来实现还是我需要编写自己的脚本来做到这一点?
我在centos中这样做。
Pot*_*thu 42
在 0.11 之前,fail2ban 中没有默认功能或设置来实现这一点。但是从即将发布的 0.11 版本开始,禁令时间会自动计算并随着每次新的进攻呈指数增长,从长远来看,这或多或少意味着永久封锁。
在那之前,您最好的方法可能是设置fail2ban 来监视自己的日志文件。这是一个两步的过程...
我们可能需要创建一个过滤器来检查日志文件(fail2ban 的日志文件)中的BAN
我们需要定义 jail,类似于以下...
[fail2ban] 启用 = 真 过滤器=fail2ban action = iptables-allports[name=fail2ban] logpath = /path/to/fail2ban.log # 查找时间:1 天 查找时间 = 86400 #bantime:1年 禁止时间 = 31536000
从技术上讲,它不是一个永久块,而只是一年的块(我们也可以增加)。
无论如何,对于您的问题(可以单独使用fail2ban 来实现还是我需要编写自己的脚本来做到这一点?)...编写自己的脚本可能会很好。我建议设置脚本以提取经常被禁止的 IP,然后将它们放入/etc/hosts.deny
。
J. *_*hin 36
我相信如果你放入bantime = -1
那个配置部分,它是一个永久块。
xaa*_*xaa 14
Phil Hagen 写了一篇关于这个主题的优秀文章。“使用fail2ban 永久禁止重犯”。
他的建议与 Pothi 相同,但提供了分步指南。
这包括:
fail2ban 已经有一个监狱来禁止再犯。如果你看/etc/fail2ban/jail.conf
,你会发现:
# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
# Make sure that your loglevel specified in fail2ban.conf/.local
# is not at DEBUG level -- which might then cause fail2ban to fall into
# an infinite loop constantly feeding itself with non-informative lines
[recidive]
enabled = false
filter = recidive
logpath = /var/log/fail2ban.log
action = iptables-allports[name=recidive]
sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime = 604800 ; 1 week
findtime = 86400 ; 1 day
maxretry = 5
Run Code Online (Sandbox Code Playgroud)
[recidive]
enabled = true
bantime = 31536000 ; 1 year
findtime = 18144000 ; 1 month
maxretry = 2
Run Code Online (Sandbox Code Playgroud)
为了检查你的记录等级,你可以这样做:fail2ban-client get loglevel
。
使用旧版本的fail2ban,您可能会遇到此错误。
小智 6
要扩展 Chin 的答案,这很简单。只需编辑 2 个设置/etc/fail2ban/jail.local
以匹配您的偏好。
# ban time in seconds. Use -1 for forever. Example is 1 week.
bantime = 604800
# number of failures before banning
maxretry = 5
Run Code Online (Sandbox Code Playgroud)