使用fail2ban重试n次后的永久IP块


38

我有一个配置如下的fail2ban:

  • 尝试3次失败后阻止ip
  • 300秒超时后释放IP

这非常有效,我想保持这种方式,以便有效用户有机会在超时后重试登录。现在,我要实施一个规则,如果检测到同一IP被攻击并被阻止,则将其取消阻止5次,将永久阻止该IP,再也不会再次阻止。可以仅使用fail2ban来实现,还是需要编写自己的脚本来做到这一点?

我正在使用centos。


2
这是一个很愚蠢的想法-您向iptables添加的规则越多,获得的速度就越慢。
symcbean 2012年

14
感谢您的评论,但我需要的是答案,而不是建议。不管怎么说,还是要谢谢你。
BTR Naidu

5
有时,“不做X”的正确答案是“不做X”。
ceejayoz

Answers:


32

在0.11之前,fail2ban中没有默认功能或设置可以实现此目的。但是从即将发布的0.11版本开始,禁令时间会自动计算,并且随着每次新的违规行为呈指数增长,从长远来看,这将或多或少地意味着永久性的封锁。

在此之前,最好的方法可能是设置fail2ban来监视其自己的日志文件。这是一个两步过程...

步骤1

我们可能需要创建一个过滤器来检查日志文件(fail2ban的日志文件)中的BAN

第2步

我们需要定义监狱,类似于以下内容...

[fail2ban]
启用=真
筛选器= fail2ban
动作= iptables-allports [名称= fail2ban]
logpath = /path/to/fail2ban.log
#findtime:1天
查找时间= 86400
#禁止时间:1年
bantime = 31536000

从技术上讲,这不是永久性的限制,而是仅一年的限制(我们也可以增加)。

无论如何,对于您的问题(可以单独使用fail2ban来实现,还是我需要编写自己的脚本来做到这一点?)...编写自己的脚本可能会很好。我建议设置脚本以提取经常被禁止的IP,然后将其放入/etc/hosts.deny


1
添加到这个极好的答案...根据日志记录和MaxAuthTries的配置方式sshd_config,这可能仅会阻止sshd“会话”的3次失败登录-不会提供3次失败登录。例如,默认情况下,攻击者可以在sshd断开连接之前的单个会话中尝试使用['pass1','pass2','pass3']。根据sshd设置的日志记录方式,这可能显示为1、2或3次fail2ban尝试。
乔纳森·瓦纳斯科

5
现在,有一个fail2ban隐性过滤器。
吉列尔莫·普兰迪

即将发布的0.11是什么意思?最近的似乎是10.3.1:github.com/fail2ban/fail2ban/releases
user5950

我希望你的意思是0.10.3.1。您可以在github.com/fail2ban/fail2ban/tree/0.11上跟踪“ 0.11”的进度。基本上,它还没有发布!
Pothi Kalimuthu

29

我相信,如果您bantime = -1在该配置节中添加了它,那将是一个永久性的障碍。


2
的确,将bantime任何负值设置为永久禁止(自Fail2Ban ver。0.6.1(2006/03/16)起)
voretaq13年

3
添加-1到设置使fail2ban无法响应
Erdem Ece 2015年

13

菲尔·哈根(Phil Hagen)在这个问题上写了一篇很棒的文章。“ 永久禁止使用fail2ban重犯 ”。

他的建议与Pothi相同,但提供了逐步指导。

这包括:

  • 由监狱分开的禁令清单(ip.blocklist.ssh,ip.blocklist.xxx)
  • 如果服务重新启动,则禁令列表会自动加载(此方法的主要优点恕我直言)
  • 电子邮件通知(如果中继器参与)。

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

4

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

如何添加jail.local?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

为了检查你的记录等级,你可以这样做:fail2ban-client get loglevel

  • set loglevel MYLEVEL:将日志记录级别设置为MYLEVEL。级别:严重,错误,警告,通知,信息,调试
  • Wiki上的更多命令

使用旧版本的fail2ban,您可以获得此错误


0

转到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***
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.