使用 fail2ban 重试 n 次后永久封锁 IP

使用 fail2ban 重试 n 次后永久封锁 IP

我有一个配置如下的 fail2ban:

  • 三次失败后封锁 IP
  • 300 秒超时后释放 IP

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

我在 centos 中做这个。

答案1

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

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

步骤1

我们可能需要创建过滤器检查禁止在日志文件中(fail2ban 的日志文件)

第2步

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

[失败2禁止]
已启用=真
过滤器 = fail2ban
操作 = iptables-allports[name=fail2ban]
logpath = /path/to/fail2ban.log
# 查找时间:1 天
查找时间 = 86400
# bantime:1年
银行时间 = 31536000

从技术上来说,并非永久性的阻碍,但只能阻止一年(我们也可以增加)。

无论如何,对于你的问题(这可以单独使用 fail2ban 来实现吗,还是我需要编写自己的脚本来实现?)...编写自己的脚本可能会很有效。设置脚本以提取频繁地/etc/hosts.deny我建议先禁止 IP,然后将其放入。

答案2

我相信如果你放入bantime = -1那个配置部分,它就是一个永久的阻止。

答案3

菲尔·哈根 (Phil Hagen) 就这个主题写了一篇精彩的文章。”使用 fail2ban 永久封禁重复违规者“。

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

其中包括:

  • 按监狱分开禁止列表(ip.blocklist.ssh,ip.blocklist.xxx)
  • 服务重启时自动加载禁令列表(我认为这种方法的主要优点)
  • 如果中继器启动,则发送电子邮件通知。

答案4

扩展一下 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

相关内容