我有一个配置如下的 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