我有一个配置如下的fail2ban:
- 尝试3次失败后阻止ip
- 300秒超时后释放IP
这非常有效,我想保持这种方式,以便有效用户有机会在超时后重试登录。现在,我要实施一个规则,如果检测到同一IP被攻击并被阻止,则将其取消阻止5次,将永久阻止该IP,再也不会再次阻止。可以仅使用fail2ban来实现,还是需要编写自己的脚本来做到这一点?
我正在使用centos。
我有一个配置如下的fail2ban:
这非常有效,我想保持这种方式,以便有效用户有机会在超时后重试登录。现在,我要实施一个规则,如果检测到同一IP被攻击并被阻止,则将其取消阻止5次,将永久阻止该IP,再也不会再次阻止。可以仅使用fail2ban来实现,还是需要编写自己的脚本来做到这一点?
我正在使用centos。
Answers:
在0.11之前,fail2ban中没有默认功能或设置可以实现此目的。但是从即将发布的0.11版本开始,禁令时间会自动计算,并且随着每次新的违规行为呈指数增长,从长远来看,这将或多或少地意味着永久性的封锁。
在此之前,最好的方法可能是设置fail2ban来监视其自己的日志文件。这是一个两步过程...
我们可能需要创建一个过滤器来检查日志文件(fail2ban的日志文件)中的BAN。
我们需要定义监狱,类似于以下内容...
[fail2ban] 启用=真 筛选器= fail2ban 动作= iptables-allports [名称= fail2ban] logpath = /path/to/fail2ban.log #findtime:1天 查找时间= 86400 #禁止时间:1年 bantime = 31536000
从技术上讲,这不是永久性的限制,而是仅一年的限制(我们也可以增加)。
无论如何,对于您的问题(可以单独使用fail2ban来实现,还是我需要编写自己的脚本来做到这一点?)...编写自己的脚本可能会很好。我建议设置脚本以提取经常被禁止的IP,然后将其放入/etc/hosts.deny
。
sshd_config
,这可能仅会阻止sshd“会话”的3次失败登录-不会提供3次失败登录。例如,默认情况下,攻击者可以在sshd断开连接之前的单个会话中尝试使用['pass1','pass2','pass3']。根据sshd设置的日志记录方式,这可能显示为1、2或3次fail2ban尝试。
我相信,如果您bantime = -1
在该配置节中添加了它,那将是一个永久性的障碍。
bantime
任何负值设置为永久禁止(自Fail2Ban ver。0.6.1(2006/03/16)起)
菲尔·哈根(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
[recidive]
enabled = true
bantime = 31536000 ; 1 year
findtime = 18144000 ; 1 month
maxretry = 2
为了检查你的记录等级,你可以这样做:fail2ban-client get loglevel
。
使用旧版本的fail2ban,您可以获得此错误。
转到vim,打开/etc/fail2ban/jail.conf
并在之后修改fail2ban service restart
:
# "bantime" is the number of seconds that a host is banned.
bantime = ***1296000***
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = ***60000***
# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***