我有一个运行良好的fail2ban 实例。
但我也喜欢偶尔手动检查日志,并尝试识别围绕我的标准 f2b 定义工作的系统探测器。
我正在寻找的是如何定义一个将持续很长一段时间的监狱,我可以在这样的命令中手动使用它:
fail2ban-client set $JAIL banip $IP
有人可以给我语法来在配置文件中指定一个自定义监狱,该监狱不是真正从日志文件触发的(或者它可能是一个标准监狱,具有某些可能不会使其实际触发的条件),我可以在手动声明?我想要做的是对我在查看日志时亲自识别的手动禁令有更长的禁令时间。
答案1
我是这样做的..
我将其添加到jail.local:
[manban]
enabled = true
filter = manban
action = iptables[name=HTTP, port="80,443,110,995,25,465,143,585,993,587,21,22", protocol=tcp]
logpath = /var/log/manban.log
maxretry = 1
# 1 month
bantime = 2592000
findtime = 3600
然后我添加了文件/etc/fail2ban/filter.d/manban.conf:
[Definition]
failregex = ^\[\w{1,3}.\w{1,3}.\d{1,2}.\d{1,2}:\d{1,2}:\d{1,2} \d{1,4}. \[error] \[client.<HOST>].File does not exist:.{1,40}roundcube.{1,200}
ignoreregex =
我复制了另一个过滤器的过滤协议,但将其指向一个不存在的文件,然后创建了一个虚拟文件:
touch /var/log/manban.log
然后运行命令:
fail2ban-client reload
现在,要手动禁止某个 IP 地址一个月,请输入:
fail2ban-client set manban banip <IP>
这成功了。
现在有些客户“学习”了你的fail2ban bantime,并且会自动调整他们的系统探针以免被禁止。但当你查看日志时,很明显这些是系统探测器。你可以通过设置超长的禁令时间来搞乱他们的系统。您还可以编写一个脚本,将符合特定条件的 IP 转储到您的特殊禁止日志中,并让fail2ban 长时间禁止它们。
答案2
我在上面的配置中遇到错误:
iptables v1.6.0:
80,443,110,995,25,465,143
指定的端口/服务无效。
如果要在多个端口上应用 iptables,则操作应该是iptables-多端口:
[manban]
enabled = true
filter = manban
action = iptables-multiport[name=HTTP, port="80,443,110,995,25,465,220,585,587,8000,9600", protocol=tcp]
logpath = /var/log/manban.log
maxretry = 1
# 1 month
bantime = 2592000
findtime = 3600
此配置有效并正确更新 iptables 规则集。